AWS EKS 는 AWS 에서 k8s 의 Control Plane 영역을 관리하여 사용자의 k8s 관리포인트 및 장애 위험을 줄여주는 AWS 서비스 입니다.
사용자가 EKS 구성 후 EKS 권한과는 별도로 k8s 사용 권한을 얻기 위해서는 별도로 k8s RBAC 설정을 해주어야 합니다.
이번 글에서는 access entries 를 사용하여 AWS Console 에서 RBAC 권한 설정하는 방법에 대하여 알아 보도록 하겠습니다.

우선 IAM USER를 사용하여 EKS Cluster를 생성하겠습니다. IAM User 보다는 Role Base를 기반으로 RBAC 설정하는 것을 권장하나 여기서는 테스트 편의성 및 AWS Console에 실제 권한이 적용되어 K8S 자원이 보이는지를 확인하기 위해서 IAM User를 사용하여 테스트 하였습니다.
참고로 EKS를 생성한 주체는 기본적으로 K8S Admin 권한을 가지고 있습니다. 예를 들어 IAM User 로 EKS Cluster를 생성시 아래 그림 처럼 자동으로 K8S 마스터 권한(AmazonEKSClusterAdminPolicy)이 설정 됩니다. access entries 출시전 에는 해당 클러스트에 만든 주체에 대한 Admin 권한을 제거할 수 없었으나 access entries 가 나온 이유로 EKS 클러스터를 생성한 주체라도 엑세스 정책에서 권한을 제거하여 Admin 권한의 삭제가 가능해졌기 때문에 EKS 생성자에 대한 RBAC를 재설정이 가능합니다. 아래 그림의 EKS Cluster를 생성한 sk_leedw416는 AWS Admin 가진 IAM User 입니다. sk_leedw416를 사용하여 EKS Admin 권한을 가진 IAM User를 생성하고 access entries를 사용하여 생성한 IAM User에 대한 RBAC 설정을 해보도록 하겠습니다.
첫번째로 인증모드를 EKS API 및 ConfigMap 또는 EKS API 로 설정이 되어있는지 확인합니다. EKS API 설정 시 access entries 를 사용이 가능하고 Configmap 은 AWS Auth ConfigMap 통한 권한부여를 의미합니다. EKS API 및 Configmap 는 access entries 와 AWS Auth ConfigMap 두 방식을 모두 사용할 수 있고 해당 설정을 할 경우는 access entries 로 설정한 권한이 우선 순위로 적용됩니다.
두 번째로 테스트를 위한 EKS Admin 권한이 있는 leedw416 라는 IAM User를 생성하였습니다.추가적으로 access entries 설정 시 IAM 의 특정 권한이 필요하여 IAM 관련 List 권한을 추가하였습니다.
생성한 leedw416 계정으로 AWS Console 에 로그인 하면 EKS Admin 권한을 갖고 있지만 RBAC 권한 설정이 안되어있어 아래 그림을 보면 노드 정보를 볼 수 없는 것을 확인 할 수 있습니다.
세번째로 이제 엑세스 항목(access Entries ) 을 생성하여 leedw416 대한 k8s 권한을 설정해보겠습니다.
Access Entries 를 통하여 k8s 권한을 설정하는 방법을 알아보겠습니다.
사용자가 정의한 Role을 가진 그룹을 생성하여 Access Entries 에 등록하는 방법이 있습니다.
k8s 를 사용할 IAM User는 위에서 생성한 leedw416 이기 때문에 IAM 보안 주체 ARN 을 leedw416으로 선택하였습니다.
그룹이름은 leedw416-admin 으로 입력하였습니다. 다른 설정은 Default 로 설정합니다.
k8s Admin 권한이 있는 IAM User로 Clusterrole 및 Clusterrolebinding을 이용하여 K8S 에 그룹을 생성하여 해당 그룹명을 넣었습니다.
참고로 leedw416-admin 는 leedw416-clusterrole.yaml, leedw416-clusterrolebinding.yaml 를 적용하여 구성하였습니다.
해당 Role을 적용하기 위해서는 K8S 권한을 가진 Iam User 또는 K8S 권한을 가진 Role을 맵핑한 EC2를 사용하여 ClusterRole, ClusterRoleBinding을 생성할 수 있습니다.
leedw416-clusterrole.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: leedw416-clusterrole
rules:
- apiGroups: [""]
resources: ["*"]
verbs: ["*"]
leedw416-clusterrolebinding.yaml
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: leedw416-clusterrolebinding
subjects:
- kind: Group
name: leedw416-admin
namespace: default
apiGroup: ""
roleRef:
kind: ClusterRole
name: leedw416-clusterrole
apiGroup: rbac.authorization.k8s.io
위에서 설명드린 방법을 사용하면 아래와 같이 leedw416 에 k8s 권한 생겨 Node 또는 POD 가 보이는 것을 확인 할 수 있습니다.
또한 leedw416의 Access key를 사용하며 터미널 창에서 (예 : Mac 터미널 또는 Windows CMD, Windows Powershell 창 등) Kubectl 명령어를 실행하면 (예 : kubectl get nodes) K8S 권한이 부여된 것을 확인 할 수 있습니다.
이상으로 Access Entries를 통하여 K8S RBAC 설정하는 방법에 대하여 알아보았습니다.
감사합니다.