このページの改善にご協力ください
本ユーザーガイドの改善にご協力いただけませんか? このページの下部までスクロールし、[GitHub でこのページの編集] を選択します。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。
IRSA を使用するように Amazon VPC CNI プラグインを設定する
Amazon VPC CNI plugin for Kubernetes
-
AWS Identity and Access Management (IAM) のアクセス許可が必要。クラスターで IPv4 ファミリーを使用する場合、アクセス許可は
AmazonEKS_CNI_Policy
AWS 管理ポリシーで指定されます。クラスターが IPv6 ファミリーを使用する場合には、作成した IAM ポリシーにアクセス許可を追加する必要があります。このポリシーは、Amazon EKS ノード IAM ロール または 個別の IAM ロールにアタッチすることができます。このトピックで詳細に説明するように、別のロールに割り当てることをお勧めします。 -
デプロイ時に作成すると、
aws-node
という名前の Kubernetes サービスアカウントを使用するように設定されます。このサービスアカウントはaws-node
という名前の Kubernetesclusterrole
にバインドされます。これには、必要な Kubernetes アクセス許可が割り当てられています。
注記
IMDS へのアクセスをブロックする場合を除き、Amazon VPC CNI plugin for Kubernetes 用の Pods には、Amazon EKS ノード IAM ロール に割り当てられたパーミッションへのアクセス権があります。詳細については、「ワーカーノードに割り当てられたインスタンスプロファイルへのアクセスを制限する
前提条件
-
既存の Amazon EKS クラスター。デプロイするには、「Amazon EKS の使用を開始する」を参照してください。
-
クラスター用の既存 AWS Identity and Access Management IAM OpenID Connect (OIDC) プロバイダー。既に存在しているかどうかを確認する、または作成するには「クラスターの IAM OIDC プロバイダーを作成する」を参照してください。
ステップ 1: Amazon VPC CNI plugin for Kubernetes IAM ロールを作成する
IAM ロールを作成するには
-
クラスターで使用する IP ファミリを決定します。
aws eks describe-cluster --name
my-cluster
| grep ipFamily出力例は次のとおりです。
"ipFamily": "ipv
4
"この出力では、代わりに
ipv6
が返されることがあります。 -
IAM ロールを作成します。IAM ロールを作成するには、
eksctl
またはkubectl
および AWS CLI を使用してます。 (オプション) Kubernetes サービスアカウントで使用されている AWS Security Token Service エンドポイントタイプを設定します。詳細については、「サービスアカウントの AWS Security Token Service エンドポイントを設定する」を参照してください。
ステップ 2: Amazon VPC CNI plugin for KubernetesPods 再デプロイする
-
認証情報環境変数を適用するために、サービスアカウントに関連付けられている既存の Pods を削除して再作成します。現在アノテーションなしで実行されている Pods には、アノテーションは適用されません。次のコマンドは、既存の
aws-node
DaemonSet Pods を削除し、サービスアカウントのアノテーションを使用してデプロイします。kubectl delete Pods -n kube-system -l k8s-app=aws-node
-
Pods がすべて再起動したことを確認します。
kubectl get pods -n kube-system -l k8s-app=aws-node
-
Pods の 1 つの詳細を表示し、環境変数の
AWS_WEB_IDENTITY_TOKEN_FILE
およびAWS_ROLE_ARN
が存在することを確認します。cpjw7
を、前のステップの出力で返された、いずれかの Pods の名前に置き換えます。kubectl describe pod -n kube-system aws-node-
cpjw7
| grep 'AWS_ROLE_ARN:\|AWS_WEB_IDENTITY_TOKEN_FILE:'出力例は次のとおりです。
AWS_ROLE_ARN: arn:aws:iam::
111122223333
:role/AmazonEKSVPCCNIRole
AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token AWS_ROLE_ARN: arn:aws:iam::111122223333
:role/AmazonEKSVPCCNIRole
AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/tokenPod には 2 つのコンテナが含まれているため、重複した結果の 2 つのセットが返されます。両方のコンテナの値は同じです。
Pod で AWS リージョン 内のエンドポイントを使用している場合、前の出力では下記の行も返されています。
AWS_STS_REGIONAL_ENDPOINTS=regional
ステップ 3: ノードの IAM ロールから CNI ポリシーを削除する
現在、Amazon EKS ノード IAM ロールに AmazonEKS_CNI_Policy
IAM (IPv4
) ポリシーまたはIPv6 ポリシー がアタッチされており、さらに、別の IAM ロールを作成し、このロールに対し前出のポリシーをアタッチし、そのロールを aws-node
Kubernetes サービスアカウントに割り当てている場合、クラスターの IP ファミリーに適合する AWS CLI コマンドを使用して、ノードのロールからポリシーを削除することをお勧めします。
をノードロールの名前に置き換えます。AmazonEKSNodeRole
-
IPv4
aws iam detach-role-policy --role-name
AmazonEKSNodeRole
--policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy -
IPv6
をアカウント名に置き換え、111122223333
をAmazonEKS_CNI_IPv6_Policy
IPv6
ポリシー名に置き換えます。aws iam detach-role-policy --role-name
AmazonEKSNodeRole
--policy-arn arn:aws:iam::111122223333
:policy/AmazonEKS_CNI_IPv6_Policy
IPv6
ファミリーを使用するクラスター用に IAM ポリシーを作成します。
IPv6
ファミリーを使用するクラスターを作成し、そのクラスターでバージョン 1.10.1
以降の Amazon VPC CNI plugin for Kubernetes アドオンが設定されている場合は、IAM ロールに割り当てることができる IAM ポリシーを作成する必要があります。作成時に IPv6
ファミリーの使用を設定していない、既存のクラスターにおいて、IPv6
を使用する場合には、新しいクラスターを作成する必要があります。クラスターでの IPv6
使用の詳細については、「クラスター、pods、サービスに IPv6 アドレスを割り当てる」を参照してください。
-
次のテキストをコピーし、
という名前のファイルに保存します。vpc-cni-ipv6-policy
.json{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssignIpv6Addresses", "ec2:DescribeInstances", "ec2:DescribeTags", "ec2:DescribeNetworkInterfaces", "ec2:DescribeInstanceTypes" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": [ "arn:aws:ec2:*:*:network-interface/*" ] } ] }
IAM ポリシーを作成する
aws iam create-policy --policy-name
AmazonEKS_CNI_IPv6_Policy
--policy-document file://vpc-cni-ipv6-policy.json