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 인증, 인가
전체적인 과정은 다음과 같다.
- IAM User 추가 (여기서는 developer_hongGu란 이름으로 생성할 예정)
- IAM User에 대한 Access Key, Secret Key 설정 (결국 cli로 API 접근을 해야 하기 때문임)
- 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을 통한 인증, 인가 방법에 대해 알아볼 예정
'AWS' 카테고리의 다른 글
[WEB, WAS] 앞단에 ALB가 있을 때 Apache, Tomcat의 Log에서 Client IP 노출 설정 (1) | 2021.05.29 |
---|---|
[AWS] CloudFront Behavior을 통한 S3, ELB 연동 실습 (0) | 2021.05.25 |
[AWS] NLB, ALB, Lambda를 통한 고정 IP 사용 방법 (2) | 2021.05.11 |
AWS Lambda를 이용한 EC2 인스턴스 정기 시작, 중지 (2) | 2021.02.28 |
[AWS] VPC Peering 간단한 실습 (0) | 2021.02.27 |