Kubernetes 버전 1.12에서는 OIDC JSON 웹 토큰인 새로운 ProjectedServiceAccountToken 기능에 대한 지원이 추가되었습니다. Amazon EKS는 이제 ProjectedServiceAccountToken JSON Web Token에 대한 OIDC 엔드포인트를 호스팅하므로 IAM과 같은 외부 시스템이 Kubernetes에서 발급한 OIDC 토큰을 확인하고 수락할 수 있습니다. 이러한 IRSA는 OpenID Connector(OIDC) Identity Provider와 STS를 활용하여 쿠버네티스의 Service Account에 IAM Role을 연계하도록 합니다.
OIDC URL은 EKS 클러스터를 생성하면 자동으로 생성되고, 쿠버네티스 관리자는 이 OIDC를 통해 Identity Provider와 Pod에서 필요한 IAM Role을 만들어주고 Service Account에 announce를 해주면 컨트롤 플레인에서 이를 참조하여 OIDC 인증을 거친 뒤에 JWT를 발급하여 이를 통해 파드의 env에 AWS_ROLE_ARN, AWS_WEB_IDENTITY_TOKEN_FILE 설정을 하여 파드가 임시 IAM 권한을 획득할 수 있게 해줍니다.
OIDC Federation Access를 기반으로 STS(Secure Token Service)를 사용해서 IAM 역할을 수임할 수 있으며, OIDC 공급자를 통한 인증을 활성화하고 JWT(JSON 웹 토큰)를 수신하여 IAM Role을 수행할 있습니다.
새 자격 증명 공급자 "sts:AssumeRoleWithWebIdentity"
사전 준비
1.OIDC 확인.
EKS 클러스터에는 연결되어 있는 OpenID Connect 발급자 URL이 있으며 이는 IAM OIDC 공급자를 구성할 때 사용됩니다. 아래 명령으로 OIDC Provider URL을 확인합니다.
aws eks describe-cluster --name ${ekscluster_name} --query cluster.identity.oidc.issuer --output text
OIDC 가 생성되어 있지 않다면, 아래와 같이 생성합니다. (Ingress Controller 를 생성하는 단계를 수행하였다면, OIDC는 이미 생성되었습니다.)
$ kubectl logs -l app=eks-iam-test-ec2
Error from server (BadRequest): container "eks-iam-test" in pod "eks-iam-test-ec2-bnbsn" is waiting to start: ContainerCreating
아래 명령을 통해 yaml을 확인해 봅니다.
kubectl get pod eks-iam-test-s3-xxxx debug -o yaml
kubectl get pod eks-iam-test-ec2-xxxx debug -o yaml