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 권한이 없음을 나타냅니다. AWS Management Console에서 Kubernetes 리소스를 보려면 AWS IAM ID를 Amazon EKS 클러스터의 aws-auth ConfigMap에 매핑해야 합니다. 자세한 내용을 보려면 Kubernetes 웹사이트에서 RBAC 권한 사용을 참조합니다.
Amazon EKS 클러스터를 생성하면 클러스터의 RBAC 구성에서 IAM ID에 system:masters 권한이 자동으로 부여됩니다. 이를 통해 Amazon EKS 콘솔을 통해 Kubernetes 리소스를 볼 수 있습니다. 또한 Kubernetes 내에서 aws-auth ConfigMap을 편집할 수 있고, 추가 AWS 사용자 또는 역할에 클러스터와 상호 작용할 수 있는 권한을 부여할 수 있습니다. AWS Management Console은 IAM을 사용해 권한을 부여하고 EKS 클러스터는 Kubernetes RBAC 시스템을 사용합니다. 클러스터의 aws-auth ConfigMap은 IAM ID를 클러스터 RBAC ID와 연결하기 때문에 aws-auth ConfigMap은 IAM ID를 Kubernetes ID와 연결합니다.
해결 방법
사전 요구 사항
상황에 따라 다음 정보를 수집하세요.
관리자가 아닌 사용자 또는 역할
클러스터 관리자 IAM 사용자 또는 역할이 아니고 Amazon EKS 콘솔에서 가시성이 필요한 경우 다음 단계를 완료하세요.
- AWS Management Console 사용자의 IAM 자격 증명(ARN) 얻기 AWS IAM Authenticator는 ConfigMap에서 사용되는 역할 ARN의 경로를 허용하지 않습니다. IAM 역할인 경우 다음 ARN 형식을 사용하세요.
arn:aws:iam::111122223333:role/example
**참고:**다음 형식에는 불필요한 정보가 포함되어 있으므로 사용하지 마세요.
arn:aws:iam::111122223333:role/my-team/developers/example
- 클러스터 관리자에게 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 사용자 또는 역할을 식별합니다. 이 IAM ID는 AWS Command Line Interface(AWS CLI)에서 사용하는 ID와 다를 수 있습니다. IAM 사용자 또는 역할이 AWS Management Console에서 모든 클러스터의 노드와 워크로드를 볼 수 있는 권한이 있는지 확인합니다. 그리고 다음 옵션 중 하나를 사용하여 ARN에 액세스합니다.
참고: AWS CLI 명령을 실행할 때 오류가 발생하면, AWS CLI 오류 문제 해결 을 참조하세요 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.
AWS CLI
IAM 사용자 또는 역할에 대한 AWS CLI의 액세스 권한이 있는 경우, 다음 명령을 실행합니다.
aws sts get-caller-identity --query Arn
CloudShell
AWS CLI 액세스 권한이 없는 경우, AWS CloudShell에서 다음 명령을 실행합니다.
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:aws:sts::123456:role/MyRole과 연결됩니다. IAM 콘솔에서 이 값을 확인하세요.
클러스터 생성자 식별
클러스터를 구성할 기본 권한을 가진 클러스터 생성자 또는 관리자 역할을 찾으려면, AWS CloudTrail에서 CreateCluster API 호출을 검색하세요. 그런 다음, API 호출의 userIdentity 섹션을 확인합니다. CloudTrail에서 클러스터 생성자 이름을 찾았지만 삭제된 경우, 동일한 이름으로 새 IAM 사용자 또는 역할을 다시 생성하세요. 이 새 IAM ID는 원래 클러스터 생성자와 동일한 ARN을 가지므로 클러스터에 대한 동일한 관리자 액세스 권한을 상속합니다.
참고: CloudTrail은 90일간의 기록만 제공합니다.
Kubernetes RBAC에 새 IAM 사용자 또는 역할 추가
Kubernetes RBAC에 새 IAM 사용자 또는 역할을 추가하려면 먼저 클러스터 생성자 IAM을 사용하도록 AWS CLI를 구성해야 합니다. AWS CLI가 IAM ID로 올바르게 구성되었는지 확인하려면 다음 명령을 실행합니다.
$ aws sts get-caller-identity
출력은 IAM 사용자 또는 역할의 ARN을 반환합니다. 다음 예를 참고하세요.
{
"UserId": "XXXXXXXXXXXXXXXXXXXXX",
"Account": "XXXXXXXXXXXX",
"Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser"
}
그리고 kubectl 또는 eksctl을 사용해 aws-auth ConfigMap을 수정합니다.
kubectl
-
kubectl을 사용해 aws-auth ConfigMap을 수정하려면 다음 kubectl 명령을 실행해 클러스터에 액세스하세요.
$ kubectl edit configmap aws-auth -n kube-system
콘솔은 현재 ConfigMap을 보여줍니다. 클러스터에 연결할 수 없으면 kubeconfig 파일을 업데이트해 보세요. 클러스터를 생성하는 ID에는 클러스터 액세스 권한이 있으므로 클러스터에 액세스할 수 있는 IAM 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 서버 엔드포인트에 연결하세요.
-
텍스트 편집기에서 클러스터 생성자 또는 관리자로 aws-auth ConfigMap을 편집하려면 다음 명령을 실행하세요.
$ kubectl edit configmap aws-auth -n kube-system
-
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의 경우 수퍼유저로 액세스하면 모든 리소스에서 어떤 작업이든 할 수 있기 때문에 프로덕션 환경에서는 system:masters를 사용하지 않는 것이 좋습니다. 부여된 권한을 최소화하는 것이 좋습니다. 특정 네임스페이스에만 액세스할 수 있는 역할을 생성하세요. 필수 권한에서 특정 네임스페이스에서 Kubernetes 리소스 보기 섹션을 검토하세요.
eksctl
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 클러스터에 대한 액세스 권한 확인
다음 단계를 완료합니다.
- Amazon EKS 콘솔을 엽니다.
- 탐색 창에서 클러스터를 선택합니다.
- 클러스터를 선택합니다.
- 개요 및 워크로드 탭에서 오류를 확인합니다.
특정 네임스페이스로 구성한 경우, Amazon EKS 콘솔에 다음 오류 메시지가 표시됩니다.
"오류 Deploymentsdeployments.apps 로딩이 금지됨: 사용자 “xxxxxx”는 클러스터 범위 또는 네임스페이스 “xxxxxxx”의 API 그룹 “앱”에 리소스 “배포”를 확인할 수 있습니다.
특정 네임스페이스에 대해서는 오류가 나타나지 않습니다. 오류 메시지 문제를 해결하려면, 컴퓨팅 탭에 노드가 표시되지 않거나 리소스 탭에 아무 것도 표시되지 않고, AWS Management Console에서 오류가 발생합니다를 참조하세요.