EKS Cluster를 구축하면, 구축한 IAM에 대해서는 마스터 권한이 있습니다.
또한 아래와 같이 수정하여 다른 IAM 유저에게도 그 권한을 부여할 수 있습니다.
kubectl edit configmap aws-auth -n kube-system
apiVersion: v1
data:
mapRoles: |
- groups:
- system:bootstrappers
- system:nodes
rolearn: arn:aws:iam::{account_id}:role/{workernode-role}
username: system:node:{{EC2PrivateDNSName}}
mapUsers: |
- userarn: arn:aws:iam::{account_id}:user/{user_name1}
username: user_name1
groups:
- system:mastsers
- userarn: arn:aws:iam::{account_id}:user/{user_name2}
username: user_name2
groups:
- system:masters
하지만, 쿠버네티스의 RBAC를 IAM 유저에게 할당하게 하고 싶을 때는 어떻게 할까요?
먼저, 유저에게 주고 싶은 RBAC를 할당하겠습니다.
저는 dev-was / dev-batch 네임스페이스에 대해서만 유저가 컨트롤 하게 하고 싶기 때문에 아래와 같이 Role을 생성하겠습니다.
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: dev-was
namespace: dev-was
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: dev-batch
namespace: dev-batch
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
그리고 이 Role을 주고자 하는 Group 이름으로 매핑하여 할당하겠습니다.
이때, Group은 따로 생성하지 않고, 작성한 스트링값만 맞추면 되기 때문에 사용하고자 하는 값을 넣으시면 됩니다.
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: dev-was-rolebinding
namespace: dev-was
subjects:
- kind: Group
name: dev
roleRef:
kind: Role
name: dev-was
apiGroup: rbac.authorization.k8s.io
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: dev-batch-rolebinding
namespace: dev-batch
subjects:
- kind: Group
name: dev
roleRef:
kind: Role
name: dev-batch
apiGroup: rbac.authorization.k8s.io
그리고 위의 aws-auth Configmap에서 추가 했던 것 처럼 아래와 같이 추가해주세요
apiVersion: v1
data:
mapRoles: |
- groups:
- system:bootstrappers
- system:nodes
rolearn: arn:aws:iam::{account_id}:role/{workernode-role}
username: system:node:{{EC2PrivateDNSName}}
mapUsers: |
- userarn: arn:aws:iam::{account_id}:user/{user_name1}
username: user_name1
groups:
- system:mastsers
- userarn: arn:aws:iam::{account_id}:user/{user_name2}
username: user_name2
groups:
- system:masters
- userarn: arn:aws:iam::{account_id}:user/{dev_user1}
username: dev_user1
groups:
- dev
- userarn: arn:aws:iam::{account_id}:user/{dev_user2}
username: dev_user2
groups:
- dev
그러면 이제 이 유저는 해당 네임스페이스만 접근하여 사용할 수 있게 됩니다.
하지만, 우리가 실제로 쿠버네티스 환경에서 구축하다 보면, CRD 등 Cluster Role 단위에 있는 롤이 필요한 경우가 있습니다.
이 역시도 같은 방법으로 부여해주시면 됩니다.
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: crd-cluster-role
rules:
- apiGroups: ["apiextensions.k8s.io"]
resources: ["customresourcedefinitions"]
verbs: ["*"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: crd-cluster-role-binding
subjects:
- kind: Group
name: dev
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: crd-cluster-role
apiGroup: rbac.authorization.k8s.io
위와 같이 CRD에 대한 Cluster Role을 부여해주시고, 바인딩을 해주시면 사용할 수 있게 됩니다.
하지만, 다른 리소스를 건드릴 수 있기 때문에 클러스터 롤의 경우에는 더 권한을 세분화 해서 넣거나,
아니면 관리자에게 전달하여 총 관리자가 배포하게 하는것이 좋을 것으로 판단됩니다.
'EKS > EKS Cluster' 카테고리의 다른 글
EKS AutoScaling - 2. AutoScaler (0) | 2020.10.21 |
---|---|
EKS AutoScaling - 1. HPA 설정하기 (0) | 2020.10.21 |
EKS Cluster 구축 - 7. Pod에 IAM Role 부여하기 (1) | 2020.07.31 |
EKS Cluster 구축 - 6. Helm3 설치 (0) | 2020.07.24 |
EKS Cluster 구축 - 5. Helm2 설치 (0) | 2020.02.05 |