일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- EC2
- docker
- ansible
- 쿠버네티스
- FastAPI
- intervals
- dockerfile
- POD
- Service
- ebs
- WSGI
- leetcode
- EKS
- IAM
- elasticsearch
- Django
- asyncio
- 자바스크립트
- K8S
- AWS
- Python
- asgi
- IAC
- Kubernetes
- terraform
- github
- event loop
- Deployment
- DevOps
- YAML
- Today
- Total
궁금한게 많은 개발자 노트
[ AWS ] EKS사용 시 AWS IAM User와 k8s Role의 관계 본문
AWS에서 제공하는 EKS(Elastic Kubernetes Service)를 사용하다 보면, IAM User권한을 통해 EKS를 생성하고 생성한 User는 클러스터를 구성할 수 있는 system:master권한을 가져, EKS에 접근하거나 EKS내에서 생성된 k8s resource들에 대한 접근 권한이 생성됩니다. 물론, terraform이나 ansible등의 IaC를 사용하여 CLI를 통해 EKS를 구축하였더라도 kube config를 업데이트하여 IAM Role, User, Account등을 지정할 수 있습니다.
AWS에서는 AWS서비스에 접근하기 위한 사용자 IAM정보를 ~/.aws/config에 저장해둔다면, EKS에서는 EKS에 접근하기 위한 토큰을 발급하여 사용하도록 하는 정보를 ~/.kube/config에 저장합니다.
AWS는 EKS 클러스터를 생성할 때의 IAM을 클러스터 master 계정으로 생성한다. master 계정 외에 다른 계정에서 클러스터에 접근하기 위해서는 aws-auth ConfigMap에 권한을 부여해야 한다.
EKS를 생성했다고 하더라도 CLI에서 아래 명령을 통해 kubeconfig를 생성/IAM 정보를 등록해주어야 합니다.
aws eks --region <region-code> update-kubeconfig --name <cluster_name>
위 그림을 보면 kubectl을 통해 EKS에 접근하기 위한 절차가 상세히 설명되어 있습니다.
AWS에서 Role/Policy를 통해 각 service들에 접근할 수 있는 권한을 제어한다면, EKS내에서도 Role을 통해 k8s resource들에 접근할 수 있는 rule들을 정의하고, 그 Role을 k8s user, group에 부여하는 방식으로 접근 권한을 제어합니다.
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
name: developer-role
namespace: developer
rules:
- apiGroups: ["*"]
resources: ["pods"]
verbs: ["list", "get", "create", "update"]
developer-role을 정의하고, 해당 role을 특정 group에 binding하여 권한을 부여합니다. 이러한 방식으로 EKS를 생성한 사용자 뿐만 아니라, 여러 다른 사용자에게도 해당 EKS에 접근할 수 있는 권한을 부여할 수 있습니다.
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: developer-rolebinding
namespace: developer
subjects:
- kind: Group
name: developer
roleRef:
kind: Role
name: developer-role
apiGroup: rbac.authorization.k8s.io
이렇게 k8s내에서 role/rolebinding, k8s group을 만들어 두고, 아래와 같이 aws-auth configmap에서 EKS를 생성한 사용자 이외의 IAM사용자와 매핑시켜 RBAC을 통해 권한을 부여할 수 있습니다.
apiVersion: v1
data:
mapRoles: |
- groups:
- system:bootstrappers
- system:nodes
rolearn: arn:aws:iam::************:role/EKS-NodeGroup-Role
username: system:node:{{EC2PrivateDNSName}}
mapUsers: |
- userarn: arn:aws:iam::************:user/kyungse.park_developer
username: kyungse.park_developer
groups:
- developer
이러한 과정을 다 이해하고 나면, kubectl을 통해 api-server와 AWS IAM, k8s RBAC의 구성요소들이 어떤 상호작용으로 명령이 전달되고 응답이 오는지에 대해 더 이해하기 쉬울 것 같습니다.
'DevOps' 카테고리의 다른 글
[ ES ] Kibana index pattern 생성 안되는 문제 (0) | 2023.11.23 |
---|---|
[ AWS ] EKS구축 및 Continuous Deployment 다이어그램 (0) | 2023.11.20 |
[ IaC ] Terraform AWS current caller identity (0) | 2023.10.30 |
[ IaC ] Terraform resource lifecycle & meta arguments (0) | 2023.10.25 |
[ IaC ] Terraform이란? (0) | 2023.10.10 |