このページの改善にご協力ください
本ユーザーガイドの改善にご協力いただけませんか? このページの下部までスクロールし、[GitHub でこのページの編集] を選択します。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。
EKS Pod Identity がポッドに AWS サービスへのアクセス権を付与する方法を学ぶ
Pod のコンテナ内のアプリケーションは AWS SDK または AWS CLI で、AWS のサービス (IAM) アクセス許可を使用した AWS Identity and Access Management への API リクエストを行うことができます。アプリケーションは AWS 認証情報で AWS API リクエストに署名する必要があります。
EKS Pod Identity は、Amazon EC2 インスタンスプロファイルから Amazon EC2 インスタンスに認証情報を提供する場合と同じような方法で、アプリケーションの認証情報を管理する機能があります。AWS 認証情報を作成してコンテナに配布したり、Amazon EC2 インスタンスのロールを使用したりする必要はありません。IAM ロールを Kubernetes サービスアカウントと関連付けて、サービスアカウントを使用するように Pods を設定できます。
各 EKS Pod Identity の関連付けは、指定されたクラスター内のネームスペース内のサービスアカウントにロールをマップします。複数のクラスターに同じアプリケーションがある場合、ロールの信頼ポリシーを変更することなく、各クラスターで同一の関連付けを行うことができます。
ポッドが関連付けられたサービスアカウントを使用する場合、Amazon EKS はポッドのコンテナに環境変数を設定します。環境変数は、AWS CLI を含む AWS SDK が EKS Pod Identity の認証情報を使用するように設定します。
EKS Pod Identity の利点
EKS Pod Identity には次の利点があります。
-
最小特権 – IAM アクセス許可の範囲をサービスアカウントに設定すると、そのサービスアカウントを使用する Pods のみにそのアクセス許可を付与できます。また、この機能により、
kiam
やkube2iam
などのサードパーティーのソリューションが不要になります。 -
認証情報の分離 – Pod's のコンテナは、そのコンテナが使用するサービスアカウントに関連付けられた IAM ロールの認証情報のみを取得できます。コンテナは、他の Pods のコンテナで使われている認証情報にアクセスすることはできません。Pod Identity を使用する場合、Pod's コンテナには Amazon EKS ノード IAM ロール に割り当てられたアクセス許可も付与されます (Amazon EC2 インスタンスメタデータサービス (IMDS) への Pod のアクセスをブロックしていない場合)。詳細については、「ワーカーノードに割り当てられたインスタンスプロファイルへのアクセスを制限する
」を参照してください。 -
監査性 – 遡及的な監査を確実に行うため、AWS CloudTrail を介してアクセスとイベントのロギングを利用できます。
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" }
-
スケーラビリティ – 一時的な認証情報の各セットは、各ポッドで実行する各 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 回だけ実行します。
-
IAM ロールを Kubernetes サービスアカウントに割り当てる — この手順は、アプリケーションに付与する固有の権限セットごとに実行します。
-
サービスアカウントを使用して AWS サービスにアクセスするように pods を設定する — この手順は、AWS のサービス へのアクセスが必要な Pod ごとに実行します。
-
AWS SDK で Pod Identity を使用する – ワークロードがサポートされているバージョンの AWS SDK を使用していること、およびワークロードがデフォルトの認証情報チェーンを使用していることを確認します。
EKS Pod Identity に関する考慮事項
-
各クラスター内の各 Kubernetes サービスアカウントには 1 つの IAM ロールを関連付けることができます。EKS Pod Identity の関連付けを編集することで、サービスアカウントにマップされるロールを変更できます。
-
関連付けることができるのはクラスターと同じ AWS アカウント にあるロールだけです。別のアカウントから、EKS Pod Identity が使用するように設定したこのアカウントのロールに、アクセスを委任できます。アクセス権の委任および
AssumeRole
については、「IAM ユーザーガイド」の「AWS アカウント間の IAM ロールを使用したアクセスの委任」を参照してください。 -
EKS Pod Identity エージェントが必要です。ノード上で Kubernetes
DaemonSet
として実行され、実行されているノード上のポッドにのみ認証情報を提供します。EKS Pod Identity エージェントの互換性の詳細については、以下のセクション EKS Pod Identity の制限事項 を参照してください。 -
EKS Pod Identity エージェント はノードの
hostNetwork
を使用し、ノード上のリンクローカルアドレス上のポート80
とポート2703
を使用します。このアドレスは169.254.170.23
対 IPv4、[fd00:ec2::23]
対 IPv6 のクラスターです。IPv6
アドレスを無効にするか、または localhostIPv6
IP アドレスを禁止すると、エージェントは起動できません。IPv6
を使用できないノードでエージェントを起動するには、「EKS Pod Identity エージェントで IPv6 を無効にする」の手順に従ってIPv6
設定を無効にします。
EKS Pod Identity クラスターバージョン
EKS Pod Identity を使用するには、クラスターのプラットフォームバージョンが、次の表に記載されているバージョンと同じかそれ以降、または表に記載されている Kubernetes バージョンよりも新しいバージョンである必要があります。
Kubernetes バージョン | プラットフォームバージョン |
---|---|
1.30 |
eks.2 |
1.29 |
eks.1 |
1.28 |
eks.4 |
1.27 |
eks.8 |
1.26 |
eks.9 |
1.25 |
eks.10 |
1.24 |
eks.13 |
EKS Pod Identity と互換性のあるアドオンのバージョン
重要
EKS Pod Identity を EKS アドオンとともに使用するには、EKS Pod Identity の関連付けを手動で作成する必要があります。AWS Management Console のアドオン設定で IAM ロールを選択しないでください。そのロールは IRSA でのみ使用されます。
IAM 認証情報を必要とする Amazon EKS アドオンとセルフマネージド型アドオンは、EKS Pod Identity、IRSA、またはインスタンスロールを使用できます。EKS Pod Identity をサポートする IAM 認証情報を使用するアドオンのリストは次のとおりです。
-
Amazon VPC CNI plugin for Kubernetes
1.15.5-eksbuild.1
以降 -
AWS Load Balancer Controller
2.7.0
以降。AWS Load Balancer Controller は EKS アドオンとしては使用できませんが、セルフマネージド型アドオンとして利用できることに注意してください。
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 インスタンスで実行されるポッドはサポートされていません。
-
IAM 認証情報を必要とする Amazon EKS アドオン。EKS アドオンは、代わりにサービスアカウントの IAM ロールのみを使用できます。IAM 認証情報を使用する EKS アドオンのリストには以下が含まれます。
-
CSI ストレージドライバー: EBS CSI、EFS CSI、Amazon FSx for Lustre CSI ドライバー、Amazon FSx for NetApp ONTAP CSI ドライバー、Amazon FSx for OpenZFS CSI ドライバー、Amazon File Cache CSI ドライバー、Kubernetes Secrets Store CSI ドライバー用の AWS Secrets and Configuration Provider (ASCP)。
注記
これらのコントローラー、ドライバー、プラグインが EKS アドオンではなく自己管理型アドオンとしてインストールされている場合、最新の AWS SDK を使用するように更新されている限り、EKS Pod Identity がサポートされます。
-