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

6분 분량
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) 사용자 또는 역할과 함께 AWS Management Console을 사용할 때 이 오류가 발생할 수 있습니다. 오류는 IAM 사용자 또는 역할에 Kubernetes API에 액세스하는 데 필요한 RBAC(Kubernetes 웹사이트 제공) 권한이 없음을 나타냅니다. AWS Management Console에서 Kubernetes 리소스를 보려면 AWS IAM 사용자 또는 역할을 Amazon EKS 클러스터의 aws-auth ConfigMap에 매핑해야 합니다.

Amazon EKS 클러스터를 생성하면 클러스터의 RBAC 구성에서 IAM 사용자 또는 역할에 system:masters 권한이 자동으로 부여됩니다. 이를 통해 Amazon EKS 콘솔을 통해 Kubernetes 리소스를 볼 수 있습니다. 또한 Kubernetes 내에서 aws-auth ConfigMap을 편집할 수 있고, 추가 AWS 사용자 또는 역할에 클러스터와 상호 작용할 수 있는 권한을 부여할 수 있습니다.

두 가지 인증 시스템이 사용되고 있습니다. AWS Management Console은 IAM을 사용합니다. EKS 클러스터는 Kubernetes RBAC 시스템(Kubernetes 웹사이트 제공)을 사용합니다. 클러스터의 aws-auth ConfigMap은 IAM ID(사용자 또는 역할)를 클러스터 RBAC ID와 연결합니다. 즉, aws-auth ConfigMap은 IAM ID를 Kubernetes ID와 연결합니다.

해결 방법

사전 요구 사항

시작하기 전에 다음 정보를 수집하세요.

관리자가 아닌 사용자 또는 역할

클러스터 관리자 IAM 사용자 또는 역할이 아니고 Amazon EKS 콘솔에서 가시성이 필요한 경우 다음 단계를 완료하세요.

1.    AWS Management Console 사용자의 IAM 자격 증명 Amazon 리소스 이름(ARN)을 가져옵니다.

IAM 역할인 경우 다음 ARN 형식을 사용하세요.

arn:aws:iam::111122223333:role/example

중요: 다음 형식은 사용하지 마세요.

arn:aws:iam::111122223333:role/my-team/developers/example

2.    클러스터 관리자에게 ARN을 제공하고 관리자에게 사용자를 aws-auth ConfigMap에 추가하도록 요청합니다.

참고: ARN에 액세스하는 방법에 대한 단계는 AWS Management Console 사용자의 IAM 자격 증명 ARN 식별 섹션을 참조하세요.

클러스터 생성자 또는 클러스터 관리자 사용자 또는 역할

클러스터 생성자 또는 클러스터 관리자인 경우, kubectl 도구 또는 eksctl 도구를 사용하여 aws-auth ConfigMap을 관리할 수 있습니다.

참고: 기본적으로 system:masters 그룹은 cluster-admin이라는 clusterrole에 바인딩됩니다. 이 clusterrole은 PolicyRule에서 리소스 및 동사에 와일드카드(“*”)를 사용합니다. 즉, system:masters 그룹에 할당된 모든 사용자는 클러스터 내 모든 Kubernetes 리소스에 대한 전체 액세스 권한을 가집니다.

클러스터 생성자와 클러스터 관리자가 관리자 상태를 식별하는 방법에 대한 자세한 단계는 클러스터 생성자 식별 섹션을 참조하세요.

AWS Management Console 사용자의 IAM 자격 증명(ARN) 식별

콘솔에 액세스하는 데 사용하는 IAM 사용자 또는 역할을 식별합니다. 이는 AWS Command Line Interface(AWS CLI)에서 사용하는 ID와 다를 수 있습니다. 식별된 IAM 사용자 또는 역할이 AWS Management Console에서 모든 클러스터의 노드와 워크로드를 볼 수 있는 권한이 있는지 확인합니다. 그런 다음, IAM 자격 증명의 ARN을 가져옵니다. 다음 옵션 중 하나를 사용하여 ARN에 액세스합니다.

AWS CLI 사용

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

aws sts get-caller-identity --query Arn

CloudShell 시작

AWS CLI 액세스 권한이 없는 경우, 다음 명령을 실행합니다.

aws sts get-caller-identity --query Arn

출력은 다음과 비슷합니다.

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

-또는-

"arn:aws:iam::111122223333:user/testuser"

참고:

  • IAM 역할 ARN의 경우, 형식이 필수 조건 섹션에서 가져온 ARN 형식과 비슷한지 확인하세요.
  • ARN에 assumed-role이 포함된 경우, 해당 역할의 ARN을 가져와야 합니다. 예를 들어, arn:aws:sts::123456:assumed-role/MyRole/aadams의 위임된 역할 ARN은 ARN arn:aws:sts::123456:role/MyRole과 연결됩니다. IAM 콘솔에서 이 값을 확인할 수 있습니다.

클러스터 생성자 식별

클러스터를 구성할 기본 권한을 가진 클러스터 생성자 또는 관리자 역할을 찾으려면, AWS CloudTrail에서 CreateCluster API 호출을 검색하세요. 그런 다음, API 호출의 userIdentity 섹션을 확인합니다.

팁: CloudTrail에서 클러스터 생성자 이름을 찾았지만 삭제된 경우, 동일한 이름으로 새 IAM 사용자 또는 역할을 다시 생성하세요. 이 새 IAM 개체는 원래 클러스터 생성자와 동일한 ARN을 가지므로 클러스터에 대한 동일한 관리자 액세스 권한을 상속합니다.

**참고:**CloudTrail은 90일간의 기록만 제공합니다.

kubectl 또는 eksctl을 사용하여 Kubernetes RBAC에 새 IAM 사용자 또는 역할을 추가합니다.

aws-auth ConfigMap을 편집하기 위해 kubectl 또는 eksctl 도구를 선택하기 전에 반드시 1단계를 완료해야 합니다. 그런 다음, 2~4단계를 따라 kubectl로 편집합니다. eksctl을 사용하여 편집하려면 5단계로 진행하세요.

1.    클러스터 생성자 또는 관리자를 식별한 후, 클러스터 생성자 IAM을 사용하도록 AWS CLI를 구성합니다. 자세한 내용은 구성 기본 사항을 참조하세요.

AWS CLI가 IAM 엔티티로 올바르게 구성되었는지 확인하려면, 다음 명령을 실행합니다.

$ aws sts get-caller-identity

출력은 IAM 사용자 또는 역할의 ARN을 반환합니다. 예를 들면, 다음과 같습니다.

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

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

2.     kubectl을 사용하여 aws-auth ConfigMap을 수정하려면 클러스터에 대한 액세스 권한이 있어야 합니다. 다음 kubectl 명령을 실행합니다.

$ kubectl edit configmap aws-auth -n kube-system

콘솔은 현재 configMap을 보여줍니다.

클러스터에 연결할 수 없다면, kubeconfig 파일을 업데이트해 보세요. 클러스터에 액세스할 수 있는 IAM ID로 파일을 실행합니다. 클러스터를 생성한 ID에는 항상 클러스터 액세스 권한이 있습니다.

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

참고: region_code를 EKS 클러스터 AWS 지역 코드로 바꾸고 my_cluster를 EKS 클러스터 이름으로 바꾸세요.

kubectl 커맨드는 EKS 서버 엔드포인트에 연결해야 합니다. API 서버 엔드포인트가 공개인 경우, 엔드포인트에 연결하려면 인터넷에 액세스할 수 있어야 합니다. API 서버 엔드포인트가 프라이빗인 경우, EKS 클러스터가 실행되는 VPC 내에서 EKS 서버 엔드포인트에 연결해야 합니다.

3.    텍스트 편집기에서 클러스터 생성자 또는 관리자로 aws-auth ConfigMap을 편집하려면, 다음 명령을 실행합니다.

$ kubectl edit configmap aws-auth -n kube-system

4.   IAM 사용자 또는 역할 추가:

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

-또는-

mapRoles에 IAM 역할을 추가합니다. 예를 들면, 다음과 같습니다.

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

다음 정보를 입력합니다.

  • system:masters 그룹은 슈퍼 사용자 액세스를 통해 어느 리소스에나 원하는 작업을 수행하도록 허용합니다. 이는 프로덕션 환경에서는 모범 사례가 아닙니다.
  • 부여된 권한을 최소화하는 것이 가장 좋습니다. 특정 네임스페이스에만 액세스할 수 있는 역할을 만드는 것을 고려해 보세요. 자세한 내용을 보려면, Kubernetes 웹사이트에서 RBAC 권한 사용을 참조하세요. 또한 필수 권한을 참조하고 특정 네임스페이스의 Kubernetes 리소스 보기 섹션에서 Amazon EKS 콘솔의 제한된 액세스에 대한 예를 살펴보세요.

5.    eksctl 도구를 사용하면, 다음 명령을 사용하여 aws-auth ConfigMap을 업데이트할 수 있습니다.

eksctl create iamidentitymapping --cluster your_cluster_Name --region=your_region --arn YOUR_IAM_ARN <arn:aws:iam::123456:role testing=""> --group system:masters --username admin</arn:aws:iam::123456:role>

참고: your_cluster_Name을 EKS 클러스터 이름으로, your_region을 EKS 클러스터 리전으로, YOUR_IAM_ARN을 IAM 역할로 바꾸거나 ARN을 사용하세요.

Amazon EKS 클러스터에 대한 액세스 권한 확인

1.    아마존 EKS 콘솔을 엽니다.

2.    Amazon EKS 섹션의 탐색 창에서 클러스터를 선택합니다.

3.    클러스터를 선택합니다.

4.    개요워크로드 탭에서 오류를 확인합니다.

특정 네임스페이스로 구성한 경우, Amazon EKS 콘솔에 다음 오류 메시지가 표시됩니다.

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

특정 네임스페이스에 대해서는 오류가 나타나지 않습니다.

오류 메시지 문제를 해결하려면, 컴퓨팅 탭에 노드가 표시되지 않거나 리소스 탭에 아무 것도 표시되지 않고, AWS Management Console에서 오류가 발생합니다를 참조하세요.


AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음

관련 콘텐츠