IRSA (IAM Roles for Service Account)
Update : 2022-04-19
IRSA (IAM Roles for Service Account)
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는 이미 생성되었습니다.)
eksctl utils associate-iam-oidc-provider --cluster ${ekscluster_name} --approve
IRSA 생성
2.IRSA 생성
포드에 부여할 권한을 지정하는 IAM 정책을 생성합니다.
모든 S3 버킷에 대한 get, list 을 허용하는 "AmazonS3ReadOnlyAccess"라는 AWS 관리형 정책을 사용합니다.
"AmazonS3ReadOnlyAccess" 정책에 대한 ARN을 확인합니다.
아래와 같은 결과가 출력될 것입니다.
S3에 대한 읽기 전용 액세스 권한이 있는 서비스 계정에 바인딩된 IAM 역할을 생성합니다.
3.Service Account에 대한 IAM Role 연결
이전 단계에서 클러스터의 iam-test 라는 서비스 계정과 연결된 IAM 역할을 생성했습니다.
먼저 서비스 계정 iam-test가 생성되었는지 확인합니다.
Service Account에 IAM 역할의 ARN Annotation이 추가되었는지 확인합니다.
아래와 같이 출력될 것입니다.
4.IRSA 테스트
새로 생성된 IAM 역할로 두 개의 kubernetes 작업을 실행합니다.
job-s3.yaml:
aws s3 ls명령의 결과를 출력합니다. (이 작업은 정상적으로 출력되어야 합니다.)job-ec2.yaml:
aws ec2 describe-instances --region ${AWS_REGION}명령의 결과를 출력합니다(이 작업은 실패해야 합니다.)
Service Account가 S3 버킷을 조회할 수 있는지 테스트하기 위해, 아래와 같이 yaml을 생성하고 배포합니다.
app=esk-iam-test-s3 어플리케이션 로그를 확인합니다.
S3에 대한 조회를 한 로그를 확인합니다.
Service-Account가 EC2 인스턴스를 조회할 수 없는지 확인해 봅니다. 먼저 아래와 같이 Pod를 생성합니다.
app=esk-iam-test-ec2 어플리케이션 로그를 확인합니다.
EC2에 대한 조회를 한 로그를 확인합니다.
아래 명령을 통해 yaml을 확인해 봅니다.
Last updated
Was this helpful?