Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에 액세스하도록 AWS IAM Identity Center 사용자를 구성하고 싶습니다.
해결 방법
사전 요구 사항
- IAM Identity Center를 켜고 구성해야 합니다.
- SSO 사용자는 EKS 클러스터가 포함된 AWS 계정에 연결되어 있어야 합니다.
- EKS 클러스터는 액세스 항목을 지원해야 합니다(플랫폼 버전 eks.2 이상).
Amazon EKS 클러스터에 액세스할 수 있도록 SSO 사용자를 구성하려면 다음 단계를 완료하십시오.
SSO 인증을 사용하도록 AWS CLI 구성
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
SSO 사용자가 AWS Identity and Access Management(IAM) 역할을 인증하고 수임할 수 있도록 SSO 인증을 사용하도록 AWS CLI를 구성합니다.
IAM Identity Center를 사용하여 AWS CLI를 구성하는 방법에 대한 자세한 내용은 AWS CLI와 IAM Identity Center 통합을 참조하십시오.
SSO 프로파일을 사용하도록 kubectl 구성
SSO 프로파일을 사용하도록 kubectl을 구성하려면 다음 update-kubeconfig AWS CLI 명령을 실행합니다.
aws eks update-kubeconfig --name your-cluster-name --profile your-sso-profile
참고: your-cluster-name을 EKS 클러스터 이름으로 바꾸십시오. your-sso-profile을 SSO 프로파일 이름으로 바꾸십시오.
클러스터 인증 모드 확인
클러스터 인증 모드를 확인하려면 다음 describe-cluster AWS CLI 명령을 실행합니다.
aws eks describe-cluster --name your-cluster-name --query "cluster.accessConfig.authenticationMode" --profile your-sso-profile
참고: your-cluster-name을 EKS 클러스터 이름으로 바꾸십시오. your-sso-profile을 SSO 프로파일 이름으로 바꾸십시오.
출력에 API 또는 API_AND_CONFIG_MAP이 표시된다면 액세스 항목이 켜진 것입니다. 출력에 CONFIG_MAP이 표시된다면 aws-auth ConfigMap 메서드만 사용할 수 있습니다.
액세스 항목을 사용하여 액세스 구성
다음 권한 수준 중 하나를 선택합니다.
클러스터 전체 관리자 권한 부여
다음 단계를 완료하십시오.
- Amazon EKS 콘솔을 엽니다.
- 탐색 창에서 클러스터를 선택합니다.
- 해당 클러스터를 선택합니다.
- 액세스 탭을 선택합니다.
- 액세스 항목 섹션에서 액세스 항목 생성을 선택합니다.
- IAM 보안 주체 ARN에서 경로 구성 요소 없이 SSO 역할 ARN을 입력합니다.
- 유형에서 표준을 선택합니다.
- 다음을 선택합니다.
- 정책 이름에서 AmazonEKSClusterAdminPolicy를 선택합니다.
- 액세스 범위에서 클러스터를 선택합니다.
- 다음을 선택한 후 생성을 선택합니다.
네임스페이스별 권한 부여
다음 단계를 완료하십시오.
- Amazon EKS 콘솔을 엽니다.
- 탐색 창에서 클러스터를 선택합니다.
- 해당 클러스터를 선택합니다.
- 액세스 탭을 선택합니다.
- 액세스 항목 섹션에서 액세스 항목 생성을 선택합니다.
- IAM 보안 주체 ARN에서 경로 구성 요소 없이 SSO 역할 ARN을 입력합니다.
- 유형에서 표준을 선택합니다.
- 다음을 선택합니다.
- 정책 이름에서 요구 사항에 따라 AmazonEKSAdminViewPolicy 또는 AmazonEKSEditPolicy를 선택합니다.
- 액세스 범위에서 네임스페이스를 선택합니다.
- 네임스페이스에 네임스페이스 이름을 입력합니다.
- 다음을 선택한 후 생성을 선택합니다.
액세스 항목에 대한 자세한 내용은 EKS 액세스 항목을 사용하여 IAM 사용자에게 Kubernetes 액세스 권한 부여를 참조하십시오.
aws-auth ConfigMap을 사용하여 액세스 구성
중요: aws-auth를 IAM Identity Center와 함께 사용하는 경우 경로 구성 요소 없이 IAM 역할 ARN을 사용하십시오. 예를 들어 역할 ARN이 arn:aws:iam::123456789012:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_AdministratorAccess_1234567890abcdef인 경우 경로를 제거하여 arn:aws:iam::123456789012:role/AWSReservedSSO_AdministratorAccess_1234567890abcdef를 사용합니다.
클러스터가 액세스 항목을 지원하지 않거나 aws-auth ConfigMap 메서드를 사용하려는 경우 다음 단계를 완료하십시오.
클러스터 전체 관리자 권한 부여
다음 구성을 사용하여 YAML 파일을 만듭니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
data:
mapRoles: |
- rolearn: arn:aws:iam::123456789012:role/AWSReservedSSO_AdministratorAccess_1234567890abcdef
username: sso-admin-user
groups:
- system:masters
참고: rolearn 값을 경로 구성 요소가 없는 SSO 역할 ARN으로 바꾸십시오. sso-admin-user를 선호하는 사용자 이름으로 바꾸십시오.
구성을 적용합니다.
kubectl apply -f aws-auth-configmap.yaml
네임스페이스별 권한 부여
네임스페이스별 액세스를 위한 Role 및 RoleBinding을 만듭니다.
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: sso-user-role
namespace: your-namespace
rules:
- apiGroups: [""]
resources: ["pods", "services", "configmaps"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: sso-user-rolebinding
namespace: your-namespace
subjects:
- kind: User
name: sso-user
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: sso-user-role
apiGroup: rbac.authorization.k8s.io
참고: your-namespace를 네임스페이스 이름으로 바꾸십시오. sso-user를 aws-auth ConfigMap에 지정된 사용자 이름으로 바꾸십시오.
구성을 적용합니다.
kubectl apply -f role-rolebinding.yaml
aws-auth ConfigMap을 업데이트하여 SSO 역할을 사용자 이름에 매핑합니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
data:
mapRoles: |
- rolearn: arn:aws:iam::123456789012:role/AWSReservedSSO_AdministratorAccess_1234567890abcdef
username: sso-user
참고: rolearn 값을 경로 구성 요소가 없는 SSO 역할 ARN으로 바꾸십시오.
구성을 적용합니다.
kubectl apply -f aws-auth-configmap.yaml
aws-auth ConfigMap에 대한 자세한 내용은 ConfigMap을 사용하여 IAM 사용자에게 Kubernetes에 대한 액세스 권한 부여를 참조하십시오.
액세스 확인
SSO 사용자가 클러스터에 액세스할 수 있는지 확인하려면 다음 명령을 실행합니다.
kubectl get nodes
명령이 노드 목록을 반환하면 SSO 사용자가 클러스터에 성공적으로 인증된 것입니다.
관련 정보
클러스터 액세스 관리