본문으로 건너뛰기

DynamoDB 액세스 확인

이제 carts Service Account에 인가된 IAM role이 어노테이션으로 추가되었으므로, carts Pod는 DynamoDB 테이블에 액세스할 권한을 갖게 되었습니다. 웹 스토어에 다시 액세스하여 장바구니로 이동해 보겠습니다.

~$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과 같은 것을 사용하거나 Deployment에 직접 구성되어 전달된 것이 아닙니다. 대신 AWS SDK가 AWS STS 서비스로부터 임시 자격 증명을 획득할 수 있도록 IRSA에 의해 자동으로 설정된 것입니다.

주목할 만한 사항은 다음과 같습니다:

  • 리전은 EKS 클러스터와 동일하게 자동으로 설정됩니다
  • STS regional endpoint가 us-east-1의 글로벌 엔드포인트에 과도한 부하를 주지 않도록 구성되었습니다
  • role ARN이 앞서 Kubernetes ServiceAccount에 어노테이션을 추가할 때 사용한 역할과 일치합니다

마지막으로, AWS_WEB_IDENTITY_TOKEN_FILE 변수는 AWS SDK에 웹 아이덴티티 페더레이션을 사용하여 자격 증명을 획득하는 방법을 알려줍니다. 이는 IRSA가 AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY 쌍과 같은 것을 통해 자격 증명을 주입할 필요가 없으며, 대신 SDK가 OIDC 메커니즘을 통해 임시 자격 증명을 제공받을 수 있음을 의미합니다. 이 기능이 어떻게 작동하는지에 대한 자세한 내용은 AWS 문서에서 확인할 수 있습니다.