Amazon EKS의 “현재 사용자 또는 역할이 이 EKS 클러스터의 Kubernetes 객체에 액세스할 수 없습니다.”라는 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 7월 28일

Amazon Elastic Kubernetes Service(Amazon EKS)에 다음과 같은 오류가 나타납니다. “현재 사용자 또는 역할이 이 EKS 클러스터의 Kubernetes 객체에 액세스할 수 없습니다.“

간략한 설명

AWS Identity and Access Management(IAM) 사용자 또는 역할로 AWS 관리 콘솔을 사용할 때 이 오류가 발생합니다. 특히 이 오류는 Amazon EKS 클러스터의 aws-auth ConfigMap에 없는 IAM 사용자 또는 역할에서 발생합니다.

Amazon EKS 클러스터를 만들면 IAM 사용자 또는 역할에 클러스터의 RBAC 구성에서 system:masters 권한이 자동으로 부여됩니다. 예를 들어 IAM 사용자 또는 역할은 클러스터를 생성하는 연동 사용자일 수 있습니다. aws-auth ConfigMap에 속하지 않는 IAM 사용자 또는 역할을 사용하여 Amazon EKS 콘솔에 액세스하면 Kubernetes 워크로드를 볼 수 없습니다. 클러스터에 대한 개요 세부 정보도 볼 수 없습니다.

추가 AWS 사용자 또는 역할에 클러스터와 상호 작용할 수 있는 권한을 부여하려면 Kubernetes 내에서 aws-auth ConfigMap을 편집해야 합니다.

해결 방법

참고: AWS CLI(AWS 명령줄 인터페이스) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.

IAM 사용자 또는 역할에 대한 권한 구성

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

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

2.    권한이 필요한 IAM 사용자 또는 역할을 식별합니다.

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

aws-auth ConfigMap을 사용하여 IAM 사용자 또는 역할을 RBAC 역할 및 그룹에 매핑

중요: Amazon EKS API 서버에 연결하기 전에 AWS CLI의 최신 버전을 설치하고 구성합니다.

1.    AWS CLI 사용자 또는 역할의 구성을 가져옵니다.

$ aws sts get-caller-identity

결과는 IAM 사용자 또는 역할의 Amazon 리소스 이름(ARN)을 반환합니다. 예:

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

2.    ARN이 클러스터를 구성할 기본 액세스 권한이 있는 클러스터 생성자 또는 관리자와 일치하는지 확인합니다. ARN이 클러스터 생성자 또는 관리자와 일치하지 않으면 클러스터 생성자 또는 관리자에게 문의하여 aws-auth ConfigMap을 업데이트합니다.

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

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

4.    IAM 사용자 또는 역할을 추가하려면 다음 단계 중 하나를 완료하세요.

IAM 사용자를 mapUsers에 추가합니다. 예:

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:bootstrapperssystem:nodes 대신 system:masters를 추가합니다. 자세한 내용은 Kubernetes 웹사이트의 기본 역할 및 역할 바인딩을 참조하세요.

5.    Amazon EKS 콘솔에서 오류를 확인합니다. 예:

Error loading Namespaces
namespaces is forbidden: User "testuser" cannot list resource "namespaces" in API group "" at the cluster scope

위의 오류가 표시되면 클러스터 역할 및 클러스터 역할 바인딩 만들기 또는 역할 및 역할 바인딩 만들기 섹션으로 건너뜁니다.

클러스터 역할 및 클러스터 역할 바인딩 만들기 또는 역할 및 역할 바인딩 만들기

ConfigMap에서 IAM 계정 또는 역할이 매핑된 Kubernetes 사용자 또는 그룹은 역할 바인딩의 주체여야 합니다. 사용자 또는 그룹도 클러스터 역할 바인딩의 주체가 될 수 있습니다. 즉, Kubernetes 리소스를 볼 수 있는 권한을 가진 Kubernetes 역할 또는 클러스터 역할에 바인딩된 역할 바인딩 또는 클러스터 역할 바인딩입니다. 사용자 또는 그룹에 필요한 권한이 없는 경우 “권한 없음: Kubernetes 클러스터에 액세스할 수 있는지 확인”이라는 오류가 나타날 수 있습니다. 역할 및 바인딩을 만들려면 Kubernetes 웹 사이트에서 RBAC 권한 부여 사용을 참조하세요.

다음 사항에 유의하세요. 모든 네임스페이스에서 Kubernetes 리소스를 보려면 클러스터 역할과 클러스터 역할 바인딩을 만들어야 합니다. 특정 네임스페이스의 Kubernetes 리소스를 보려면 해당 네임스페이스에 대한 역할 및 역할 바인딩을 만들어야 합니다.

클러스터 역할 및 클러스터 역할 바인딩을 만드는 방법:

1.    매니페스트 파일을 다운로드합니다.

https://s3.us-west-2.amazonaws.com/amazon-eks/docs/eks-console-full-access.yaml

참고: 다운로드한 파일의 그룹 이름은 eks-console-dashboard-full-access-group입니다. 이는 IAM 사용자 또는 역할이 aws-auth ConfigMap에서 매핑되어야 하는 그룹입니다. 자세한 내용은 클러스터에 대한 사용자 또는 IAM 역할 관리의 “모든 네임스페이스의 Kubernetes 리소스 보기” 섹션을 참조하세요.

2.    (선택 사항) 1단계에서 다운로드한 매니페스트 파일을 클러스터에 적용하기 전에 그룹 이름을 변경합니다. 그런 다음 IAM 사용자 또는 역할을 ConfigMap의 해당 그룹에 매핑합니다. 예:

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: eks-console-dashboard-full-access-clusterrole
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  - namespaces
  - pods
  verbs:
  - get
  - list
- apiGroups:
  - apps
  resources:
  - deployments
  - daemonsets
  - statefulsets
  - replicasets
  verbs:
  - get
  - list
- apiGroups:
  - batch
  resources:
  - jobs
  verbs:
  - get
  - list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: eks-console-dashboard-full-access-binding
subjects:
- kind: Group
  name: eks-console-dashboard-full-access-group
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: eks-console-dashboard-full-access-clusterrole
  apiGroup: rbac.authorization.k8s.io

3.    매니페스트 파일을 배포합니다.

$ kubectl apply -f eks-console-full-access.yaml

4.    clusterroleclusterrolebinding 객체의 생성을 확인합니다.

$ kubectl describe clusterrole.rbac.authorization.k8s.io/eks-console-dashboard-full-access-clusterrole
$ kubectl describe clusterrolebinding.rbac.authorization.k8s.io/eks-console-dashboard-full-access-binding

5.    IAM 엔터티에 대한 새 그룹 eks-console-dashboard-full-access-group으로 aws-auth ConfigMap을 업데이트합니다.

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

6.    IAM 사용자를 mapUsers에 추가합니다. 예:

mapUsers: |
  - userarn: arn:aws:iam::XXXXXXXXXXXX:user/testuser
    username: testuser
    groups:
    - system:bootstrappers
    - system:nodes
    - eks-console-dashboard-full-access-group

7.    IAM 역할을 mapRoles에 추가합니다. 예:

mapRoles: |
  - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole
    username: testrole    
    groups:
    - system:bootstrappers
    - system:nodes
    - eks-console-dashboard-full-access-group

특정 네임스페이스의 Kubernetes 리소스 보기

1.    매니페스트 파일을 다운로드합니다.

https://s3.us-west-2.amazonaws.com/amazon-eks/docs/eks-console-restricted-access.yaml

참고: 파일의 그룹 이름은 eks-console-dashboard-restricted-access-group입니다. 이는 IAM 사용자 또는 역할이 aws-auth ConfigMap에서 매핑되어야 하는 그룹입니다. 자세한 내용은 클러스터에 대한 사용자 또는 IAM 역할 관리의 “특정 네임스페이스의 Kubernetes 리소스 보기” 섹션을 참조하세요.

2.    (선택 사항) 클러스터에 적용하기 전에 그룹 이름을 변경합니다. 그런 다음 IAM 사용자 또는 역할을 ConfigMap의 해당 그룹에 매핑합니다. 예:

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: eks-console-dashboard-restricted-access-clusterrole
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  - namespaces
  verbs:
  - get
  - list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: eks-console-dashboard-restricted-access-clusterrole-binding
subjects:
- kind: Group
  name: eks-console-dashboard-restricted-access-group
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: eks-console-dashboard-restricted-access-clusterrole
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: eks-console-dashboard-restricted-access-role
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
- apiGroups:
  - apps
  resources:
  - deployments
  - daemonsets
  - statefulsets
  - replicasets
  verbs:
  - get
  - list
- apiGroups:
  - batch
  resources:
  - jobs
  verbs:
  - get
  - list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: eks-console-dashboard-restricted-access-role-binding
  namespace: default
subjects:
- kind: Group
  name: eks-console-dashboard-restricted-access-group
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: eks-console-dashboard-restricted-access-role
  apiGroup: rbac.authorization.k8s.io

참고: 이전 파일의 네임스페이스는 기본값입니다. 다른 네임스페이스를 지정하려면 클러스터에 적용하기 전에 파일을 편집합니다.

3.    매니페스트를 배포합니다.

$ kubectl apply -f eks-console-restricted-access.yaml

4.    clusterroleclusterrolebinding 객체의 생성을 확인합니다.

$ kubectl describe clusterrole.rbac.authorization.k8s.io/eks-console-dashboard-restricted-access-clusterrole
$ kubectl describe clusterrolebinding.rbac.authorization.k8s.io/eks-console-dashboard-full-access-binding
$ kubectl describe role.rbac.authorization.k8s.io/eks-console-dashboard-restricted-access-role
$ kubectl describe rolebinding.rbac.authorization.k8s.io/eks-console-dashboard-restricted-access-role-binding

5.    IAM 엔터티에 대한 새 그룹 eks-console-dashboard-restricted-access-group으로 aws-auth ConfigMap을 업데이트합니다.

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

6.    IAM 사용자를 mapUsers에 추가합니다. 예:

mapUsers: |
  - userarn: arn:aws:iam::XXXXXXXXXXXX:user/testuser
    username: testuser
    groups:
    - system:bootstrappers
    - system:nodes
    - eks-console-dashboard-restricted-access-group

7.    IAM 역할을 mapRoles에 추가합니다. 예:

mapRoles: |
  - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole
    username: testrole    
    groups:
    - system:bootstrappers
    - system:nodes
    - eks-console-dashboard-restricted-access-group

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"

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

오류 메시지 문제를 해결하려면 AWS 관리 콘솔에서 워크로드 또는 노드를 볼 수 없으며 오류를 수신할 수 없습니다를 참조하세요.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?