내용으로 건너뛰기

Amazon EKS에서 "Your current user or role does not have access to Kubernetes objects on this EKS cluster" 오류를 해결하려면 어떻게 해야 합니까?

5분 분량
0

Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에 액세스하려고 했습니다. 하지만 "Your current user or role does not have access to Kubernetes objects on this EKS cluster" 오류 메시지를 받았습니다.

간략한 설명

AWS Identity and Access Management(IAM) ID에 Kubernetes에 대한 역할 기반 액세스 제어(RBAC) 권한이 없는 경우 액세스 오류가 발생합니다. Kubernetes API에 액세스하려면 RBAC 권한이 있어야 합니다. RBAC에 대한 자세한 내용은 Kubernetes 웹 사이트의 RBAC 권한 부여 사용을 참조하십시오. AWS Management Console에서 Kubernetes 리소스를 보려면 IAM ID를 Amazon EKS 클러스터의 aws-auth ConfigMap에 매핑해야 합니다.

중요: 다음 해결 방법은 RBAC 권한에 액세스하는 Kubernetes 접근 방식에 맞춰 aws-auth ConfigMap을 사용합니다. 기존 aws-auth ConfigMap 항목을 액세스 항목으로 마이그레이션하는 것이 가장 좋습니다.

해결 방법

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

클러스터의 생성자 또는 관리자 사용자인 경우 kubectl 또는 eksctl을 사용하여 aws-auth ConfigMap을 업데이트할 수 있습니다. RBAC 구성에 IAM 사용자 또는 역할 추가를 진행합니다. 그렇지 않으면 클러스터 액세스가 필요한 IAM ID의 Amazon 리소스 이름(ARN)을 가져와야 합니다.

클러스터 액세스가 필요한 IAM ID의 ARN 가져오기

클러스터에 액세스해야 하는 IAM 사용자 또는 역할을 식별합니다.

참고: IAM ID는 AWS CLI를 실행할 때 사용하는 IAM ID와 다를 수 있습니다. Kubernetes용 AWS IAM 인증자는 aws-auth ConfigMap에서 사용하는 역할 ARN의 경로를 허용하지 않습니다. 자세한 내용은 GitHub 웹 사이트에서 aws-iam-authenticator를 참조하십시오.

IAM 사용자 또는 역할에 대한 AWS CLI 액세스 권한이 있는 경우 다음 get-caller-identity AWS CLI 명령을 실행합니다.

aws sts get-caller-identity --query "Arn"

참고: AWS CLI 액세스 권한이 없는 경우 Arn에서 따옴표를 제거하고 AWS CloudShell에서 위 명령을 실행하십시오.

출력 예시:

"arn:aws:iam::111122223333:role/testrole"

명령 출력에 IAM 역할 ARN이 표시되면 올바른 ARN 형식(arn:aws:iam::111122223333:role/example)인지 확인합니다.

ARN에 수임된 역할이 포함된 경우 RBAC 권한을 부여하려는 IAM 역할의 ARN을 가져와야 합니다. 예를 들어, arn:aws:sts::123456:assumed-role/MyRole/your_username의 위임된 역할 ARN은 arn:aws:sts::123456:role/MyRole의 역할 ARN과 연결됩니다.

클러스터 관리자에게 ARN을 제공한 다음, 관리자에게 역할의 ARN을 aws-auth ConfigMap에 추가하도록 요청합니다. aws-auth ConfigMap에 ARN을 추가하는 단계는 RBAC 구성에 IAM 사용자 또는 역할 추가를 참조하십시오.

IAM 사용자 또는 역할이 AWS Management Console에서 모든 클러스터의 노드와 워크로드를 볼 수 있는 권한이 있는지 확인합니다.

클러스터 생성자 식별

중요: 클러스터 생성과 관련된 IAM 엔터티만 클러스터 리소스에 액세스할 수 있습니다. 클러스터 생성자만 aws-auth ConfigMap을 편집하고 다른 IAM 엔터티에 대한 액세스 권한을 제공할 수 있습니다.

클러스터를 구성할 수 있는 기본 권한이 있는 클러스터 생성자 또는 관리자 역할을 식별합니다. 먼저 CreateCluster API 직접 호출에 대한 AWS CloudTrail 이벤트 기록을 확인합니다. 그런 다음, userIdentity 필드를 확인합니다.

클러스터 생성자의 이름이 CloudTrail에서 삭제됨으로 표시되면 동일한 이름으로 새 IAM 사용자 또는 역할을 생성하십시오. 새 IAM ID의 ARN은 원래 클러스터 생성자와 동일하므로 새 ID는 클러스터에 대한 동일한 관리자 액세스 권한을 상속합니다.

참고: CloudTrail은 90일이 지난 클러스터에 대한 클러스터 생성자의 이름을 제공하지 않습니다.

AWS CLI를 사용하여 클러스터 생성자의 IAM ID를 가져오려면 다음 get-caller-identity 명령을 실행합니다.

aws sts get-caller-identity

출력 예시:

{    
    "UserId": "AIDACKCEVSQ6C2EXAMPLE",
    "Account": "111122223333",
    "Arn": "arn:aws:iam:: 111122223333:user/testuser"
}

RBAC 구성에 IAM 사용자 또는 역할 추가

eksctl을 설치한 경우 다음 eksctl create iamidentitymapping 명령을 실행하여 aws-auth ConfigMap을 업데이트하십시오.

eksctl create iamidentitymapping --cluster your_cluster_name --region=your_region --arn your_IAM_ARN --group system:masters --username admin

참고: your_cluster_name을 EKS 클러스터 이름으로, your_region을 AWS 리전으로, your_IAM_ARN을 IAM 역할 또는 사용자 ARN으로 바꾸십시오.

kubectl을 사용하여 aws-auth ConfigMap을 업데이트하려면 다음 단계를 완료하십시오.

  1. 다음 명령을 실행하여 기본 텍스트 편집기에서 aws-auth ConfigMap을 엽니다.

    kubectl edit configmap aws-auth -n kube-system

    참고: 콘솔은 현재 ConfigMap을 보여줍니다. 클러스터에 연결할 수 없으면 kubeconfig 파일을 업데이트하십시오. 클러스터를 생성하는 IAM ID는 항상 클러스터에 액세스할 수 있습니다.

  2. 다음 update-kubeconfig 명령을 실행하여 클러스터에 연결할 수 있도록 kubectl을 구성합니다.

    aws eks update-kubeconfig --region region_code --name your_cluster_name

    참고: region_code를 리전으로 바꾸고 your_cluster_name을 클러스터 이름으로 바꾸십시오. kubectl 명령은 Amazon EKS 서버 엔드포인트에 연결해야 합니다. API 서버 엔드포인트가 퍼블릭인 경우, 엔드포인트에 연결하려면 인터넷에 액세스할 수 있어야 합니다. 엔드포인트가 프라이빗인 경우 클러스터가 실행 중인 가상 프라이빗 클라우드(VPC)에서 서버 엔드포인트에 연결합니다.

  3. 열리는 텍스트 편집기에서 다음 코드를 입력하여 IAM 사용자를 추가합니다.

    mapUsers: |  
        - userarn: arn:aws:iam::111122223333:user/testuser
        username: testuser
        groups:
        - system:bootstrappers
        - system:nodes

    참고: 111122223333을 AWS 계정 ID로 바꾸고 testuser를 IAM 사용자로 바꾸십시오.

    또는 다음 코드를 입력하여 IAM 역할을 추가합니다.

    mapRoles: |  
        - rolearn: arn:aws:iam::111122223333:role/testrole
        username: testrole
        groups:
        - system:bootstrappers
        - system:nodes

    참고: 111122223333을 계정 ID로 바꾸고 testrole을 IAM 역할로 바꾸십시오.

클러스터를 만들면 IAM ID는 클러스터의 RBAC 구성에서 system:masters 권한을 자동으로 받습니다. 기본적으로 system:masters 그룹은 cluster-admin 클러스터 역할에 바인딩됩니다.

프로덕션 환경에서 system:masters 권한을 사용하는 것은 모범 사례가 아닙니다. system:masters 권한은 사용자에게 클러스터의 모든 Kubernetes 리소스에 대한 전체 액세스 권한을 부여합니다. 대신 필요한 권한만으로 특정 네임스페이스에만 액세스할 수 있는 역할을 만드는 것이 가장 좋습니다.

클러스터에 대한 액세스 확인

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

  1. Amazon EKS 콘솔을 엽니다.
  2. 탐색 창에서 클러스터를 선택합니다.
  3. 해당 클러스터를 선택합니다.
  4. 개요워크로드 탭에서 오류를 확인합니다.

오류가 표시되면 IAM 문제 해결을 참조하십시오. 예를 들어 특정 네임스페이스에 대해 RBAC 액세스를 구성한 경우 다음과 같은 오류 메시지가 표시될 수 있습니다.

"Error loading Deployments : deployments.apps is forbidden: User "AIDACKCEVSQ6C2EXAMPLE" cannot list resource "deployments" in API group "apps" at the cluster scope or in the namespace "EXAMPLENAMESPACE"

네임스페이스 오류를 해결하려면 적절한 역할 또는 클러스터 역할 바인딩으로 RBAC 역할이나 클러스터 역할을 만들거나 업데이트해야 합니다. 자세한 내용은 Kubernetes 웹 사이트에서 RoleBinding 및 ClusterRoleBinding을 참조하십시오.

AWS 공식업데이트됨 6달 전