태그를 기반으로 Pod에 AWS 리소스 액세스 권한 부여
태그를 기반으로 Pod에 AWS 리소스 액세스 권한 부여
EKS Pod Identity의 역할 세션 태그를 사용해 속성 기반 액세스 제어(ABAC)로 Pod에 AWS 리소스 액세스 권한을 부여하는 방법을 설명합니다.
출처: 문서
본문
속성 기반 액세스 제어(ABAC)는 속성을 결합하는 정책을 통해 사용자에게 권한을 부여합니다. EKS Pod Identity는 클러스터 이름, 네임스페이스, 서비스 계정 이름 같은 속성을 각 Pod의 임시 자격 증명에 태그로 첨부합니다. 이러한 역할 세션 태그(role session tags)를 사용하면 관리자가 일치하는 태그를 기반으로 AWS 리소스 액세스를 허용해 여러 서비스 계정에서 작동할 수 있는 단일 역할을 작성할 수 있습니다. 역할 세션 태그 지원을 추가하면 동일한 IAM 역할과 IAM 정책을 재사용하면서 클러스터 간, 그리고 클러스터 내 워크로드 간에 더 엄격한 보안 경계를 적용할 수 있습니다.
태그가 있는 샘플 정책
아래는 해당 객체가 EKS 클러스터 이름으로 태그되어 있을 때 s3:GetObject 권한을 부여하는 IAM 정책 예제입니다.
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectTagging"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"s3:ExistingObjectTag/eks-cluster-name": "${aws:PrincipalTag/eks-cluster-name}"
}
}
}
]
}
세션 태그 활성화 또는 비활성화
EKS Pod Identity는 역할을 수임할 때 미리 정의된 세션 태그 집합을 추가합니다. 이러한 세션 태그를 사용하면 관리자가 일치하는 태그를 기반으로 AWS 리소스 액세스를 허용해 여러 리소스에서 작동할 수 있는 단일 역할을 작성할 수 있습니다.
세션 태그 활성화
세션 태그는 EKS Pod Identity와 함께 자동으로 활성화됩니다 — 사용자가 해야 할 조치는 없습니다. 기본적으로 EKS Pod Identity는 사전 정의된 태그 집합을 세션에 첨부합니다. 정책에서 이러한 태그를 참조하려면 ${aws:PrincipalTag/ 다음에 태그 키를 사용하는 구문을 사용하세요. 예: ${aws:PrincipalTag/kubernetes-namespace}.
eks-cluster-arneks-cluster-namekubernetes-namespacekubernetes-service-accountkubernetes-pod-namekubernetes-pod-uid
세션 태그 비활성화
AWS는 인라인 세션 정책, 관리형 정책 ARN 및 세션 태그를 별도의 한도가 있는 압축 이진 형식으로 압축합니다. 압축 이진 형식이 크기 한도를 초과했음을 나타내는 PackedPolicyTooLarge 오류를 받으면, EKS Pod Identity가 추가하는 세션 태그를 비활성화해 크기를 줄일 수 있습니다. 이 세션 태그를 비활성화하려면 다음 단계를 따르세요.
- Amazon EKS 콘솔을 엽니다.
- 왼쪽 탐색 창에서 Clusters를 선택하고 수정할 클러스터의 이름을 선택합니다.
- Access 탭을 선택합니다.
- Pod Identity associations에서 Association ID에 수정할 연결 ID를 선택한 다음 Edit를 선택합니다.
- Session tags에서 Disable session tags를 선택합니다.
- Save changes를 선택합니다.
크로스 계정 태그
EKS Pod Identity가 추가하는 모든 세션 태그는 전이적(transitive)입니다. 태그 키와 값은 워크로드가 다른 계정의 역할로 전환하기 위해 사용하는 모든 AssumeRole 작업에 전달됩니다. 크로스 계정 시나리오에서 액세스를 제한하기 위해 다른 계정의 정책에서 이러한 태그를 사용할 수 있습니다. 자세한 내용은 IAM 사용 설명서의 "세션 태그로 역할 연결"을 참고하세요.
사용자 지정 태그
EKS Pod Identity는 수행하는 AssumeRole 작업에 추가 사용자 지정 태그를 추가할 수 없습니다. 하지만 IAM 역할에 적용하는 태그는 항상 ${aws:PrincipalTag/ 다음에 키를 붙인 동일한 형식으로 사용할 수 있습니다. 예: ${aws:PrincipalTag/MyCustomTag}.
참고:
sts:AssumeRole요청을 통해 세션에 추가된 태그는 충돌 시 우선합니다. 예를 들어, Amazon EKS가 고객 역할을 수임할 때 세션에 키eks-cluster-name과 값my-cluster를 추가하고, 사용자가my-own-cluster값을 가진eks-cluster-name태그를 IAM 역할에 추가했다고 가정해 봅시다. 이 경우 전자가 우선하며eks-cluster-name태그의 값은my-cluster가 됩니다.