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