EKS Pod Identity AddOns

最近、EKSの新機能としてPod Identitiesというアドオンが導入されました。基本的に、Podが他のAWSサービスと通信する場合、IAM Roles for service account(IRSA)を介して行われ、IAMロールがサービスアカウントとして設定され、Podにアタッチされ、EKSとIAMの間で切り替わりが行われます。Pod Identityアドオンを使えば、Podによりきめ細やかな権限を与えることができます。

アドオンをインストールして、クラスターに追加されたかどうかを確認できます。

aws eks --region ap-south-1 list-addons --cluster-name demo

{
    "addons": [
        "coredns",
        "eks-pod-identity-agent",
        "kube-proxy",
        "vpc-cni"
    ]
}

クラスターでデーモンセットとしてアドオンが実行されていることも確認できます。

kubectl get daemonset -A

NAMESPACE     NAME                     DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
kube-system   aws-node                 2         2         2       2            2           <none>          51m
kube-system   eks-pod-identity-agent   2         2         2       2            2           <none>          48m
kube-system   kube-proxy               2         2         2       2            2           <none>          51m

それでは、実際にどのように機能するかを分析してみましょう。Pod Identityを使用して、PodからS3バケットにアクセスする手順を試してみます。

ステップ1. テスト用のS3バケット test-884 を作成します。
ステップ2. IAMロール pod-identity-s3-demo を作成し、信頼されたエンティティにEKSとEKS pod identityを選択します。
画像説明
ステップ3. 次に進むと、ロールに信頼ポリシーが追加されているのが見えます。
画像説明
ステップ4. 次に進み、ロールを作成します。
ステップ5. ロールを作成した後、以下のようにバケット名を指定したインラインポリシーを追加できます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "s3:GetObject",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::test-884/*",
      "Sid": "PodIdentity"
    }
  ]
}

画像説明

ステップ6. 今度はEKSポッドにIAMロールを関連付けるために、Pod Identityの関連付けを使用して、eksクラスタへのアクセスタブに移動し、以下をクリックします。

画像説明

ステップ7. 以下のように既存のnamespaceとservice accountを指定します。

画像説明

ステップ7: 最後に、service accountを使用してpodを作成します。するとそのpodはS3バケットへの一時的なアクセス権が付与されます。

こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/sampathkaran/eks-pod-identity-addons-26k0