このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。
EKS Pod Identity が Pod に AWS サービスへのアクセス権を付与する仕組みを学ぶ
ポッドのコンテナ内のアプリケーションは AWS SDK または AWS CLI で、AWS Identity and Access Management (IAM) アクセス許可を使用した AWS サービスへの API リクエストを行うことができます。アプリケーションは AWS 認証情報で AWS API リクエストに署名する必要があります。
EKS Pod Identity は、Amazon EC2 インスタンスプロファイルから Amazon EC2 インスタンスに認証情報を提供する場合と同じような方法で、アプリケーションの認証情報を管理する機能があります。AWS 認証情報を作成してコンテナに配布したり、Amazon EC2 インスタンスのロールを使用したりする必要はありません。IAM ロールを Kubernetes サービスアカウントと関連付けて、サービスアカウントを使用するように Pod を設定できます。
各 EKS Pod Identity の関連付けは、指定されたクラスター内のネームスペース内のサービスアカウントにロールをマップします。複数のクラスターに同じアプリケーションがある場合、ロールの信頼ポリシーを変更することなく、各クラスターで同一の関連付けを行うことができます。
ポッドが関連付けられたサービスアカウントを使用する場合、Amazon EKS はポッドのコンテナに環境変数を設定します。環境変数は、AWS CLI を含む AWS SDK が EKS Pod Identity の認証情報を使用するように設定します。
EKS Pod Identity の利点
EKS Pod Identity には次の利点があります。
-
最小特権 – IAM アクセス許可の範囲をサービスアカウントに設定すると、そのサービスアカウントを使用する Pod にのみそのアクセス許可を付与できます。また、この機能により、
kiam
やkube2iam
などのサードパーティーのソリューションが不要になります。 -
認証情報の分離 – Amazon EC2 インスタンスメタデータサービス (IMDS) へのアクセスが制限されている場合、ポッド内のコンテナは、そのコンテナが使用するサービスアカウントに関連付けられている IAM ロールの認証情報のみを取得できます。コンテナは、他の Pod 内のコンテナで使われている認証情報にアクセスすることはできません。IMDS が制限されていない場合、ポッドのコンテナは「Amazon EKS ノード IAM ロール」にもアクセスでき、コンテナは同じノード上にある他のポッドの IAM ロールの認証情報にアクセスできる可能性があります。詳細については「ワーカーノードに割り当てられたインスタンスプロファイルへのアクセスを制限する」を参照してください。
注記
hostNetwork: true
で設定されたポッドは常に IMDS にアクセスできますが、AWS SDK および CLI は、有効である場合は Pod Identity 認証情報を使用します。
-
監査性 – 遡及的な監査を確実に行うため、AWS CloudTrail を介してアクセスとイベントのロギングを利用できます。
重要
コンテナはセキュリティ境界ではなく、Pod Identity を使用してもこの点は変わりません。同じノードに割り当てられたポッドはカーネルを共有し、ポッド設定によっては他のリソースも共有される可能性があります。別々のノードで実行されているポッドはコンピューティングレイヤーで分離されますが、Kubernetes API に対し個別のインスタンスの範囲を超えて追加のアクセス許可を持つノードアプリケーションがあります。例としては kubelet
、kube-proxy
、CSI ストレージドライバー、ユーザー独自の Kubernetes アプリケーションなどがあります。
EKS Pod Identity は、OIDC ID プロバイダーを使用しないため、サービスアカウントの IAM ロール よりも簡単な方法です。EKS Pod Identity には次の機能強化があります。
-
独立オペレーション – 多くの組織では、OIDC ID プロバイダーの作成を Kubernetes クラスターの管理とは別のチームが担当しています。EKS Pod Identity には明確な役割分担があり、EKS Pod Identity の関連付けの設定はすべて Amazon EKS で行われ、IAM アクセス許可の設定はすべて IAM で行われます。
-
再利用性 – EKS Pod Identity は、サービスアカウントの IAM ロールが使用するクラスターごとの個別のプリンシパルの代わりに、単一の IAM プリンシパルを使用します。IAM 管理者は以下のプリンシパルを任意のロールの信頼ポリシーに追加して、EKS Pod Identity で使用できるようにします。
"Principal": { "Service": "pods.eks.amazonaws.com" }
-
スケーラビリティ – 一時的な認証情報の各セットは、各 Pod で実行する各 AWS SDK ではなく、EKS Pod Identity 内の EKS Auth サービスによって引き継がれます。次に、各ノードで実行される Amazon EKS Pod Identity エージェントが SDK に認証情報を発行します。そのため、負荷はノードごとに 1 回に減り、各ポッドで重複することはありません。詳細については、「EKS Pod Identity の仕組みを理解する」を参照してください。
この 2 つの選択肢を比較する詳細については、「Kubernetes ワークロードに Kubernetes サービスアカウントを使用して AWS へのアクセスを許可する」を参照してください。
EKS Pod Identity のセットアップの概要
以下の手順を実行して EKS Pod Identity を有効にします。
-
Amazon EKS Pod Identity エージェントのセットアップ — この手順は、クラスターごとに 1 回だけ実行します。クラスターで EKS 自動モードが有効になっている場合は、このステップを完了する必要はありません。
-
IAM ロールを Kubernetes サービスアカウントに割り当てる — この手順は、アプリケーションに付与する固有の権限セットごとに実行します。
-
サービスアカウントを使用して AWS サービスにアクセスするように Pod を設定する — この手順を AWS サービスへのアクセスが必要な Pod ごとに実行します。
-
AWS SDK で Pod Identity を使用する – ワークロードがサポートされているバージョンの AWS SDK を使用していること、およびワークロードがデフォルトの認証情報チェーンを使用していることを確認します。
制限
-
IAM ロールを Kubernetes サービスアカウントにマッピングするため、クラスターごとに最大 5,000 個の EKS Pod Identity の関連付けがサポートされています。
考慮事項
-
IAM ロールの関連付け: クラスター内の各 Kubernetes サービスアカウントは、クラスターと同じ AWS アカウントにある 1 つの IAM ロールに関連付けることができます。ロールを変更するには、EKS Pod Identity の関連付けを編集します。クロスアカウントアクセスの場合、IAM ロールを使用してロールへのアクセスを委任します。詳細については、「IAM ユーザーガイド」の「AWS アカウント間の IAM ロールを使用したアクセスの委任」を参照してください。
-
EKS Pod Identity エージェント: EKS Pod Identity を使用するには、Pod Identity エージェントが必要です。このエージェントはクラスターノード上で Kubernetes
DaemonSet
として実行され、同じノード上のポッドにのみ認証情報を提供します。ノードのhostNetwork
を使用し、リンクローカルアドレス (IPv4 の場合は169.254.170.23
、IPv6 の場合は[fd00:ec2::23]
) でポート80
および2703
を占有します。クラスターで IPv6 が無効になっている場合は、Pod Identity エージェントの IPv6 を無効にしてください。詳細については、「EKS Pod Identity エージェントで IPv6 を無効にする」を参照してください。 -
結果的な整合性: EKS Pod Identity の関連付けは結果整合性を持ち、API コール後に整合性が確保されるまで数秒の遅延が発生する可能性があります。重要な高可用性コードパスで関連付けを作成または更新することは避けてください。代わりに、そのようなアクションは別々の、より頻度の低い初期化ルーチンまたはセットアップルーチンで実行します。詳細については、「EKS ベストプラクティスガイド」の「ポッドあたりのセキュリティグループ」を参照してください。
-
プロキシとセキュリティグループの考慮事項: プロキシを使用するポッドの場合、
169.254.170.23
(IPv4) および[fd00:ec2::23]
(IPv6) をno_proxy/NO_PROXY
環境変数に追加し、EKS Pod Identity エージェントへのリクエストの失敗を防ぎます。AWS VPC CNI でポッドのセキュリティグループを使用する場合、ENABLE_POD_ENI
フラグを「true」に設定してPOD_SECURITY_GROUP_ENFORCING_MODE
フラグを「standard」に設定します。詳細については、「セキュリティグループを個別のポッドに割り当てる」を参照してください。
EKS Pod Identity クラスターバージョン
EKS Pod Identity を使用するには、クラスターのプラットフォームバージョンが次のテーブルに記載されているバージョン以上であるか、Kubernetes バージョンがテーブルに記載されているよりも新しいバージョンである必要があります。Kubernetes バージョンに対し推奨される Amazon EKS Pod Identity エージェントのバージョンを確認するには、「Amazon EKS アドオンバージョンのクラスターとの互換性を検証する」を参照してください。
Kubernetes バージョン | プラットフォームバージョン |
---|---|
Kubernetes バージョンの記載がない |
サポートされるプラットフォームのすべてのバージョン |
|
|
|
|
|
|
EKS Pod Identity の制限事項
EKS Pod Identity は以下で使用できます。
-
前のトピック EKS Pod Identity クラスターバージョン に記載されている Amazon EKS クラスターバージョン。
-
Linux Amazon EC2 インスタンスであるクラスターのワーカーノード。
EKS Pod Identity は以下では使用できません。
-
AWS Outposts。
-
Amazon EKS Anywhere
-
Amazon EC2 で作成して実行する Kubernetes クラスター。EKS Pod Identity コンポーネントは Amazon EKS でのみ使用できます。
EKS Pod Identity は以下では使用できません。
-
Linux Amazon EC2 インスタンス以外の場所で実行されるポッド。AWS Fargate (Fargate) 上で実行される Linux ポッドと Windows ポッドはサポートされていません。Windows Amazon EC2 インスタンスで実行されるポッドはサポートされていません。