Amazon EKS の暗号化のベストプラクティス - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon EKS の暗号化のベストプラクティス

Amazon Elastic Kubernetes Service (Amazon EKS) を使用すると、独自の Kubernetes コントロールプレーンやノードをインストールまたは維持 AWS することなく、 で Kubernetes を実行できます。Kubernetes では、ユーザー証明書、パスワード、API キーなどの機密情報の管理にシークレットが役立ちます。デフォルトでは、これらのシークレットは API サーバーの基盤となるデータストアに暗号化されずに保存されます。このデータストアは etcd と呼ばれます。Amazon EKS では、etcdノードの Amazon Elastic Block Store (Amazon EBS) ボリュームは Amazon EBS 暗号化で暗号化されます。API アクセスまたは etcd のアクセス権を持つすべてのユーザーは、シークレットを取得または変更できます。さらに、名前空間にポッドを作成する権限を持つユーザーは誰でも、そのアクセス権を使ってその名前空間のシークレットを読み取ることができます。マネージドキーまたはカスタマー AWS マネージドキーを使用して AWS KMS keys、Amazon EKS で保管中のこれらのシークレットを暗号化できます。etcd を使用する代替の方法として、AWS Secrets and Config Provider (ASCP) (GitHub リポジトリ) を使用することもできます。ASCP は IAM およびリソースベースのポリシーと統合して、アクセス先をクラスター内の特定の Kubernetes ポッド内のシークレットのみに制限および限定します。

Kubernetes では、次の AWS ストレージサービスを使用できます。

  • Amazon EBS では、ツリー内ストレージドライバーまたは Amazon EBS CSI ドライバーを使用できます。どちらにも、ボリュームの暗号化やカスタマーマネージドキーの提供のためのパラメータが含まれています。

  • Amazon Elastic File System (Amazon EFS) には、Amazon EFS CSI ドライバーを使用できます。これは動的プロビジョニングと静的プロビジョニングの両方をサポートします。

このサービスでは、以下の暗号化のベストプラクティスを検討してください。

  • etcd を使用している場合、デフォルトでシークレットオブジェクトは暗号化されずに保存されますが、シークレットを保護するために以下を実行してください。

    • 保管中のシークレットデータを暗号化する」(Kubernetes ドキュメント)。

    • Kubernetes シークレットのエンベロープ暗号化 AWS KMS に使用します。これにより、シークレットを一意のデータキーで暗号化できます。キー暗号化キーを使用して AWS KMS 、データキーを暗号化できます。キー暗号化キーは、定期的なスケジュールで自動的にローテーションできます。Kubernetes 用 AWS KMS プラグインを使用すると、すべての Kubernetes シークレットが暗号文etcdで に保存されます。これらは Kubernetes API サーバーによってのみ復号できます。詳細については、「Amazon EKS 暗号化プロバイダーによる詳細な防御のサポートの使用」および「既存のクラスター AWS KMS で で Kubernetes シークレットを暗号化する」を参照してください。

    • シークレットの読み取りおよび書き込みを制限するロールベースアクセスコントロール (RBAC) ルールで認可を有効化または設定します。新しいシークレットの作成や、既存のシークレットの置換を行う権限を制限します。詳細については、「認可の概要」(Kubernetes ドキュメント) を参照してください。

    • ポッドに複数のコンテナを定義してあり、そのうちの 1 つのコンテナのみがシークレットへのアクセスを必要とする場合は、他のコンテナがそのシークレットにアクセスできないようにボリュームマウントを定義します。tmpfs ボリュームとしてマウントされたシークレットはインスタンス化され、ポッドが削除されるとノードから自動的に削除されます。環境変数を使用することもできますが、環境変数の値がログに表示される可能性があるため、この方法はお勧めしません。詳細については、「シークレット」(Kubernetes ドキュメント) を参照してください。

    • watch へのアクセスと、名前空間内のシークレットに対する list リクエストの許可はできるだけ避けてください。Kubernetes API では、クライアントがその名前空間のすべてのシークレットの値を調べることができるため、このようなリクエストはかなりの力を持ちます。

    • 読み取り専用アクセスを含めて、クラスター管理者のみが etcd にアクセスできるようにしてください。

    • 複数の etcd インスタンスがある場合、etcdetcd ピア間の通信に TLS を使用していることを確認してください。

  • ASCP を使用している場合は、シークレットを保護するために次のことを行ってください。

  • 環境変数によるデータ漏えいのリスクを低減するために、AWS Secrets Manager と Secret Store CSI Driver用設定プロバイダー (GitHub) を使用することをお勧めします。このドライバーを使用すると、Secrets Manager に保存されているシークレットと、パラメータストアに保存されているパラメータを、Kubernetes ポッドにマウントされたファイルとして表示できます。

    注記

    AWS Fargate はサポートされていません。

  • Amazon CloudWatch メトリクスフィルタとアラームを作成して、シークレットの削除や削除待ち期間中のシークレットバージョンの使用など、管理者が指定する操作に関するアラートを送信します。詳細については、「異常検出に基づいてアラームを作成する」を参照してください。