メインコンテンツまでスキップ

DynamoDBのアクセス検証

今、carts サービスアカウントが承認されたIAMロールで注釈付けされたので、carts Podは DynamoDBテーブルにアクセスする権限を持っています。Web ストアに再度アクセスして、ショッピングカートに移動してみましょう。

~$LB_HOSTNAME=$(kubectl -n ui get service ui-nlb -o jsonpath='{.status.loadBalancer.ingress[*].hostname}{"\n"}')
~$echo "http://$LB_HOSTNAME"
http://k8s-ui-uinlb-647e781087-6717c5049aa96bd9.elb.us-west-2.amazonaws.com

carts PodはDynamoDBサービスにアクセスできるようになり、ショッピングカートが利用可能になりました!

http://k8s-ui-uinlb-647e781087-6717c5049aa96bd9.elb.us-west-2.amazonaws.com/cart

新しいcarts Podをより詳しく見て、何が起きているかを確認しましょう。

~$kubectl -n carts exec deployment/carts -- env | grep AWS
AWS_STS_REGIONAL_ENDPOINTS=regional
AWS_DEFAULT_REGION=us-west-2
AWS_REGION=us-west-2
AWS_ROLE_ARN=arn:aws:iam::1234567890:role/eks-workshop-carts-dynamo
AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token

これらの環境変数はConfigMapのようなものや、デプロイメントに直接設定されたものではありません。代わりに、これらはIRSAによって自動的に設定され、AWSのSDKがAWS STSサービスから一時的な認証情報を取得できるようになっています。

注目すべき点は以下の通りです:

  • リージョンはEKSクラスターと同じものに自動的に設定されています
  • STSリージョナルエンドポイントが設定され、us-east-1のグローバルエンドポイントに過度の負荷をかけることを避けています
  • ロールARNは、以前にKubernetesのServiceAccountに注釈として使用したロールと一致しています

最後に、AWS_WEB_IDENTITY_TOKEN_FILE変数は、WebID連携を使用して認証情報を取得する方法をAWS SDKに伝えています。これにより、IRSAはAWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEYペアのような認証情報を注入する必要がなく、代わりにSDKはOIDCメカニズムを通じて一時的な認証情報を提供されます。この仕組みについての詳細は、AWSドキュメントで確認できます。