IAM ロールをサービスアカウントに関連付ける - Amazon EKS

IAM ロールをサービスアカウントに関連付ける

Kubernetes では、ユーザーがサービスアカウントに次のアノテーションを追加することで、クラスター内のサービスアカウントに関連付ける IAM ロールを定義します。

apiVersion: v1 kind: ServiceAccount metadata: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/iam-role-name
注記

eksctl を使用してサービスアカウントで使用する IAM ロールを作成した場合、eksctl はロールの作成時に指定したサービスアカウントに注釈を付けます。

前提条件

サービスアカウントに IAM ロールをアノテーションするには

  1. 次のコマンドを使用して、サービスアカウントで使用する IAM ロールの ARN でサービスアカウントに注釈を付けます。service-account-namespace はサービスアカウントの Kubernetes 名前空間、service-account-name は既存の Kubernetes サービスアカウントの名前に置き換えてください。111122223333 を AWS アカウント ID に置き換え、iam-role-name を既存の AWS Identity and Access Management (IAM) ロールに置き換えます。

    kubectl annotate serviceaccount -n service-account-namespace service-account-name \ eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/iam-role-name
    注記

    サービスアカウントを持っていない場合は、新たに作成する必要があります。詳細については、「Kubernetes ドキュメント」の「ポッド用にサービスアカウントを設定する」を参照してください。サービスアカウントが Kubernetes のアクセス許可を使用できるようにするには、Role または ClusterRole を作成し、このロールをサービスアカウントにバインドします。詳細については、「Kubernetes ドキュメント」の「RBAC 認証の使用」を参照してください。Amazon VPC CNI plugin for Kubernetes がデプロイされる際に、例えば、デプロイマニフェストによって、サービスアカウント、クラスターロール、およびクラスターロールバインドなどが作成されます。GitHub の マニフェスト を表示して、例として使用することができます。

  2. 認証情報環境変数を適用するために、サービスアカウントに関連付けられている既存の pods を削除して再作成します。変更するウェブフックは、すでに実行されている pods には適用されません。例えば、前のステップで Amazon VPC CNI DaemonSet に使用したサービスアカウントにアノテーションを追加した場合、次のコマンドは既存の aws-node DaemonSet pods ポッドを削除して、サービスアカウントのアノテーションを使用してそれらのポッドをデプロイします。podskube-system、および -l k8s-app=aws-node は、注釈を設定した pods の情報に置き換えることができます。

    kubectl delete pods -n kube-system -l k8s-app=aws-node
  3. pods がすべて再起動したことを確認します。

    kubectl get pods -n kube-system -l k8s-app=aws-node
  4. いずれかの pods の環境変数を表示し、AWS_WEB_IDENTITY_TOKEN_FILE および AWS_ROLE_ARN 環境変数が存在することを確認します。次のコマンド例では、Amazon VPC CNI DaemonSet によって作成された pods の 1 つに対する変数を返します。aws-node-5v6ws という名前の pod が、前のステップで使用した例の出力に返されました。

    kubectl exec -n kube-system aws-node-5v6ws -- env | grep AWS

    出力例を次に示します。

    ... AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token ... AWS_ROLE_ARN=arn:aws:iam::111122223333:role/iam-role-name ...
  5. (オプション) クラスターのバージョンによっては、pods が AWS Security Token Service リージョンまたはグローバルエンドポイントを使用している場合があります。AWS では、レイテンシーの低減、冗長性の構築、セッショントークンの有効性の強化のために、グローバルエンドポイントではなくリージョンエンドポイントを使用することを推奨しています。pods が使用しているエンドポイントタイプを特定する方法、またはエンドポイントタイプを変更する方法については、「サービスアカウントの AWS Security Token Service エンドポイントを設定する」を参照してください。