ストレージの暗号化
AKSではKubernetesのクラスタのNodeはAzureの仮想マシンとして構成されます。したがって、まずはAzureの仮想マシンのストレージの暗号化のしくみについて確認しておきましょう。Azureの仮想マシンのストレージの暗号化には、以下の図のように3パターンがあります。
暗号化の鍵の管理方法には、以下の2パターンがあります。鍵の管理方法であるCMK(Customer Managed Keys)かPMK(Platform Managed Keys)かはAKSでも選択可能です。
- CMK クラウドの利用者が鍵を管理する。鍵の保存先はKey Vaultになる
- PMK クラウド側が鍵を管理する
AKSの場合、仮想マシンOSの機能を使って行う暗号化であるADE(Azure Disk Encryption)は利用できませんが、ホストでの暗号化(Encryption at Host)とSSE(Server-Side Encryption)は利用できます。一時ディスクやキャッシュも暗号化したい場合は、ホストでの暗号化を利用する必要があります。
Secretsの保護
SecretsはパスワードやOAuthトークン、SSHキーなどの機密情報を扱うための仕組みです。Secretsに保存することで、yamlファイルやコンテナイメージ、環境変数に保存するよりも安全に扱えます。Secretsはbase64でエンコードされた文字列として保存されており、APIにアクセスできる人なら誰でも取得することができるため、SecretsリソースへのRBACポリシーの適用で制限できます。
Secretsの内容をPodから参照する方法としては、主に環境変数として受け取る方法とファイルとしてMountする方法があります。
Secretsはクラウドにより提供される外部のKey Management Serviceと連携させることもできます。Azureの場合はKey Vaultを利用できます。
デフォルトでは、Kubernetes Secretsと同期をさせて環境変数から参照した場合、Podを再起動しても新しい値が自動的にはKubernetes Secretsに反映されません。「enable-secret-rotation」オプションを有効化することで、一定間隔で同期されます。
Key VaultをPodにMountすると、KeyVault関連の障害時にPodが起動できなくなります。一方で、Kubernetes Secretsと同期をさせて環境変数から参照した場合は古い値が返る可能性はありますが、Podの起動は可能です。Key Vaultとの連携で可用性を犠牲にしたくない場合は、こちらを優先して利用しましょう。
Key Vault連携の詳細や具体的な構成方法は、以下の公式ドキュメントに記載されています。
IMDSへのアクセス制御
AKSのNodeの実体はAzureの仮想マシンです。Azureの仮想マシン内から特別なエンドポイント(169.254.169.254)にアクセスすると、仮想マシンのメタデータやManaged Identityのトークンを取得できます。こうした仕組みをIMDS(Instance Metadata Service)と呼びます。AzureのIMDSは仮想マシン内のアプリケーションを信頼するポリシーであるため、Podからもメタデータやトークンが取得できます。
Managed IdentityのIDが分かると、取得したIDを利用したリソースアクセスができるので、複数のプロジェクトでクラスタを共有しているような場合は、他プロジェクトが管理するリソースにアクセスできてしまいます。こうした環境では、IMDSへのアクセスが不要なNamespaceではNetwork PolicyでIMDSへのEgressを拒否しておくとよいでしょう。
将来的にはIMDSを使わないで済むようなクラウド側での取り組みも行われています。以下に具体的な内容が記載されているのでご確認ください。
今回は、コンテナセキュリティを学ぶ上での基礎となる技術について説明しました。次回は、ネットワークセキュリティについて説明します。
著者プロフィール
野村総合研究所 湯川勇太(ゆかわ ゆうた)
前職で大手家電量販店のECモールの立ち上げとECサイトの刷新プロジェクトを経験。NRI入社後は製造業の商品検索システムを担当した。現在は大手物流企業向けの基幹システムの方式設計や技術検証、トラブル対応を行っている。
Microsoft 真壁 徹(まかべ とおる)
株式会社大和総研に入社。公共向けパッケージシステムのアプリケーション開発から IT 業界でのキャリアを始める。その後日本ヒューレット・パッカード株式会社に籍を移し、主に通信事業者向けアプリケーション、システムインフラストラクチャの開発に従事する。その後、クラウドコンピューティングとオープンソースに可能性を感じ、OpenStack関連ビジネスでアーキテクトを担当。パブリッククラウドの成長を信じ、日本マイクロソフト株式会社へ。主な著書『しくみがわかるKubernetes Azureで動かしながら学ぶコンセプトと実践知識』(翔泳社)『Microsoft Azure 実践ガイド』(インプレス)など。趣味はビール。
Microsoft 惣道 哲也(そうどう てつや)
前職は日本ヒューレット・パッカード株式会社で、半導体テスタのソフトウェア開発を担当し、その後、通信・金融系システムのインフラ構築・アプリケーション開発・プロジェクトマネージャに従事。さらに、オープンソースを中心としたシステム・ソリューションの提案・設計・導入・技術コンサルティングを行い、Hadoop、クラウド、コンテナ/DevOps、Deep Learning分野におけるテクニカルアーキテクトとして活動。現在は日本マイクロソフト株式会社にて、Azureを中心としたお客様への技術支援に従事。主な著書『Elasticsearch実践ガイド』『Elastic Stack実践ガイド(Elasticsearch/Kibana編)』(インプレス)など。