이 페이지 개선에 도움 주기
이 사용자 설명서에 기여하고 싶으신가요? 이 페이지 하단으로 스크롤하여 GitHub에서 이 페이지 편집을 선택하세요. 여러분의 기여는 모두를 위한 더 나은 사용자 설명서를 만드는 데 도움이 됩니다.
ConfigMap을 사용한 IAM 사용자에게 Kubernetes에 대한 액세스 권한 부여
중요
aws-auth
ConfigMap은 더 이상 사용되지 않습니다. Kubernetes API에 대한 액세스를 관리하는 데 권장되는 방법은 액세스 항목입니다.
IAM 보안 주체를 사용하는 클러스터에 대한 액세스는 Amazon EKS 컨트롤 플레인에서 실행되는 Kubernetes용 AWS IAM Authenticatoraws-auth
ConfigMap
에서 구성 정보를 가져옵니다. 모든 aws-auth
ConfigMap
설정은 GitHub의 Full Configuration Format
Amazon EKS 클러스터에 IAM 보안 주체 추가
Amazon EKS 클러스터를 생성할 경우 클러스터를 생성하는 IAM 보안 주체에게는 Amazon EKS 제어 영역의 클러스터 역할 기반 액세스 제어(RBAC) 구성에 system:masters
권한이 자동으로 부여됩니다. 이 보안 주체는 표시되는 구성에 나타나지 않으므로 클러스터를 원래 생성한 보안 주체를 추적해야 합니다. 추가 IAM 보안 주체에 클러스터와 상호 작용할 수 있는 기능을 부여하려면 Kubernetes 내에서 aws-auth ConfigMap
을 편집하고 aws-auth ConfigMap
에 지정하는 group
의 이름으로 Kubernetes rolebinding
또는 clusterrolebinding
을 생성합니다.
참고
Kubernetes 역할 기반 액세스 제어(RBAC) 구성에 대한 자세한 내용은 Kubernetes 설명서의 RBAC 승인
Amazon EKS 클러스터에 IAM 보안 주체를 추가하려면
-
kubectl
이 클러스터에 액세스하는 데 사용하는 자격 증명을 확인합니다. 컴퓨터에서 다음 명령으로kubectl
이 사용하는 자격 증명을 볼 수 있습니다. 기본 경로를 사용하지 않는 경우
를~/.kube/config
kubeconfig
파일의 경로로 바꿉니다.cat
~/.kube/config
예제 출력은 다음과 같습니다.
[...] contexts: - context: cluster:
my-cluster.
user:region-code
.eksctl.ioadmin@my-cluster.
name:region-code
.eksctl.ioadmin@my-cluster.
current-context:region-code
.eksctl.ioadmin@my-cluster.
[...]region-code
.eksctl.io이전 예제 출력에서는
이라는 사용자의 자격 증명이admin
라는 클러스터에 대해 구성되었습니다. 클러스터를 생성한 사용자인 경우 클러스터에 대한 액세스 권한이 이미 있습니다. 클러스터를 생성한 사용자가 아닌 경우 다른 IAM 보안 주체에 대한 클러스터 액세스를 사용 설정하기 위해 나머지 단계를 완료해야 합니다. IAM 모범 사례에서는 되도록 사용자 대신 역할에 권한을 부여하세요. 다음 명령을 사용하여 현재 클러스터에 액세스할 수 있는 다른 보안 주체를 확인할 수 있습니다.my-cluster
kubectl describe -n kube-system configmap/aws-auth
예제 출력은 다음과 같습니다.
Name: aws-auth Namespace: kube-system Labels: <none> Annotations: <none> Data ==== mapRoles: ---- - groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::
111122223333
:role/my-node-role
username: system:node:{{EC2PrivateDNSName}} BinaryData ==== Events: <none>이전 예는 기본
aws-auth
ConfigMap
입니다. 노드 인스턴스 역할만 클러스터에 액세스할 수 있습니다. -
IAM 보안 주체를 매핑할 수 있는 기존 Kubernetes
roles
및rolebindings
또는clusterroles
및clusterrolebindings
가 있어야 합니다. 이런 리소스에 대한 자세한 내용을 알아보려면 Kubernetes 설명서의 RBAC 승인 사용을 참조하세요. -
기존 Kubernetes
roles
또는clusterroles
를 확인합니다.Roles
는namespace
로 범위가 지정되지만clusterroles
는 클러스터로 범위가 지정됩니다.kubectl get roles -A
kubectl get clusterroles
-
이전 출력에서 반환된 모든
role
또는clusterrole
의 세부 정보를 보고 IAM 보안 주체가 클러스터에서 보유하려는 권한(rules
)이 있는지 확인합니다.
을 이전 명령의 출력에서 반환된role-name
role
이름으로 바꿉니다.
을kube-system
role
의 네임스페이스로 바꿉니다.kubectl describe role
role-name
-nkube-system
을 이전 명령의 출력에서 반환된cluster-role-name
clusterrole
이름으로 바꿉니다.kubectl describe clusterrole
cluster-role-name
-
기존 Kubernetes
rolebindings
또는clusterrolebindings
를 확인합니다.Rolebindings
는namespace
로 범위가 지정되지만clusterrolebindings
는 클러스터로 범위가 지정됩니다.kubectl get rolebindings -A
kubectl get clusterrolebindings
-
rolebinding
또는clusterrolebinding
의 모든 세부 정보를 보고roleRef
로 나열된 이전 단계의role
또는clusterrole
그리고subjects
에 나열된 그룹 이름이 있는지 확인합니다.
을 이전 명령의 출력에서 반환된role-binding-name
rolebinding
이름으로 바꿉니다.
을kube-system
rolebinding
의namespace
로 바꿉니다.kubectl describe rolebinding
role-binding-name
-nkube-system
예제 출력은 다음과 같습니다.
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
을 이전 명령의 출력에서 반환된cluster-role-binding-name
clusterrolebinding
이름으로 바꿉니다.kubectl describe clusterrolebinding
cluster-role-binding-name
예제 출력은 다음과 같습니다.
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
-
-
aws-auth
ConfigMap
을 편집합니다.eksctl
과 같은 도구를 사용하여ConfigMap
을 업데이트하거나 이를 편집하여 수동으로 업데이트할 수 있습니다.중요
eksctl
또는 다른 도구를 사용하여ConfigMap
을 편집하는 것이 좋습니다. 사용할 수 있는 다른 도구에 대한 자세한 내용을 알아보려면 Amazon EKS 모범 사례 가이드의 도구를 사용하여aws-auth
ConfigMap
을 변경을 참조하세요. 부적절하게 형식이 지정된 aws-auth
ConfigMap
으로 인해 클러스터에 대한 액세스 권한을 상실할 수 있습니다.
클러스터에 aws-auth
ConfigMap
적용
aws-auth
ConfigMap
은 관리형 노드 그룹을 생성하거나 eksctl
을 사용하여 노드 그룹을 생성할 때 자동으로 생성되어 클러스터에 적용됩니다. 이 ConfigMap은 처음에는 노드를 클러스터에 조인하기 만들어졌으나 이 ConfigMap
을 사용하여 IAM 보안 주체에 역할 기반 액세스 제어(RBAC) 액세스를 추가할 수도 있습니다. 자체 관리형 노드를 시작했고 클러스터에 aws-auth
ConfigMap
을(를) 적용하지 않았다면 다음 절차를 수행하면 됩니다.
클러스터에 aws-auth
ConfigMap
적용
-
aws-auth
ConfigMap
을(를) 이미 적용했는지 확인합니다.kubectl describe configmap -n kube-system aws-auth
‘
Error from server (NotFound): configmaps "aws-auth" not found
’와 같은 오류가 발생할 경우 다음 단계를 수행하여 스톡ConfigMap
을 적용합니다. -
AWS Authenticator 구성 맵을 다운로드, 편집 및 적용합니다.
-
구성 맵을 다운로드합니다.
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
-
파일에서aws-auth-cm.yaml
rolearn
을 노드와 연결된 IAM 역할의 Amazon 리소스 이름(ARN)으로 설정합니다. 이 작업은 텍스트 편집기를 사용하거나
을 대체하고 다음 명령을 실행하여 수행할 수 있습니다.my-node-instance-role
sed -i.bak -e 's|<ARN of instance role (not instance profile)>|
my-node-instance-role
|' aws-auth-cm.yaml이 파일에서 어떠한 행도 수정하지 마세요.
중요
역할 ARN에는
role/my-team/developers/my-role
과 같은 경로가 포함될 수 없습니다. ARN 형식은arn:aws:iam::
이어야 합니다. 이 예에서는111122223333
:role/my-role
my-team/developers/
를 제거해야 합니다.노드 그룹에 대해 AWS CloudFormation 스택 출력을 점검하고 다음 값을 찾습니다.
-
InstanceRoleARN -
eksctl
로 생성된 노드 그룹용 -
NodeInstanceRole - AWS Management Console에서 Amazon EKS 판매 AWS CloudFormation 템플릿으로 생성된 노드 그룹용
-
-
구성을 적용합니다. 이 명령을 완료하는 데 몇 분이 걸릴 수 있습니다.
kubectl apply -f aws-auth-cm.yaml
참고
권한 부여 또는 리소스 유형 오류가 표시되는 경우 문제 해결 주제의 권한이 없거나 액세스가 거부됨(kubectl) 섹션을 참조하세요.
-
-
노드의 상태를 확인하고
Ready
상태가 될 때까지 대기합니다.kubectl get nodes --watch
Ctrl
+C
를 입력하여 쉘 프롬프트로 돌아갑니다.