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

DynamoDBアクセスの検証

これで、carts ServiceAccountが認可された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サービスに到達でき、ショッピングカートが利用可能になりました!

カート

AWS IAMロールがServiceAccountに関連付けられた後、そのServiceAccountを使用して新しく作成されたPodは、EKS Pod Identityウェブフックによって傍受されます。このウェブフックはAmazon EKSクラスターのコントロールプレーン上で実行され、AWSによって完全に管理されています。新しい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_CONTAINER_CREDENTIALS_FULL_URI=http://169.254.170.23/v1/credentials
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE=/var/run/secrets/pods.eks.amazonaws.com/serviceaccount/eks-pod-identity-token

これらの環境変数に関する注目すべき点:

  • AWS_DEFAULT_REGION - リージョンは自動的にEKSクラスターと同じリージョンに設定されます
  • AWS_STS_REGIONAL_ENDPOINTS - リージョナルSTSエンドポイントが設定され、us-east-1のグローバルエンドポイントに過度の負荷をかけないようにしています
  • AWS_CONTAINER_CREDENTIALS_FULL_URI - この変数は、AWS SDKにHTTPクレデンシャルプロバイダーを使用してクレデンシャルを取得する方法を伝えます。これにより、EKS Pod IdentityはAWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEYのようなペアを介してクレデンシャルを注入する必要がなく、代わりにSDKはEKS Pod Identityメカニズムを介して一時的なクレデンシャルを取得できます。この仕組みの詳細については、AWS公式ドキュメントで詳しく説明されています。

これでアプリケーションでPod Identityを正常に設定できました。