Amazon EKS 클러스터에 액세스할 수 있도록 SSO 사용자를 구성하려면 어떻게 해야합니까?

5분 분량
0

AWS IAM Identity Center(AWS Single Sign-On의 후속 서비스)를 사용하고 있습니다. 하지만 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에 액세스할 수 없습니다. SSO 사용자가 제 클러스터에 액세스할 수 있도록 구성하고 싶습니다.

해결 방법

다음 사전 조건을 충족하는지 확인합니다.

참고: 다음 단계에서는 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

관련 정보

클러스터에 대한 IAM 사용자 및 역할 액세스 사용 설정

AWS 공식
AWS 공식업데이트됨 일 년 전