이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.
ACK 권한 구성
ACK에는 사용자를 대신하여 AWS 리소스를 생성 및 관리할 IAM 권한이 필요합니다. 이 주제에서는 IAM이 ACK와 함께 작동하는 방법을 설명하고 다양한 사용 사례에 대한 권한 구성에 대한 지침을 제공합니다.
IAM에서 ACK를 사용하는 방식
ACK는 IAM 역할을 사용하여 AWS에서 인증하고 리소스에 대한 작업을 수행합니다. ACK에 권한을 제공하는 다음과 같은 두 가지 방법이 있습니다.
기능 역할: ACK 기능을 생성할 때 사용자가 제공하는 IAM 역할. 이 역할은 기본적으로 모든 ACK 작업에 사용됩니다.
IAM 역할 선택기: 특정 네임스페이스 또는 리소스에 매핑할 수 있는 추가 IAM 역할. 이러한 역할은 해당 범위의 리소스에 대한 기능 역할을 재정의합니다.
ACK는 리소스를 생성하거나 관리해야 하는 경우 다음과 같이 사용할 IAM 역할을 결정합니다.
-
IAMRoleSelector가 리소스의 네임스페이스와 일치하는지 확인
-
일치하는 항목이 발견되면 해당 IAM 역할 수임
-
그렇지 않으면 기능 역할 사용
이 접근 방식을 사용하면 간단한 단일 역할 설정에서 복잡한 다중 계정, 다중 팀 구성에 이르기까지 유연한 권한 관리를 지원할 수 있습니다.
시작하기: 간단한 권한 설정
개발, 테스트 또는 간단한 사용 사례의 경우 필요한 모든 서비스 권한을 기능 역할에 직접 추가할 수 있습니다.
이 접근 방식은 다음과 같은 경우에 효과적입니다.
-
ACK를 시작함
-
모든 리소스가 동일한 AWS 계정에 있음
-
단일 팀이 모든 ACK 리소스를 관리함
-
모든 ACK 사용자에게 동일한 권한이 있다고 신뢰함
프로덕션 모범 사례: IAM 역할 선택기
프로덕션 환경의 경우 IAM 역할 선택기를 사용하여 최소 권한 액세스 및 네임스페이스 수준 격리를 구현합니다.
IAM 역할 선택기를 사용하는 경우 기능 역할에는 서비스 특정 역할을 수임하기 위해 sts:AssumeRole 및 sts:TagSession 권한만 있으면 됩니다. 기능 역할 자체에 AWS 서비스 권한(예: S3 또는 RDS)을 추가할 필요가 없습니다. 이러한 권한은 기능 역할이 수임하는 개별 IAM 역할에 부여됩니다.
권한 모델 중에서 선택:
다음과 같은 경우 직접 권한(기능 역할에 서비스 권한 추가)을 사용합니다.
-
시작 중이며 가장 간단한 설정을 원하는 경우
-
모든 리소스가 클러스터와 동일한 계정에 있는 경우
-
관리, 클러스터 전체 권한 요구 사항이 있는 경우
-
모든 팀이 동일한 권한을 공유할 수 있는 경우
다음과 같은 경우 IAM 역할 선택기를 사용합니다.
-
여러 AWS 계정에서 리소스 관리
-
팀 또는 네임스페이스마다 다른 권한이 필요함
-
네임스페이스당 세분화된 액세스 제어가 필요함
-
최소 권한 보안 사례를 따르려고 함
직접 권한으로 시작하고, 요구 사항이 증가함에 따라 나중에 IAM 역할 선택기로 마이그레이션할 수 있습니다.
프로덕션에서 IAM 역할 선택기를 사용하는 이유:
-
최소 권한: 각 네임스페이스는 필요한 권한만 받음
-
팀 격리: 팀 A에서 실수로 팀 B의 권한을 사용할 수 없음
-
더 쉬운 감사: 어떤 네임스페이스가 어떤 역할을 사용하는지에 대한 명확한 매핑
-
교차 계정 지원: 여러 계정에서 리소스를 관리하는 데 필요함
-
우려 사항 분리: 서비스 또는 환경마다 다른 역할을 사용함
기본 IAM 역할 선택기 설정
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 역할 선택기를 사용하여 여러 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
세션 태그
EKS ACK 기능은 모든 AWS API 요청에 대해 세션 태그를 자동으로 설정합니다. 이러한 태그를 사용하면 각 요청의 소스를 식별하여 세분화된 액세스 제어 및 감사를 지원할 수 있습니다.
사용 가능한 세션 태그
ACK에서 수행하는 모든 AWS API 직접 호출에는 다음 세션 태그가 포함됩니다.
| 태그 키 | 설명 |
|---|---|
|
|
요청을 수행하는 EKS 기능의 ARN |
|
|
관리하는 리소스의 Kubernetes 네임스페이스 |
|
|
리소스의 Kubernetes API 그룹(예: |
액세스 제어를 위해 세션 태그 사용
IAM 정책 조건에서 이러한 세션 태그를 사용하여 ACK가 관리할 수 있는 리소스를 제한할 수 있습니다. 이를 통해 네임스페이스 기반 IAM 역할 선택기 외에도 추가 보안 계층을 제공합니다.
예제: 네임스페이스로 제한
요청이 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 역할 선택기 패턴
레이블 선택기, 리소스 특정 역할 매핑 및 추가 예제를 포함한 고급 구성은 ACK IRSA 설명서
다음 단계
-
ACK 개념 - ACK 개념 및 리소스 수명 주기 이해
-
ACK 개념 - 리소스 채택 및 삭제 정책에 대해 알아보기
-
EKS 기능에 대한 보안 고려 사항 - 기능에 대한 보안 모범 사례 이해