Pod IAMの理解
問題を探るまず最初の場所は、cartsサービスのログです:
~$LATEST_POD=$(kubectl get pods -n carts --sort-by=.metadata.creationTimestamp -o jsonpath='{.items[-1:].metadata.name}')
~$kubectl logs -n carts -p $LATEST_POD
[...]
***************************
ã¢ããªã±ã¼ã·ã§ã³ã®èµ·åã«å¤±æãã¾ãã
***************************
説æï¼
Amazon DynamoDBã«ã¢ã¯ã»ã¹ããéã«ã¨ã©ã¼ãçºçãã¾ããï¼
User: arn:aws:sts::1234567890:assumed-role/eksctl-eks-workshop-nodegroup-defa-NodeInstanceRole-rjjGEigUX8KZ/i-01f378b057326852a is not authorized to perform: dynamodb:Query on resource: arn:aws:dynamodb:us-west-2:1234567890:table/eks-workshop-carts/index/idx_global_customerId because no identity-based policy allows the dynamodb:Query action (Service: DynamoDb, Status Code: 400, Request ID: PUIFHHTQ7SNQVERCRJ6VHT8MBBVV4KQNSO5AEMVJF66Q9ASUAAJG)
ã¢ã¯ã·ã§ã³ï¼
DynamoDBãã¼ãã«ã使ããã¦ãããã¨ãããã³IAMèªè¨¼æ å ±ãé©åãªã¢ã¯ã»ã¹æ¨©ã§è¨å®ããã¦ãããã¨ã確èªãã¦ãã ããã
アプリケーションはエラーを生成しており、DynamoDBにアクセスするためにPodが使用しているIAMロールに必要な権限がないことを示しています。これは、Podに関連付けられたIAMロールやポリシーがない場合、デフォルトでそのPodが実行されているEC2インスタンスに割り当てられているインスタンスプロファイルにリンクされたIAMロールを使用するためです。この場合、このロールにはDynamoDBへのアクセスを許可するIAMポリシーがありません。
解決策の一つとして、EC2インスタンスプロファイルのIAM権限を拡張することが考えられますが、これによりそのインスタンス上で実行されるすべてのPodがDynamoDBテーブルにアクセスできるようになります。これは最小権限の原則に違反し、セキュリティのベストプラクティスではありません。代わりに、EKS Pod Identityを使用して、cartsアプリケーションに必要な特定の権限をPodレベルで提供し、きめ細かいアクセス制御を確保します。