ACK 권한 구성
ACK 권한 구성
ACK가 IAM과 함께 작동하는 방식과 다양한 사용 사례에 맞게 권한을 구성하는 방법을 설명합니다.
출처: 문서
본문
ACK는 사용자 대신 AWS 리소스를 생성하고 관리하려면 IAM 권한이 필요합니다. 이 항목에서는 IAM이 ACK와 함께 작동하는 방식을 설명하고 서로 다른 사용 사례별 권한 구성 안내를 제공합니다.
IAM이 ACK와 함께 작동하는 방식
ACK는 IAM 역할을 사용해 AWS에 인증하고 사용자의 리소스에서 작업을 수행합니다. ACK에 권한을 제공하는 방법은 두 가지입니다.
- 캐퍼빌리티 역할(Capability Role) - ACK 캐퍼빌리티를 생성할 때 사용자가 제공하는 IAM 역할입니다. 이 역할은 모든 ACK 작업에 기본적으로 사용됩니다.
- IAM Role Selector - 특정 네임스페이스나 리소스에 매핑할 수 있는 추가 IAM 역할입니다. 이 역할은 해당 범위의 리소스에 대해 캐퍼빌리티 역할을 대체합니다.
ACK가 리소스를 생성하거나 관리해야 할 때 사용할 IAM 역할을 다음과 같이 결정합니다.
- IAMRoleSelector가 리소스의 네임스페이스와 일치하는지 확인합니다.
- 일치하는 항목이 있으면 그 IAM 역할을 가정합니다.
- 그렇지 않으면 캐퍼빌리티 역할을 사용합니다.
이 접근 방식은 단일 역할 설정부터 복잡한 멀티 계정, 멀티 팀 구성까지 유연한 권한 관리를 가능하게 합니다.
시작하기: 간단한 권한 설정
개발, 테스트 또는 간단한 사용 사례에서는 필요한 모든 서비스 권한을 캐퍼빌리티 역할에 직접 추가할 수 있습니다. 이 접근 방식은 다음 상황에 적합합니다.
- ACK를 처음 시작할 때
- 모든 리소스가 같은 AWS 계정에 있을 때
- 단일 팀이 모든 ACK 리소스를 관리할 때
- 모든 ACK 사용자에게 동일한 권한을 부여해도 신뢰할 때
프로덕션 모범 사례: IAM Role Selector
프로덕션 환경에서는 IAM Role Selector를 사용해 최소 권한 접근과 네임스페이스 수준 격리를 구현하세요. IAM Role Selector를 사용할 때 캐퍼빌리티 역할에는 서비스별 역할을 가정하기 위한 sts:AssumeRole과 sts:TagSession 권한만 있으면 됩니다. 캐퍼빌리티 역할 자체에 S3나 RDS 같은 AWS 서비스 권한을 추가할 필요는 없습니다. 해당 권한은 캐퍼빌리티 역할이 가정하는 개별 IAM 역할에 부여되기 때문입니다.
권한 모델 선택:
다음 경우 직접 권한(캐퍼빌리티 역할에 서비스 권한 추가)을 사용하세요.
- 시작 단계이며 가장 간단한 설정을 원할 때
- 모든 리소스가 클러스터와 같은 계정에 있을 때
- 관리자 수준의 클러스터 전체 권한 요구 사항이 있을 때
- 모든 팀이 동일한 권한을 공유할 수 있을 때
다음 경우 IAM Role Selector를 사용하세요.
- 여러 AWS 계정에 걸쳐 리소스를 관리할 때
- 팀이나 네임스페이스마다 서로 다른 권한이 필요할 때
- 네임스페이스별 세분화된 접근 제어가 필요할 때
- 최소 권한 보안 방식을 따르고 싶을 때
직접 권한으로 시작해 요구 사항이 커지면 나중에 IAM Role Selector로 마이그레이션할 수 있습니다.
프로덕션에서 IAM Role Selector를 사용하는 이유:
- 최소 권한 - 각 네임스페이스에 필요한 권한만 부여합니다.
- 팀 격리 - 팀 A가 실수로 팀 B의 권한을 사용할 수 없습니다.
- 감사 용이성 - 어느 네임스페이스가 어느 역할을 사용하는지 명확하게 매핑됩니다.
- 교차 계정 지원 - 여러 계정의 리소스 관리에 필요합니다.
- 관심사 분리 - 서로 다른 서비스나 환경이 서로 다른 역할을 사용합니다.
기본 IAM Role Selector 설정
1단계: 서비스별 IAM 역할 생성
특정 AWS 서비스 권한을 가진 IAM 역할을 생성합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": "*"
}
]
}
캐퍼빌리티 역할이 이를 가정할 수 있도록 신뢰 정책을 구성합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/ACKCapabilityRole"
},
"Action": ["sts:AssumeRole", "sts:TagSession"]
}
]
}
2단계: 캐퍼빌리티 역할에 AssumeRole 권한 부여
서비스별 역할을 가정할 수 있도록 캐퍼빌리티 역할에 권한을 추가합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["sts:AssumeRole", "sts:TagSession"],
"Resource": "arn:aws:iam::111122223333:role/ACK-S3-Role"
}
]
}
3단계: IAMRoleSelector 생성
IAM 역할을 네임스페이스에 매핑합니다.
apiVersion: services.k8s.aws/v1alpha1
kind: IAMRoleSelector
metadata:
name: s3-namespace-config
spec:
arn: arn:aws:iam::111122223333:role/ACK-S3-Role
namespaceSelector:
names:
- s3-resources
4단계: 매핑된 네임스페이스에서 리소스 생성
s3-resources 네임스페이스의 리소스는 자동으로 지정된 역할을 사용합니다.
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
name: my-bucket
namespace: s3-resources
spec:
name: my-production-bucket
멀티 계정 관리
IAM Role Selector를 사용해 여러 AWS 계정에 걸쳐 리소스를 관리합니다.
1단계: 교차 계정 IAM 역할 생성
대상 계정(444455556666)에서 소스 계정의 캐퍼빌리티 역할을 신뢰하는 역할을 생성합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/ACKCapabilityRole"
},
"Action": ["sts:AssumeRole", "sts:TagSession"]
}
]
}
이 역할에 서비스별 권한을 연결합니다.
2단계: AssumeRole 권한 부여
소스 계정(111122223333)에서 캐퍼빌리티 역할이 대상 계정 역할을 가정하도록 허용합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["sts:AssumeRole", "sts:TagSession"],
"Resource": "arn:aws:iam::444455556666:role/ACKTargetAccountRole"
}
]
}
3단계: IAMRoleSelector 생성
교차 계정 역할을 네임스페이스에 매핑합니다.
apiVersion: services.k8s.aws/v1alpha1
kind: IAMRoleSelector
metadata:
name: production-account-config
spec:
arn: arn:aws:iam::444455556666:role/ACKTargetAccountRole
namespaceSelector:
names:
- production
4단계: 리소스 생성
production 네임스페이스의 리소스는 대상 계정에 생성됩니다.
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
name: my-bucket
namespace: production
spec:
name: my-cross-account-bucket
세션 태그(session tags)
EKS ACK 캐퍼빌리티는 모든 AWS API 요청에 세션 태그를 자동으로 설정합니다. 이 태그들은 각 요청의 출처를 식별해 세분화된 접근 제어와 감사를 가능하게 합니다.
사용 가능한 세션 태그
ACK가 수행하는 모든 AWS API 호출에는 다음 세션 태그가 포함됩니다.
| 태그 키 | 설명 |
|---|---|
eks:eks-capability-arn |
요청을 보내는 EKS 캐퍼빌리티의 ARN |
eks:kubernetes-namespace |
관리 중인 리소스의 Kubernetes 네임스페이스 |
eks:kubernetes-api-group |
리소스의 Kubernetes API 그룹(예: s3.services.k8s.aws) |
접근 제어에 세션 태그 사용하기
IAM 정책 조건에서 이 세션 태그를 사용해 ACK가 관리할 수 있는 리소스를 제한할 수 있습니다. 이는 네임스페이스 기반 IAM Role Selector를 넘어 추가 보안 계층을 제공합니다.
예시: 네임스페이스별 제한
요청이 production 네임스페이스에서 오는 경우에만 ACK가 S3 버킷을 생성하도록 허용합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:CreateBucket",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:PrincipalTag/eks:kubernetes-namespace": "production"
}
}
}
]
}
예시: 캐퍼빌리티별 제한
특정 ACK 캐퍼빌리티에서만 작업을 허용합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:PrincipalTag/eks:eks-capability-arn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/ack/my-ack"
}
}
}
]
}
참고
세션 태그는 기본적으로 이 태그를 설정하지 않는 자체 관리 ACK와의 차이점입니다. 이를 통해 관리형 캐퍼빌리티에서 더 세분화된 접근 제어가 가능합니다.
고급 IAM Role Selector 패턴
교차 계정 역할 매핑, 네임스페이스 범위 역할 선택 등을 포함한 고급 구성과 추가 예시는 ACK 웹사이트의 Granular IAM Roles를 참고하세요.
다음 단계
- ACK 개념 - ACK 개념과 리소스 수명 주기 이해하기
- EKS 캐퍼빌리티 보안 고려 사항 - 캐퍼빌리티 보안 모범 사례 이해하기