본문 바로가기

AWS

[EKS] EKS Cluster에 IAM User를 통한 kubectl 권한 설정하기

반응형

1. 개요

- EKS Cluster를 구축한 이후, 각각의 개발자에게 IAM User를 통해 EKS Cluster 권한을 다르게 부여하고 싶을 경우가 있을 수 있다. 이러한 경우에는 IAM User와 RBAC을 연동하여 인증, 인가를 설정해줄 수 있다.

 

- IAM User를 통한 방법 이외에 IAM Role을 통한 방법도 있다. 개발자들의 수가 많아질 수록 IAM User를 통한 방법은 계속 Configmap에 지속적으로 추가해주어야 하지만 IAM Role은 권한만 지정해 놓으면 따로 지속적으로 Configmap을 수정할 필요가 없기 때문에 유지보수 측면에서 더욱 간편하다. 하지만 2가지 방법 모두 알아두어야 하지 않을까? 라는게 필자의 생각이기 때문에 먼저 IAM User를 통한 인증, 인가 방법에 대해 알아볼 것임

 

 

2. IAM User를 통한 EKS Cluster 인증, 인가

전체적인 과정은 다음과 같다.

 

  1. IAM User 추가 (여기서는 developer_hongGu란 이름으로 생성할 예정)
  2. IAM User에 대한 Access Key, Secret Key 설정 (결국 cli로 API 접근을 해야 하기 때문임)
  3. Admin 권한을 가진 IAM User가 aws-auth란 Configmap에 설정값을 추가해준다.

(system:masters란 그룹은 EKS Cluster가 설치될 때 기본으로 생성되는 Group이며, 해당 EKS를 설치한 IAM User가 이 그룹을 할당받아서 kubectl 명령어를 통해 모든 Namespace, 모든 Resource, 모든 Action에 대한 권한을 얻게 된다. 그러므로, aws-auth에서 작업하기 위해서는 EKS Cluster를 구축한, Admin 권한이 있는 IAM User로 작업해야 함)

 

가정) developer_hongGu 개발자에게 EKS Cluster의 dev 네임스페이스 권한 부여하기

A라는 웹사이트를 개발하는 Namespace를 dev라고 칭하겠다.

 

1. IAM User 생성

developer_hongGu라고 지칭하며, 권한은 최소한만 주고 싶은 경우 EKS에 대한 조회만 가능할 수 있도록 한다.

=> 결국 Access key, Secrey key를 통해 EKS Cluster에 접근할 수 있어야 하는데 Cluster에 대한 최소한의 권한이 있어야 Kube API Server로 접근을 시도할 수 있기 때문임

## 예시
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::<<Account Number>>:role/EKS-Developer-Policy"
        },
        {
            "Effect": "Allow",
            "Action": [
                "eks:DescribeCluster",
                "eks:ListClusters"
            ],
            "Resource": "*"
        }
    ]
}

2. (Admin쪽에서 작업) Role, Role Binding 생성

1. Role 생성

: dev 네임스페이스에서 모든 API, Resource에게 모든 행동을 할 수 있는 Role 생성

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: dev-access-role
  namespace: dev
rules:
- apiGroups: ["*"]
  resources: ["*"] 
  verbs: ["*"]

 

2. Role Binding 생성

: Role과 Service Account를 이어주는 Role Binding 생성

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: dev-access-role-binding
  namespace: dev

## Role
roleRef:
  kind: Role
  name: dev-access-role
  apiGroup: rbac.authorization.k8s.io

## Service Account
subjects:
- kind: Group
  apiGroup: rbac.authorization.k8s.io
  name: developer

 

3. aws-auth 컨피그맵에 해당 IAM User 추가

userarn 기입

username 기입 (IAM User 이름)

groups : SA의 이름을 매핑시켜줌

apiVersion: v1
data:
  mapRoles: |
    - groups:
      - system:bootstrappers
      - system:nodes
      rolearn: arn:aws:iam::111111111111:role/eks_worker_role
      username: system:node:{{EC2PrivateDNSName}}
  mapUsers: |
    - userarn: arn:aws:iam::111111111111:user/admin_gildong
      username: admin_gildong
      groups:
        - system:masters
    - userarn: arn:aws:iam::111111111111:user/developer_hongGu
      username: developer_hongGu
      groups:
        - developer
kind: ConfigMap

 

이렇게 하면 EKS에서 해주어야 할 일들은 끝이며, Local에서 접근하고자 할 IAM User의 Access Key, Secret Key로 자격 증명을 설정해준 이후 kube config 파일을 업데이트 해준 이후 접근해보면 dev 네임스페이스만 접근이 가능하게 된다.

 

다음에는 IAM Role을 통한 인증, 인가 방법에 대해 알아볼 예정

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형