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

6분 분량
0

kubectl 명령을 사용하여 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에 액세스하면 "error: You must be logged in to the server (Unauthorized)" 오류 메시지가 표시됩니다.

간략한 설명

AWS Identity and Access Management(IAM) 사용자 또는 역할이 aws-iam-authenticator가 사용하는 클러스터와 다른 Amazon EKS 클러스터를 생성하는 경우 권한 없음 오류 메시지가 표시됩니다. 이 문제를 해결하려면 Amazon EKS 클러스터의 역할 기반 액세스 제어(RBAC)를 구성하여 IAM 엔티티를 승인하십시오. RBAC에 대한 자세한 내용은 Kubernetes 웹사이트의 RBAC 인증 사용을 참조하십시오.

Amazon EKS 클러스터 생성자만 클러스터를 구성할 수 있는 system:masters 권한을 가지고 있습니다. system:masters 권한을 다른 IAM 사용자 및 역할로 확장하는 방법에는 두 가지가 있습니다.

  • 클러스터 생성자 자격 증명을 가정해 보겠습니다. 그런 다음 aws-auth ConfigMapmapRoles 섹션에 IAM 역할을 추가합니다.
  • EKS 액세스 항목을 사용합니다.

중요: cluster_creatorConfigMap에 추가하지 않는 것이 좋습니다. ConfigMap을 잘못 구성하면 cluster_creator를 비롯한 모든 IAM 사용자와 역할이 Amazon EKS 클러스터에 영구적으로 액세스할 수 없게 될 수 있습니다. 기본적으로 cluster_creator는 자신이 생성한 클러스터에 대한 관리자 액세스 권한을 가지므로 cluster_createraws-auth ConfigMap에 추가할 필요가 없습니다.

참고: 다음 해결 방법에서 cluster_creator는 Amazon EKS에서 클러스터를 생성하는 IAM 엔터티입니다. 액세스 권한을 부여하는 사용자는 designated_user입니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 문제 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

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

Amazon EKS 클러스터를 구성할 수 있는 기본 액세스 권한을 가진 클러스터 생성자의 IAM 엔터티를 식별합니다. 클러스터 생성자를 식별하려면 AWS CloudTrail에서 CreateCluster API 호출을 검색한 다음 API 호출의 userIdentity 섹션을 확인하십시오.

그런 다음 클러스터를 생성한 후 권한을 부여하려는 IAM 엔터티를 식별합니다.

cluster_creator가 IAM 사용자일 때 aws-auth ConfigMap을 사용하여 클러스터 액세스 권한을 부여

다음 단계를 완료하십시오.

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

  2. kubectl이 설치된 호스트 머신에서 designated_user 자격 증명을 사용하여 AWS CLI를 구성합니다.

    aws configure
  3. get-caller-identity AWS CLI 명령을 실행합니다.

    aws sts get-caller-identity

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

    {  
        "UserId": "#####################",  
        "Account": "############",  
        "Arn": "arn:aws:iam::############:user/designated_user"  
    }
  4. 기본 네임스페이스의 클러스터에서 실행 중인 포드를 나열합니다.

    kubectl get pods --namespace default

    designated_user에게 Amazon EKS 클러스터에 액세스할 권한이 없기 때문에 출력에는 권한 없음 오류 메시지가 표시됩니다.

  5. cluster_creator의 AWS 액세스 키 ID와 AWS 비밀 액세스 키를 구성합니다.
    Amazon EKS 콘솔을 사용하여 클러스터를 생성한 경우 로컬 호스트 머신에서 AWS CLI의 cluster_creator IAM 사용자 또는 역할을 구성합니다.

    aws configure

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

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

    kubectl get pods

    권한 없음 오류 메시지가 표시되지 않으며, 출력에는 기본 네임스페이스에서 실행 중인 모든 포드가 나열됩니다. 출력에 리소스가 표시되지 않으면 기본 네임스페이스에서 실행 중인 포드가 없는 것입니다.

  7. designated_user에게 클러스터에 대한 액세스 권한을 부여하려면 aws-auth.yaml 파일에 mapUsers 섹션을 추가합니다. 자세한 내용은 Amazon EKS 클러스터에 IAM 보안 주체 추가를 참조하십시오.

  8. designated_useraws-auth.yaml 파일의 mapUsers 섹션에 추가한 다음 파일을 저장합니다.

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

    kubectl apply -f aws-auth.yaml
  10. designated_user의 자격 증명을 사용하도록 AWS CLI 구성을 다시 변경합니다.

aws configure
  1. designated_user가 클러스터에 액세스할 수 있는지 확인합니다.
kubectl get pods

권한 없음 오류 메시지가 표시되지 않으며, 출력에는 기본 네임스페이스에서 실행 중인 모든 포드가 나열됩니다. 출력에 리소스가 표시되지 않으면 기본 네임스페이스에서 실행 중인 포드가 없는 것입니다.

cluster_creator가 IAM 역할인 경우 aws-auth ConfigMap을 사용하여 클러스터 액세스 권한 부여

IAM 역할이 IAM 사용자 대신 클러스터를 생성한 경우 자격 증명을 사용할 수 없습니다. 대신 designated_user에 대한 액세스 권한을 제공하기 위해 클러스터를 생성한 IAM 역할을 맡아야 합니다.

다음 단계를 완료하십시오.

  1. get-caller-identity AWS CLI 명령을 실행하여 assume_role_user에 대한 IAM 사용자 세부 정보를 가져옵니다.

    aws sts get-caller-identity
  2. assume_role_user에게 클러스터에 대한 액세스 권한이 있는지 확인합니다.

    kubectl get pods

    designated_user에게 Amazon EKS 클러스터에 액세스할 권한이 없기 때문에 출력에는 권한 없음 오류 메시지가 표시됩니다.

  3. assume_role_user에게 cluster_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에게 클러스터에 대한 액세스 권한을 부여하려면 aws-auth.yaml 파일에 mapUsers 섹션을 추가합니다.

  7. designated_useraws-auth.yaml 파일의 mapUsers 섹션에 추가한 다음 파일을 저장합니다.

  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. get-caller-identity AWS CLI 명령을 실행하여 designated_user의 IAM 사용자 세부 정보를 가져옵니다.

aws sts get-caller-identity
  1. designated_user에게 클러스터에 대한 액세스 권한이 있는지 확인합니다.
kubectl get pods

권한 없음 오류 메시지가 표시되지 않으며, 출력에는 기본 네임스페이스에서 실행 중인 모든 포드가 나열됩니다. 출력에 리소스가 표시되지 않으면 기본 네임스페이스에서 실행 중인 포드가 없는 것입니다.

참고: eksctl을 사용하는 경우 자세한 내용은 eksctl 웹사이트의 IAM 사용자 및 역할 관리를 참조하십시오.

EKS 액세스 항목을 사용하여 IAM 사용자 및 역할에 클러스터 액세스 권한 부여

Amazon EKS는 액세스 항목에 세 가지 인증 모드를 지원합니다.

  • aws-auth ConfigMap만 사용하려면 CONFIG_MAP을 사용합니다.
  • EKS 액세스 입력 API와 aws-auth ConfigMap을 모두 사용하려면 API_AND_CONFIG_MAP을 사용합니다. 이 모드는 EKS 액세스 항목을 통한 인증의 우선시하며 기존 aws-auth 권한을 EKS 액세스 항목으로 마이그레이션해야 할 때 유용합니다.
  • EKS 액세스 입력 API만 사용하려면 API를 사용합니다.

자세한 내용은 IAM 사용자 및 역할에 Kubernetes API에 대한 액세스 권한 부여를 참조하십시오.

액세스 항목을 사용하여 클러스터에 구성하려면 클러스터 인증 모드를 EKS API 또는 EKS API 및 ConfigMap으로 설정합니다.

클러스터의 현재 인증 모드를 확인하려면 다음 단계를 완료하십시오.

  1. Amazon EKS 콘솔을 엽니다.
  2. 액세스 탭을 선택합니다.
  3. 액세스 구성에서 인증 모드 레이블을 확인합니다.

또는 describe-cluster 명령을 실행합니다.

aws eks describe-cluster --name example-cluster --query 'cluster.accessConfig.authenticationMode' --region exampleRegion

클러스터의 인증 모드가 EKS API 또는 EKS API 및 ConfigMap인 경우 액세스 항목을 사용하도록 클러스터를 구성할 수 있습니다. 그렇지 않은 경우 액세스 항목을 사용하도록 인증 모드 변경을 참조하십시오.

참고: CONFIG_MAP 인증 모드에서 API 모드로 전환할 수 있지만 API 또는 API_AND_CONFIG_MAP에서 CONFIG_MAP 모드로 전환할 수는 없습니다. 자세한 내용은 GitHub 웹사이트의 클러스터 액세스 관리자를 참조하십시오.

관련 정보

AWS CLI에서 IAM 역할 사용

EKS 액세스 항목을 사용하여 IAM 사용자에게 Kubernetes 액세스 권한 부여

기존 aws-auth ConfigMap 항목을 액세스 항목으로 마이그레이션

Amazon EKS 액세스 항목 API를 사용하여 EKS 클러스터에 대한 액세스 권한을 복구하려면 어떻게 해야 합니까?

AWS 공식
AWS 공식업데이트됨 5달 전