LoginSignup
0
1

Amazon EKS on IAM ロールを Kubenetes サービスアカウントに容易に紐付ける(Amazon EKS Pod Identity エージェントアドオン)

Last updated at Posted at 2023-12-11

概要

以前、IAM ロールを Kubenetes サービスアカウントに紐付ける方法について紹介しました。

先日のこの紐付けについて容易になったということについてアップデートがありましたので紹介します。

  • IAM ロールを Kubenetes サービスアカウントに紐付けることがより容易になった。
  • EKS クラスターに EKS Pod identity Agent add-on をインストールすることで設定可能。
  • ロールセッションタグをサポート

※ 2023/12/11 現在 Fargate に未対応

その他参考

やってみる

ステップ 1

アプリケーションに必要な許可を持つ IAM ロールを作成し、その信頼ポリシーでサービスプリンシパルとして pods.eks.amazonaws.com を指定する

eks-pod-identity-policy.json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::XXX"
        }
    ]
}
eks-pod-identity-role.json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "pods.eks.amazonaws.com"
            },
            "Action": [
                "sts:AssumeRole",
                "sts:TagSession"
            ]
        }
    ]
}

ステップ 2

EKS コンソールまたは AWS CLI を使用して EKS Pod identity エージェントアドオンをインストールする

aws eks create-addon \
--cluster-name cluster-test \
--addon-name eks-pod-identity-agent \
--addon-version v1.0.0-eksbuild.1

EKS Pod identity エージェントアドオンがインストールされたことを確認する

kubectl get pods -n kube-system | grep 'eks-pod-identity-agent'
eks-pod-identity-agent-mn9z8   1/1     Running   0          57s

ステップ 3

EKS コンソール、API、または CLI でロールをサービスアカウントに直接マッピングする

サービスアカウントを作成

service-account-test.yaml
apiVersion: v1
kind: ServiceAccount

metadata:
  name: service-account-test
  namespace: default
kubectl apply -f service-account-test.yaml

サービスアカウントが作成されたことを確認

kubectl get sa 
NAME                 SECRETS   AGE
service-account-test   0         13s

ロールをサービスアカウントに紐付け

aws eks create-pod-identity-association \
  --cluster-name cluster-test \
  --namespace default \
  --role-arn arn:aws:iam::123456789012:role/eks-pod-Identity-role \
  --service-account service-account-test

サービスアカウントを使用するよう設定する

deployment-test.yaml
apiVersion: apps/v1
kind: Deployment

metadata:
  name: app-test

spec:
  selector:
    matchLabels:
      app: app-test
  template:
    metadata:
      labels:
        app: app-test
    spec:
      serviceAccountName: service-account-test
      containers:
      - name: app-test
        image: public.ecr.aws/nginx/nginx:mainline-alpine
kubectl apply -f deployment-test.yaml

Pod にサービス アカウント トークン ファイル マウントがあることを確認

kubectl describe pod app-test-749c55fbb4-pwzc4 | grep 
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE:
      AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE:  /var/run/secrets/pods.eks.amazonaws.com/serviceaccount/eks-pod-identity-token
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1