이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.
EKS Pod Identity 대상 IAM 역할을 사용하여 AWS 리소스에 액세스
Amazon Elastic Kubernetes Service(Amazon EKS)에서 애플리케이션을 실행할 때 동일하거나 다른 AWS 계정에 있는 AWS 리소스에 액세스해야 할 수 있습니다. 이 설명서에서는 Kubernetes 포드가 다른 AWS 리소스에 액세스할 수 있도록 EKS Pod Identity를 사용하여 이러한 계정 간에 액세스를 설정하는 방법을 보여줍니다.
사전 조건
시작하기 전에 다음 단계를 완료합니다.
작동 방식
Pod Identity를 사용하면 역할 체이닝이라는 프로세스를 통해 EKS 클러스터의 애플리케이션이 계정 전체에서 AWS 리소스에 액세스할 수 있습니다. Pod Identity 연결을 생성할 때 두 가지 IAM 역할, 즉 EKS 클러스터와 동일한 계정의 EKS Pod Identity 역할과 AWS 리소스(예: S3 버킷 또는 DynamoDB 테이블)가 포함된 계정의 대상 IAM 역할을 제공할 수 있습니다. EKS Pod Identity 역할은 IAM PassRole 요구 사항으로 인해 EKS 클러스터의 계정에 있어야 하는 반면, 대상 IAM 역할은 모든 AWS 계정에 있을 수 있습니다. PassRole을 사용하면 AWS 엔터티가 역할 수임을 다른 서비스에 위임할 수 있습니다. EKS Pod Identity는 PassRole을 사용하여 역할을 Kubernetes 서비스 계정에 연결하므로 역할을 전달하는 ID와 역할이 모두 EKS 클러스터와 동일한 AWS 계정에 있어야 합니다. 애플리케이션 포드가 AWS 리소스에 액세스해야 하는 경우 Pod Identity에서 자격 증명을 요청합니다. 그런 다음 Pod Identity는 두 가지 역할 가정을 순서대로 자동으로 수행합니다. 먼저 EKS Pod Identity 역할을 수임한 다음 해당 자격 증명을 사용하여 대상 IAM 역할을 수임합니다. 이 프로세스는 포드에 대상 역할에 정의된 권한이 있는 임시 자격 증명을 제공하여 다른 AWS 계정의 리소스에 대한 보안 액세스를 허용합니다.
캐싱 고려 사항
캐싱 메커니즘으로 인해 기존 Pod Identity 연결의 IAM 역할에 대한 업데이트는 EKS 클러스터에서 실행되는 포드에 즉시 적용되지 않을 수 있습니다. Pod Identity Agent는 자격 증명을 가져올 때 연결의 구성을 기반으로 IAM 자격 증명을 캐싱합니다. 연결에 EKS Pod Identity 역할 ARN만 포함되어 있고 대상 IAM 역할이 없는 경우 캐시된 자격 증명은 6시간 동안 지속됩니다. 연결에 EKS Pod Identity 역할 ARN과 대상 IAM 역할이 모두 포함된 경우 캐시된 자격 증명은 59분 동안 지속됩니다. EKS Pod Identity 역할 ARN 업데이트 또는 대상 IAM 역할 추가와 같은 기존 연결을 수정해도 기존 캐시는 재설정되지 않습니다. 따라서 에이전트는 캐시된 자격 증명이 새로 고쳐질 때까지 업데이트를 인식하지 못합니다. 변경 사항을 더 빨리 적용하려면 기존 포드를 다시 생성할 수 있습니다. 그렇지 않으면 캐시가 만료될 때까지 기다려야 합니다.
1단계: 대상 IAM 역할 생성 및 연결
이 단계에서는 대상 IAM 역할을 생성하고 구성하여 보안 신뢰 체인을 설정합니다. 데모를 위해 두 AWS 계정 간에 신뢰 체인을 구축하기 위해 새로운 대상 IAM 역할을 생성합니다. EKS 클러스터의 AWS 계정에 있는 EKS Pod Identity 역할(예: eks-pod-identity-primary-role
)은 대상 계정에서 대상 IAM 역할(예: eks-pod-identity-aws-resources
)을 수행할 수 있는 권한을 얻어 Amazon S3 버킷과 같은 AWS 리소스에 액세스할 수 있습니다.
대상 IAM 역할 생성
-
Amazon IAM 콘솔
을 엽니다. -
상단 탐색 모음에서 대상 IAM 역할에 대한 AWS 리소스(예: S3 버킷 또는 DynamoDB 테이블)가 포함된 계정에 로그인했는지 확인합니다.
-
왼쪽 탐색 창에서 역할을 선택합니다.
-
역할 생성 버튼을 선택하고 ‘신뢰할 수 있는 엔터티 유형’ 아래에서 AWS 계정을 선택합니다.
-
다른 AWS 계정을 선택하고 AWS 계정 번호(EKS Pod Identity 역할이 있는 계정)를 입력한 후 다음을 선택합니다.
-
역할에 연결하려는 권한 정책(예: AmazonS3FullAccess)을 추가하고 다음을 선택합니다.
-
MyCustomIAMTargetRole
등의 역할 이름을 입력하고 역할 생성을 선택합니다.
대상 IAM 역할 신뢰 정책 업데이트
-
역할을 생성한 후 역할 목록으로 돌아갑니다. 이전 단계에서 생성한 새 역할(
MyCustomIAMTargetRole
)을 찾아 선택합니다. -
신뢰 관계 탭을 선택합니다.
-
오른쪽에서 신뢰 정책 편집을 클릭합니다.
-
정책 편집기에서 기본 JSON을 신뢰 정책으로 바꿉니다. IAM 역할 ARN의 역할 이름 및
111122223333
에 대한 자리 표시자 값을 EKS 클러스터를 호스팅하는 AWS 계정 ID로 바꿉니다. 예시:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/eks-pod-identity-primary-role" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/eks-pod-identity-primary-role" }, "Action": "sts:TagSession" } ] }
EKS Pod Identity 역할에 대한 권한 정책 업데이트
이 단계에서는 대상 IAM 역할 ARN을 리소스로 추가하여 Amazon EKS 클러스터와 연결된 EKS Pod Identity 역할의 권한 정책을 업데이트합니다.
-
Amazon EKS 콘솔
을 엽니다. -
왼쪽 탐색 창에서 클러스터를 선택하고 EKS 클러스터의 이름을 선택합니다.
-
액세스 탭을 선택합니다.
-
Pod Identity 연결에서 EKS Pod Identity 역할을 선택합니다.
-
권한, 권한 추가, 인라인 정책 생성을 차례로 선택합니다.
-
오른쪽에서 JSON을 선택합니다.
-
정책 편집기에서 기본 JSON을 권한 정책으로 바꿉니다. IAM 역할 ARN의 역할 이름 및
222233334444
에 대한 자리 표시자 값을 대상 IAM 역할로 바꿉니다. 예시:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole", "sts:TagSession" ], "Resource": "arn:aws:iam::222233334444:role/eks-pod-identity-aws-resources" } ] }
2단계: Kubernetes 서비스 계정에 대상 IAM 역할 연결
이 단계에서는 대상 IAM 역할과 EKS 클러스터의 Kubernetes 서비스 계정 간에 연결을 생성합니다.
-
Amazon EKS 콘솔
을 엽니다. -
왼쪽 탐색 창에서 클러스터를 선택하고 연결을 추가할 클러스터의 이름을 선택합니다.
-
액세스 탭을 선택합니다.
-
Pod Identity 연결에서 생성을 선택합니다.
-
워크로드가 수임할 IAM 역할에서 EKS Pod Identity 역할을 선택합니다.
-
대상 IAM 역할에서 EKS Pod Identity 역할이 수임할 대상 IAM 역할을 선택합니다.
-
Kubernetes 네임스페이스 필드에 연결을 생성하려는 네임스페이스의 이름(예:
my-app-namespace
)을 입력합니다. 이는 서비스 계정이 상주하는 위치를 정의합니다. -
Kubernetes 서비스 계정 필드에 IAM 자격 증명을 사용할 서비스 계정의 이름(예:
my-service-account
)을 입력합니다. 이렇게 하면 IAM 역할이 서비스 계정에 연결됩니다. -
생성을 선택하여 연결을 생성합니다.
(선택 사항) 3단계: IAM 대상 역할에 외부 권한 추가
이따금 AWS 리소스에 대한 액세스를 타사에 부여해야 할 때가 있습니다(액세스 위임). 예를 들어 Example Corp라는 타사를 고용해 AWS 계정을 모니터링하고 비용을 최적화하려고 합니다. 일일 경비를 추적하기 위해 Example Corp은 AWS 리소스에 접근해야 합니다. 이 경우 혼동된 대리자 문제를 방지하려면 IAM 대상 역할의 신뢰 정책에 ExternalId
를 추가하는 것이 좋습니다.
신뢰 정책을 편집합니다.
-
역할을 생성한 후 역할 목록으로 돌아갑니다. 이전 단계에서 생성한 새 역할(예:
MyCustomIAMTargetRole
)을 찾아 클릭합니다. -
신뢰 관계 탭을 선택합니다.
-
오른쪽에서 신뢰 정책 편집을 클릭합니다.
-
정책 편집기에서 기본 JSON을 신뢰 정책으로 바꿉니다.
aws-region/other-account/cluster-name/namespace/service-account-name
의ExternalId
자리 표시자 값을 바꿉니다. 여기서 'region'은 클러스터의 AWS 리전이고, '111122223333'은 다른 AWS 계정 ID이고, 'cluster-name'은 EKS 클러스터 이름이고, 'namespace'는 Kubernetes 네임스페이스이고, 'service-account-name'은 Kubernetes 서비스 계정 이름입니다. 예시:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/eks-pod-identity-primary-role" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "region/111122223333/cluster-name/namespace/service-account-name" } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/eks-pod-identity-primary-role" }, "Action": "sts:TagSession" } ] }