Amazon EKS 클러스터에 액세스할 수 있도록 SSO 사용자를 구성하려면 어떻게 해야합니까?
AWS IAM Identity Center(AWS Single Sign-On의 후속 서비스)를 사용하고 있습니다. 하지만 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에 액세스할 수 없습니다. SSO 사용자가 제 클러스터에 액세스할 수 있도록 구성하고 싶습니다.
해결 방법
다음 사전 조건을 충족하는지 확인합니다.
- IAM ID 센터를 켜고 구성했습니다.
- SSO 사용자는 Amazon EKS 클러스터가 있는 AWS 계정과 연결되어 있습니다.
참고: 다음 단계에서는 kubectl을 사용하여 클러스터에 액세스합니다. kubectl 액세스를 구성한 후, IAM Identity Center 사용자로 로그인하여 Amazon EKS 콘솔에서 클러스터 리소스를 볼 수 있습니다.
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하십시오.
SSO 사용자를 사용하도록 AWS CLI를 구성
AWS CLI 명령을 실행할 때 SSO 인증을 사용하는 AWS Command Line Interface(AWS CLI) 프로필을 생성합니다. 자세한 내용은 AWS IAM Identity Center(AWS Single Sign-On의 후속 서비스)를 사용하도록 AWS CLI 구성을 참조하십시오.
다음은 자동 절차를 사용한 AWS CLI SSO 구성의 예입니다.
aws configure sso SSO start URL [None]: https://my-sso-portal.awsapps.com/start SSO region [None]: us-east-1
AWS CLI는 사용자의 기본 브라우저를 열고 IAM Identity Center 계정에 대한 로그인 프로세스를 시작하려고 시도합니다.
Attempting to automatically open the SSO authorization page in your default browser.
AWS CLI에서 브라우저를 열 수 없는 경우 로그인 프로세스를 수동으로 시작하는 방법에 대한 지침이 포함된 다음 메시지가 나타납니다.
If the browser does not open or you wish to use a different device to authorize this request, open the following URL: https://device.sso.us-east-2.amazonaws.com/ Then enter the code: XXXX-XXXX The only AWS account available to you is: 123456789999 Using the account ID 123456789999 The only role available to you is: ViewOnlyAccess Using the role name "ViewOnlyAccess" CLI default client Region [us-east-2]: CLI default output format [json]: CLI profile name [ViewOnlyAccess-123456789999]: test-profile To use this profile, specify the profile name using --profile, as shown: aws s3 ls --profile test-profile
이제 이 새 프로필을 사용하여 AWS CLI 명령을 실행할 수 있습니다. 이 구성을 통해 SSO 사용자는 다음 작업을 수행할 수 있습니다.
- AWS로 인증합니다.
- IAM Identity Center에서 생성한 AWS Identity and Management(IAM) 역할을 가정합니다.
예:
$ aws sts get-caller-identity { "UserId": "AROAXMRV33N1234567890:test-user", "Account": "123456789999", "Arn": "arn:aws:sts::123456789999:assumed-role/AWSReservedSSO_ViewOnlyAccess_05a3861234567890/test-user" }
SSO용으로 생성한 AWS CLI 프로필을 사용하도록 kubectl 컨텍스트를 구성
kubectl은 AWS CLI 명령을 사용합니다. 따라서 kubectl의 현재 컨텍스트에서 새 AWS CLI 프로필을 지정해야 합니다. 새 프로필을 사용하도록 kubectl 컨텍스트를 업데이트하려면 다음 명령을 실행합니다.
aws eks update-kubeconfig --name $CLUSTER-NAME --profile test-profile
이 명령을 실행한 후 kubectl은 프로필 test-profile을 사용하여 클러스터 API 서버에 인증합니다.
해당 경로를 제외하여 ARN 버전을 구축
aws-auth ConfigMap에 매핑한 IAM 역할은 경로를 포함하지 않습니다. 기본적으로 SSO 사용자와 연결된 IAM 역할의 Amazon 리소스 이름(ARN)은 경로를 포함합니다.
예:
arn:aws:iam::123456789999:role/aws-reserved/sso.amazonaws.com/us-east-2/AWSReservedSSO_ViewOnlyAccess_05a3861234567890
aws-auth ConfigMap에 전체 ARN을 추가하면 SSO 사용자가 인증되지 않습니다. SSO 사용자를 사용해 클러스터에 액세스할 수 없습니다. 경로를 포함하지 않고 이 ARN 버전을 빌드해야 합니다. 이 버전은 다음 단계에서 사용해야 함
예:
arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01
다음 명령을 실행하여 경로 없이 IAM 역할을 가져올 수도 있습니다.
ssorole=$(aws sts get-caller-identity --query Arn --output text --profile test-profile | cut -d/ -f2) account=$(aws sts get-caller-identity --query Account --output text --profile test-profile) echo "arn:aws:iam::$account:role/$ssorole" arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01
aws-auth ConfigMap에 ARN을 추가
SSO 사용자가 Amazon EKS 클러스터에 액세스하려면 SSO 사용자와 연결된 IAM 역할을 Kubernetes RBAC 권한에 매핑해야 합니다. 이렇게 하려면 aws-auth ConfigMap에 경로 없이 IAM 역할 ARN을 포함시킵니다. 그런 다음 Kubernetes 사용자와 Kubernetes Role 및 RoleBinding(또는 ClusterRole 및 ClusterRoleBinding)에 연결된 그룹에 매핑합니다. 사용 사례에 따라 다음 섹션 중 하나의 지침을 사용합니다.
클러스터 전체 관리자 권한을 보유한 SSO 사용자
기본적으로 Kubernetes 그룹 system:masters는 클러스터 전체의 관리자 권한을 제공합니다. 이 그룹은 ClusterRole cluster-admin 및 ClusterRoleBinding cluster-admin에 연결됩니다. 따라서 새로운 ClusterRole 또는 ClusterBindingRole 객체를 생성할 필요가 없습니다. 경로 없이 IAM 역할만 system:masters 그룹에 매핑하면 됩니다.
이렇게 하려면 aws-auth ConfigMap을 수정합니다.
kubectl edit configmap aws-auth -n kube-system
그리고 다음 코드를 추가합니다.
- groups: - system:masters rolearn: arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 username: cluster-admin
네임스페이스에 바인딩한 읽기 권한을 보유한 SSO 사용자
이 경우에는 특정 네임스페이스 내에서 읽기 권한을 보유한 Role 및 RoleBinding을 생성해야 합니다. 그런 다음 aws-auth ConfigMap의 사용자 지정 사용자 이름 또는 그룹 이름을 사용하여 이러한 객체를 IAM 역할에 연결합니다.
1. 원하는 네임스페이스에서 읽기 권한만 허용하는 Kubernetes Role 객체를 생성합니다.
cat << EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: $MY-NAMESPACE name: reader-role rules: - apiGroups: [""] # "" indicates the core API group resources: ["*"] verbs: ["get", "watch", "list"] EOF
참고:
- $MY-NAMESPACE를 네임스페이스 이름으로 변경합니다.
- reader-role을 사용자 지정 사용자 이름으로 변경합니다.
2. Kubernetes 역할 권한을 그룹 read-only-group에 연결하는 Kubernetes RoleBinding 객체를 생성합니다.
cat <<EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: reader-binding namespace: MY-NAMESPACE subjects: - kind: Group name: read-only-group apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: reader-role apiGroup: rbac.authorization.k8s.io EOF
3. 경로가 없는 IAM 역할 ARN을 aws-auth ConfigMap의 그룹 read-only-group으로 매핑합니다.
다음 명령을 실행하여 IAM 역할을 자동으로 매핑할 수 있습니다.
eksctl create iamidentitymapping \ --cluster $CLUSTER-NAME \ --region $REGION \ --arn arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 \ --group read-only-group \ --no-duplicate-arns \ --username read-only-user1
참고: $CLUSTER-NAME 및 $REGION을 각각 클러스터 및 리전 이름으로 바꿉니다. 또는 IAM 역할을 수동으로 매핑할 수 있습니다. 이렇게 하려면 aws-auth ConfigMap을 수정합니다.
kubectl edit configmap aws-auth -n kube-system
그런 다음 mapRoles 섹션 아래에 다음을 추가합니다.
- groups: - read-only-group rolearn: arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 username: read-only-user1
중요: IAM 역할은 aws-auth ConfigMap에 한 번만 나타나야 합니다. 따라서 한 섹션만이 IAM 역할을 포함하는지 확인합니다.
이제 SSO 사용자를 사용하여 클러스터에 액세스할 수 있습니다.
$ kubectl get pod NAME READY STATUS RESTARTS AGE web-0 1/1 Running 0 24h
관련 정보
관련 콘텐츠
- 질문됨 한 달 전lg...
- 질문됨 일 년 전lg...
- 질문됨 일 년 전lg...
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 2년 전