본문 바로가기

개발관련/AWS

AWS EKS 클러스터 인증 및 kubectl RBAC 설정 방법

반응형

외부 호스트에서 새로운 IAM 정보로 AWS EKS의 kubernetes API로 kubectl 명령을 날릴 수 있는 방법을 안내한다.

기본적인 AWS 사용법 및 IAM 서비스에 대한 이해도가 있다는 것을 바탕으로 안내한다.

 


 

STEP 1 : IAM 사용자에게 할당할 정책 생성 및 할당

아래의 json 내용으로 RBAC을 설정할 IAM 계정에 할당할 정책을 생성한 후 할당한다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "eks:ListFargateProfiles",
                "eks:UpdateClusterVersion",
                "eks:ListNodegroups",
                "eks:DescribeFargateProfile",
                "eks:ListTagsForResource",
                "eks:ListUpdates",
                "eks:DescribeUpdate",
                "eks:DescribeCluster",
                "eks:UpdateClusterConfig"
            ],
            "Resource": [
                "arn:aws:eks:<리전>:<계정 ID : 12자리 숫자>:fargateprofile/*/*/*",
                "arn:aws:eks:<리전>:<계정 ID : 12자리 숫자>:cluster/*"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "eks:ListClusters",
            "Resource": "*"
        }
    ]
}

 

 

그 다음, 제대로 IAM 정책이 추가되었는지 확인하기 위해 아래 명령어를 실행한다.

$ aws eks list-clusters
{
    "clusters": [
        "test-cluster-1",
        "test-cluster-2"
    ]
}

위처럼 json 형태로 데이터가 조회되면 성공이다.

 

 

 

STEP 2 : EKS 클러스터의 kubernetes API에 요청을 날릴 수 있는 master 계정에서 configMap을 수정하여 요청을 날릴 수 있는 유저 추가

EKS 클러스터, 즉 쿠버네티스 내부에서 관리하는 configMap을 수정하여 kubernetes API로 요청을 날릴 수 있는 계정의 정보를 추가해주어야 한다.

여기서는 위에서 정책을 추가해준 IAM 계정에 대한 정보를 추가한다.

 

아래와 같이 추가할 수 있다. :

# 해당 명령은 master 계정으로 실행해야한다.

# 아래 명령어를 통해 aws-auth라는 이름의 configmap을 수정한다.
$ kubectl edit -n kube-system configmap/aws-auth

# 위 명령을 실행하면 아래와 같이 출력된다.
apiVersion: v1
data:
  mapRoles: |
    - groups:
      - system:bootstrappers
      - system:nodes
      rolearn: arn:aws:iam::<AWS 계정 ID>:role/doc-test-nodes-NodeInstanceRole-WDO5P42N3ETB
      username: system:node:{{EC2PrivateDNSName}}
  mapUsers: |
    []
kind: ConfigMap
metadata:
  creationTimestamp: "2020-06-22T05:22:04Z"
  name: aws-auth
  namespace: kube-system
  resourceVersion: "780"
  selfLink: /api/v1/namespaces/kube-system/configmaps/aws-auth
  uid: dcc31de5-3838-11e8-af26-02e00430057c


# 내용을 아래처럼 수정한 후 저장한다.
apiVersion: v1
data:
  mapRoles: |
    - groups:
      - system:bootstrappers
      - system:nodes
      rolearn: arn:aws:iam::<AWS 계정 ID>:role/doc-test-nodes-NodeInstanceRole-WDO5P42N3ETB
      username: system:node:{{EC2PrivateDNSName}}
  mapUsers: | # 여기서 유저 정보를 아래와 같이 추가한다. 
    - userarn: arn:aws:iam::<AWS 계정 ID>:user/<IAM 계정 이름>
      username: <IAM 계정 이름>
      groups:
        - system:masters
kind: ConfigMap
metadata:
  creationTimestamp: "2020-06-22T05:22:04Z"
  name: aws-auth
  namespace: kube-system
  resourceVersion: "780"
  selfLink: /api/v1/namespaces/kube-system/configmaps/aws-auth
  uid: dcc31de5-3838-11e8-af26-02e00430057c

 

 

 

STEP 3 : AWS CLI 명령으로 kubeconfig 자동 설정

위에서 정책을 부여한 IAM 계정 정보로 aws configure 설정을 완료한 후, 아래 명령어를 통해 EKS 클러스터에 대한 kubeconfig 설정 작업을 진행한다.

$ aws eks --region <리전 코드> update-kubeconfig --name <클러스터명>

 

 

명령어가 정상적으로 실행되면, 콘솔 창에 아래와 비슷하게 텍스트가 출력된다.

Updated context arn:aws:eks:<리전 코드>:<계정 ID>:cluster/<클러스터명> in /home/ssm-user/.kube/config

 

 

그 다음, 아래 명령어를 실행하여 kubernetes API로 요청이 잘 전송되는지 확인한다.

$ kubectl get svc

 

 


 

참고 링크 

 

클러스터 인증 - Amazon EKS

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

반응형