Amazon EKS에서 클러스터를 생성한 후 다른 IAM 사용자 및 역할이 액세스할 수 있도록 하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 3월 4일

kubectl 명령을 통해 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에 액세스하려고 하면 다음 권한 부여 오류가 발생합니다. "error: You must be logged in to the server (Unauthorized)."

간략한 설명

AWS Identity and Access Management(IAM) 엔터티가 Amazon EKS 클러스터의 RBAC(역할 기반 액세스 제어) 구성에서 권한을 부여받지 않은 경우 권한 부여 오류가 발생합니다. IAM 사용자 또는 역할이 aws-iam-authenticator에서 사용하는 것과 다른 Amazon EKS 클러스터를 생성한 경우 이 상황이 발생합니다.

처음에는 Amazon EKS 클러스터 생성자에게만 클러스터를 구성할 system:masters 권한이 있습니다. system:masters 권한을 다른 사용자 및 역할로 확대하려면 aws-auth ConfigMap을 Amazon EKS 클러스터 구성에 추가해야 합니다. ConfigMap을 사용하면 다른 IAM 엔터티(예: 사용자 및 역할)에서 Amazon EKS 클러스터에 액세스할 수 있습니다.

IAM 역할에 대한 액세스 권한을 부여하려면 클러스터 생성자 자격 증명을 가정해야 합니다. 그런 다음 aws-auth ConfigMapmapRoles 섹션에 IAM 역할을 추가합니다.

중요:

  • aws-auth ConfigMap을 업데이트할 때 구문 오류 (예: 오타) 를 피하세요. 이러한 오류는 Amazon EKS 클러스터의 ConfigMap 내에서 업데이트된 모든 IAM 사용자 및 역할의 권한에 영향을 줄 수 있습니다.
  • ConfigMapcluster_creator를 추가하지 않는 것이 가장 좋습니다. ConfigMap을 부적절하게 수정하면 cluster_creator를 포함한 모든 IAM 사용자 및 역할이 Amazon EKS 클러스터에 영구적으로 액세스할 수 없게 될 수 있습니다.
  • Amazon EKS 클러스터에 대한 관리자 액세스 권한을 얻기 위해 aws-auth ConfigMapcluster_creator를 추가할 필요가 없습니다. 기본적으로 cluster_creator는 생성한 Amazon EKS 클러스터에 대한 관리자 액세스 권한을 갖습니다.

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하는 경우 AWS CLI의 가장 최신 버전을 사용하고 있는지 확인하세요.

해결 방법

참고: 다음 단계에서 클러스터 작성자는 cluster_creator입니다. 현재 클러스터에 대한 액세스 권한은 없지만 액세스가 필요한 사용자는 designated_user입니다.

클러스터 생성자의 IAM 사용자 또는 역할 식별

1.    Amazon EKS 클러스터를 구성할 기본 액세스 권한이 있는 클러스터 생성자에 대한 IAM 사용자 또는 역할을 식별하세요.

2.    클러스터를 생성한 후 클러스터 생성자가 권한을 부여할 IAM 사용자를 식별하세요. 클러스터 생성자를 식별하려면 AWS CloudTrail에서 CreateCluster API 호출을 검색하고 API 호출의 userIdentity 섹션을 확인하세요.

cluster_creator가 IAM 사용자인 경우 ConfigMap에 designated_user 추가

1.    로컬 호스트 머신에 kubectl을 설치합니다. 또는 kubectl 패키지가 설치된 전용 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스가 있는 경우 SSH를 사용하여 인스턴스에 연결합니다.

2.    kubectl이 설치된 동일한 호스트 머신에서 designated_user 자격 증명으로 AWS CLI를 구성합니다.

aws configure

3.    AWS CLI에서 다음 명령을 실행합니다.

aws sts get-caller-identity

출력은 designated_user에 대한 IAM 사용자 세부 정보를 반환해야 합니다.

예를 들어, 다음과 같습니다.

{
    "UserId": "XXXXXXXXXXXXXXXXXXXXX",
    "Account": "XXXXXXXXXXXX",
    "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/designated_user"
}

4.    기본 네임스페이스의 클러스터에서 실행 중인 포드를 나열합니다.

kubectl get pods --namespace default

출력에 다음이 표시됩니다. “error: You must be logged in to the server (Unauthorized).” 이 오류는 designated_user에게 Amazon EKS 클러스터에 액세스할 권한이 없음을 의미합니다.

5.    cluster_creator의 AWS 비밀 액세스 키 및 AWS 액세스 키 ID를 구성합니다.

AWS 관리 콘솔을 사용하여 클러스터를 생성한 경우 클러스터를 생성한 IAM 역할 또는 사용자를 식별합니다. kubectl이 설치된 호스트 머신에서 AWS CLI에서 cluster_creator IAM 사용자 또는 역할을 구성합니다.

aws configure

클러스터를 생성하는 데 eksctl을 사용한 경우 기본 또는 지정된 AWS CLI 프로파일 자격 증명을 사용하여 kubectl 명령을 실행하도록 AWS CLI를 구성합니다.

6.    cluster_creator가 클러스터에 액세스할 수 있는지 확인합니다.

kubectl get pods

모든 항목이 올바르게 설정되면 무단 오류 메시지가 표시되지 않습니다. 출력에서는 기본 네임스페이스에서 실행 중인 모든 포드를 나열해야 합니다. 출력에서 리소스를 찾을 수 없다고 표시되면 기본 네임스페이스에서 실행 중인 포드가 없는 것입니다.

7.    클러스터에 대한 액세스 권한을 designated_user에게 제공하려면 mapUsers 섹션을 aws-auth.yaml 파일에 추가합니다. 클러스터에 대한 IAM 사용자 및 역할 액세스 활성화aws-auth.yaml 파일 예제를 참조하세요.

8.    7단계에 나온 aws-auth.yaml 파일의 mapUsers 섹션에 designated_user를 추가한 다음, 파일을 저장합니다.

9.    클러스터의 RBAC 구성에 ConfigMap을 적용한다.

kubectl apply -f aws-auth.yaml

10.    designated_user의 자격 증명을 사용하도록 AWS CLI 구성을 다시 변경합니다.

aws configure

11.    designated_user가 클러스터에 액세스할 수 있는지 확인합니다.

kubectl get pods

모든 항목이 올바르게 설정되면 무단 오류 메시지가 표시되지 않습니다. 출력에는 기본 네임스페이스에서 실행 중인 모든 포드가 나열됩니다. 출력에서 리소스를 찾을 수 없다고 표시되면 기본 네임스페이스에서 실행 중인 포드가 없는 것입니다.

cluster_creator가 IAM 역할인 경우 ConfigMap에 designated_user 추가

이전 단계에서는 cluster_creator 자격 증명을 사용하여 designated_user에게 액세스 권한을 제공했습니다. 하지만 IAM 사용자 대신 IAM 역할에 의해 클러스터가 생성된 경우에는 사용할 수 있는 자격 증명이 없습니다. 이 경우 클러스터를 생성한 IAM 역할을 맡아 designated_user에게 액세스 권한을 제공해야 합니다. 클러스터 생성자가 IAM 역할이 아닌 경우 다음 단계를 완료할 필요가 없습니다.

참고: 다음 단계에서 assume_role_usercluster_creator 역할을 맡은 사용자입니다. 현재 클러스터에 대한 액세스 권한은 없지만 액세스가 필요한 사용자는 designated_user입니다.

designated_user에게 액세스 권한을 제공할 수 있도록 IAM 역할을 맡아 aws-auth ConfigMap을 편집하려면 다음 단계를 완료하세요.

1.    assume_role_user의 IAM 사용자 세부 정보를 표시합니다.

aws sts get-caller-identity

2.    assume_role_user가 클러스터에 액세스할 수 있는지 확인합니다.

kubectl get pods

출력에 다음 오류가 표시됩니다. “error: You must be logged in to the server (Unauthorized).” 이 오류는 assume_role_user에게 Amazon EKS 클러스터를 구성할 권한이 없음을 의미합니다.

3.    assume_role_usercluster_creator 역할을 맡도록 허용합니다.

aws sts assume-role --role-arn arn:aws:iam:11122223333:role/cluster_creator --role-session-name test

출력에는 assume_role_user에 대한 임시 IAM 자격 증명이 표시됩니다.

4.    임시 IAM 자격 증명을 사용하여 AWS_ACCESS_KEY_ID, AWS_SESSION_TOKENAWS_SECRET_ACCESS_KEY 환경 변수를 설정합니다.

예를 들어, 다음과 같습니다.

export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SESSION_TOKEN=EXAMPLETOKEN
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

이제 AWS CLI는 환경 변수에 설정된 자격 증명의 순위를 설정하고 이를 사용하여 AWS 서비스를 호출합니다.

5.    AWS CLI가 cluster_creator에 대해 수임된 역할을 사용하는지 확인합니다.

aws sts get-caller-identity

6.    클러스터에 대한 액세스 권한을 designated_user에게 제공하려면 mapUsers 섹션을 aws-auth.yaml 파일에 추가합니다. 클러스터에 대한 IAM 사용자 및 역할 액세스 활성화aws-auth.yaml 파일 예제를 참조하세요.

7.    6단계에 나온 aws-auth.yaml 파일의 mapUsers 섹션에 designated_user를 추가한 다음, 파일을 저장합니다.

8.    새 구성을 Amazon EKS 클러스터의 RBAC 구성에 적용합니다.

kubectl apply -f aws-auth.yaml

9.    다음 환경 변수를 설정 해제합니다.

unset AWS_ACCESS_KEY_ID
unset AWS_SESSION_TOKEN
unset AWS_SECRET_ACCESS_KEY

10.    designated_user의 IAM 사용자 세부 정보를 표시합니다.

aws sts get-caller-identity

11.    designated_user가 클러스터에 액세스할 수 있는지 확인합니다.

kubectl get pods

모든 항목이 올바르게 설정되면 무단 오류 메시지가 표시되지 않습니다. 출력에는 기본 네임스페이스에서 실행 중인 모든 포드가 나열됩니다. 출력에서 리소스를 찾을 수 없다고 표시되면 기본 네임스페이스에서 실행 중인 포드가 없는 것입니다.

참고: eksctl을 사용하는 경우 Weaveworks 웹 사이트에서 IAM 사용자 및 역할 관리의 해결 방법을 고려하세요.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?