EKS Auto Mode 관리형 컨트롤러에 추가 Kubernetes RBAC 부여하기
EKS Auto Mode 관리형 컨트롤러에 추가 Kubernetes RBAC 부여하기
Amazon EKS Auto Mode는 로드 밸런싱, 네트워킹, 컴퓨트, 블록 스토리지, 클러스터 인사이트 컨트롤러를 사용자를 대신해 관리합니다. 이 컨트롤러들은 EKS 컨트롤 플레인에서 실행됩니다. AWSServiceRoleForAmazonEKS 서비스 연결 역할로 클러스터에 인증하며, 클러스터 내 권한은 해당 access entry에 연결된 AWS 관리형 접근 정책에서 비롯됩니다.
관리형 컨트롤러의 Kubernetes RBAC를 직접 확장할 수 있어요. 이는 관리형 정책이 아직 필요한 권한(예: 특정 Secret에 대한 get)을 부여하지 않을 때 유용합니다.
Amazon EKS Auto Mode 클러스터에서 AWSServiceRoleForAmazonEKS용으로 자동 생성된 access entry는 Kubernetes 그룹 eks:managed도 선언합니다. Kubernetes RBAC는 가산적(additive)입니다. subjects:가 eks:managed 그룹을 지명하는 RoleBinding(또는 ClusterRoleBinding)은 관리형 접근 정책 위에 관리형 컨트롤러에 추가 권한을 부여합니다.
출처: 문서
본문
작동 방식
- EKS Auto Mode 관리형 컨트롤러는 서비스 연결 역할
AWSServiceRoleForAmazonEKS로 클러스터에 연결합니다. - 해당 역할용 자동 생성 access entry는
kubernetesGroups: ["eks:managed"]를 선언합니다. - 추가 권한을 설명하는
Role(네임스페이스 범위) 또는ClusterRole(클러스터 전체)과subjects:가eks:managed그룹을 지명하는RoleBinding/ClusterRoleBinding을 작성합니다. - Kubernetes RBAC가 바인딩과 관리형 접근 정책을 결합하므로 관리형 컨트롤러는 두 권한 집합을 모두 받습니다.
그룹이 존재하는지 확인하려면 다음을 실행합니다.
CLUSTER=
REGION=
ACCT=$(aws sts get-caller-identity --query Account --output text)
aws eks describe-access-entry \
--cluster-name "$CLUSTER" --region "$REGION" \
--principal-arn "arn:aws:iam::${ACCT}:role/aws-service-role/eks.amazonaws.com/AWSServiceRoleForAmazonEKS" \
--query 'accessEntry.kubernetesGroups'
예상 출력:
[
"eks:managed"
]
부여 범위를 좁게 설정
eks:managed 그룹은 모든 EKS Auto Mode 관리형 컨트롤러에 적용됩니다. 사용 사례가 허용하는 만큼 좁게 추가 부여 범위를 설정해 관리형 컨트롤러가 정확히 필요로 하는 것만 노출하세요.
- 네임스페이스 범위인
Role+RoleBinding을 클러스터 전체인ClusterRole+ClusterRoleBinding보다 우선합니다. resources,resourceNames,verbs를 사용 사례를 해결하는 가장 작은 집합으로 제한합니다. 예를 들어 모든Secret객체에 대한list, watch대신 단일 이름의Secret에 대한get을 부여하세요.- 더 이상 필요 없어지면
Role과RoleBinding을 삭제합니다.
Amazon EKS Auto Mode 고려 사항
- 이 메커니즘은 EKS Auto Mode 관리형 컨트롤러의 Kubernetes RBAC만 확장합니다. 관리형 접근 정책이 부여하는 AWS IAM 권한은 변경하지 않습니다.
eks:managed그룹은 서비스 연결 역할이AWSServiceRoleForAmazonEKS인 EKS Auto Mode 클러스터에 존재합니다.eks:managed에 대한 바인딩은 모든 EKS Auto Mode 관리형 컨트롤러에 적용됩니다. 실질적인 폭발 반경(blast radius)을 작게 유지하려면resourceNames와 네임스페이스 범위Role객체를 사용하세요. 이렇게 하면 지명한 리소스만, 부여한 verbs를 통해서만 노출됩니다.- 이것은 관리형 접근 정책이 아직 다루지 않는 권한이 필요할 때를 위한 브리징 패턴입니다. AWS 관리형 정책이 이미 권한을 다루는 경우 관리형 정책을 대신 사용하세요.
예시
EKS Auto Mode 로드 밸런서 컨트롤러에 이름이 지정된 OIDC Secret에 대한 get을 부여하는 단계별 과정 — ALB Ingress에서 alb.ingress.kubernetes.io/auth-type: oidc 어노테이션 차단을 해제 — 은 Grant the EKS Auto Mode load balancer controller access to a specific Secret을 참고하세요.