Zero To One

EKS에 사용자 추가하기 본문

AWS

EKS에 사용자 추가하기

Zero_To_One 2022. 5. 26. 22:01

1. 추가할 사람의 로컬에서  IAM 사용자 세부 정보를 가져온다.

aws sts get-caller-identity

출력 예시

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

 

2. 루트사용자(EKS 클러스터를 만든 사람)의 로컬에서 실행한다.

aws eks --region region update-kubeconfig --name cluster_name

예시

aws eks --region ap-northeast-2 update-kubeconfig --name pj4-staging

실행결과

> aws eks --region ap-northeast-2 update-kubeconfig --name pj4-staging
Updated context arn:aws:eks:ap-northeast-2:xxxxxxxxxxxx:cluster/pj4-staging in /home/jaehyeok/.kube/config

 

3. kubectl을 입력하면 오른쪽에 클러스터 이름이 있는 것을 확인할 수 있다.

4. IAM 사용자가 AWS Management Console에서 노드 워크로드를 볼 수 있도록 clusterrole  clusterrolebinding 또는 role  rolebinding을 생성한다.

 

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

실행결과

> curl -o eks-console-full-access.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/docs/eks-console-full-access.yaml
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   780  100   780    0     0    905      0 --:--:-- --:--:-- --:--:--   904

 

5. 매니페스트를 적용한다.

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

실행결과

> kubectl apply -f eks-console-full-access.yaml
clusterrole.rbac.authorization.k8s.io/eks-console-dashboard-full-access-clusterrole created
clusterrolebinding.rbac.authorization.k8s.io/eks-console-dashboard-full-access-binding created

6. aws-auth ConfigMap을 편집한다.

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

실행결과

> kubectl edit -n kube-system configmap/aws-auth
Error from server (NotFound): configmaps "aws-auth" not found

 

6-1. 오류처리

aws-auth ConfigMap을 이미 적용했는지 확인한다.

kubectl describe configmap -n kube-system aws-auth

실행결과

> kubectl describe configmap -n kube-system aws-auth
Error from server (NotFound): configmaps "aws-auth" not found

 

6-2. 위와 같은 오류라면 AWS Authenticator 구성 맵을 다운로드, 편집 및 적용한다.

curl -o aws-auth-cm.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/aws-auth-cm.yaml

6-3. nano 편집기 혹은 vi 편집기로 파일을 연다.

nano aws-auth-cm.yaml

6-4. <ARN ~ > 부분을 수정한다.

                           
apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    - rolearn: <ARN of instance role (not instance profile)>
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes

이때 rolearn은 EKS를 생성할 때 만든 arn을 넣는다.

rolearn은 IAM -> 역할에서 찾을 수 있다.

6-5. 적용

kubectl apply -f aws-auth-cm.yaml

실행 결과

> kubectl apply -f aws-auth-cm.yaml
configmap/aws-auth created

7. 사용자를 추가한다

eksctl create iamidentitymapping \
  --cluster eksworkshop-eksctl \
  --arn arn:aws:iam::${ACCOUNT_ID}:role/k8sAdmin \
  --username admin \
  --group system:masters
eksctl create iamidentitymapping \
  --cluster (클러스터이름) \
  --arn (1.에서 가져온 사용자 정보중 arn을 붙여넣기) \
  --username (유저이름) \
  --group system:masters

8. 여러명 추가도 위와 같은 명령어를 통해 넣을 수 있다.

 

9. 다음 명령어로 잘 추가 되었는지 확인할 수 있다.

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

빠져나오기 : ECS -> :q!

 

10. 클러스터에 aws-authConfigMap 적용

aws-auth ConfigMap을 이미 적용했는지 확인한다.

kubectl describe configmap -n kube-system aws-auth

이때, 추가된 사용자들이 나온다.

 

또한, 다음과 같은 명령어로 쉽게 볼 수 있다.

 

eksctl get iamidentitymapping --cluster 클러스터이름

11. AWS Authenticator 구성 맵을 다운로드, 편집 및 적용한다.

curl -o aws-auth-cm.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/aws-auth-cm.yaml

 다운 후

nano aws-auth-cm.yaml

 

apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    - rolearn: (iam -> 역할 -> 만든 eks역할 arn 넣기)
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes

적용

kubectl apply -f aws-auth-cm.yaml

 

참조

https://aws.amazon.com/ko/premiumsupport/knowledge-center/amazon-eks-cluster-access/

 

Amazon EKS에서 클러스터를 생성한 후 다른 IAM 사용자 및 역할에 액세스 권한 제공

모든 항목이 올바르게 설정되면 무단 오류 메시지가 표시되지 않습니다. 출력에는 기본 네임스페이스에서 실행 중인 모든 포드가 나열됩니다. 출력에서 리소스를 찾을 수 없다고 표시되면 기본

aws.amazon.com

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/add-user-role.html#aws-auth-configmap

 

클러스터에 대한 IAM 사용자 및 역할 액세스 사용 설정 - Amazon EKS

클러스터에 대한 IAM 사용자 및 역할 액세스 사용 설정 AWS IAM 엔터티를 사용하는 클러스터에 대한 액세스는 Amazon EKS 제어 영역에서 실행되는 AWS IAM Authenticator for Kubernetes에 의해 사용 설정됩니다.

docs.aws.amazon.com

https://www.eksworkshop.com/beginner/091_iam-groups/configure-aws-auth/