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

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

해결 방법

사전 조건

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

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

클러스터 관리자 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)에서 사용하는 아이덴티티와 다를 수 있습니다. 식별된 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인 경우 형식이 Prerequisites(사전 조건) 섹션에서 가져온 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 사용자 또는 역할 추가

kubectl 또는 eksctl 도구를 선택하여 aws-auth ConfigMap을 편집하기 전에 먼저 1단계를 완료해야 합니다. 그런 다음 kubectl을 사용해 2~4단계에 따라 편집합니다. 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 아이덴티티로 파일을 실행합니다. 클러스터를 생성한 아이덴티티에는 항상 클러스터 액세스 권한이 있습니다.

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

또는

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

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

다음 정보를 고려하세요.

  • system:masters는 슈퍼 사용자 액세스를 통해 모든 리소스에 대한 모든 작업을 수행할 수 있습니다. 이는 프로덕션 환경에 대한 모범 사례가 아닙니다.
  • 부여된 권한을 최소화하는 것이 가장 좋습니다. 특정 네임스페이스에만 액세스할 수 있는 역할을 만들어 보세요. 자세한 내용은 Kubernetes 웹사이트에서 Using RBAC Authorization(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.    Amazon EKS 콘솔을 엽니다.

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

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"

특정 네임스페이스에 대한 오류가 표시되지 않습니다.

오류 메시지를 해결하려면 Compute(컴퓨팅) 탭에서 노드를 볼 수 없거나 Resources(리소스) 탭에서 아무 것도 볼 수 없으며, AWS Management Console에서 오류가 발생합니다.를 참조하세요.


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

관련 콘텐츠