-
K8S RBAC - Cluster Role 정리K8S 2021. 8. 1. 02:09
틀린 내용이 있을 수도 있습니다!
틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다!
지난 포스팅에서는 RBAC의 Role을 다뤘고, 이번 포스팅에서는 Cluster Role에 대해서 알아본다.
Role과 Cluster Role
Role
namespace에 속하는 오브젝트로 디플로이먼트나 서비스처럼 namespace에 속하는 오브젝트들을 정의할 때 사용
Cluster Role
namespace 단위가 아닌 클러스터 단위의 권한을 정의할 때 사용
즉, 사용할 리소스가 namespace에 속하는 리소스냐, 아니냐이다.
그리고 여기서는 자세히 적지는 않겠지만 rolebinding과 cluster rolebinding은 binding을 할 객체들이 namespace에 속해있냐 아니냐에 따라 나눌 수 있다. 이건 나중에 다른 포스팅으로 적을 것이다.
1. Cluster role 확인하기
kubectl get clusterrole
cluster를 처음 부트스트랩 했을 때 굉장히 많은 clusterrole들이 생성되어 있다.
2. Cluster role binding 확인하기
다음은 clusterrole을 serviceaccount나 user, group에 binding하기 위한 clusterrolebinding이다.
kubectl get clusterrolebinding
3. cluster-admin ClusterRole 확인하기
master 권한을 가지고 있는 cluster-admin이라는 rolebinding이 있는데
kubectl describe clusterrolebinding cluster-admin
cluster-admin이라는 clusterrolebinding을 보면, system:masters라는 그룹이 cluster-admin이라는 clusterrole을 사용하도록 binding되어 있다.
이번에는 "cluster-admin"이라는 role은 어떤 역할을 하는지 확인해 보자.
kubectl describe clusterrole cluster-admin
PolicyRule을 보면 clusterrole이 지닌 역할을 확인할 수 있는데, 위 명세는 모든 리소스(*)에 대해 모든 동작(*)이 가능하다는 것을 의미한다.
4. ClusterRole, ClusterRoleBinding 생성 실습
예시로 다음과 같은 역할을 가진 Clusterrole을 만들어보자.
- [michelle]이라는 사용자에게 - [nodes]를 - [list] 할 권한을 주자.
node에 대한 apiGroups를 알아야 하므로, 다음 커맨드를 통해 APIVERSION를 확인한다.
kubectl api-resources
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: node-cluster-role labels: rbac.example.com/aggregate-to-monitoring: "true" rules: # 노드에 대한 listing 권한 - apiGroups: [""] # kubectl api-resources 커맨드로 확인한 api version resources: ["nodes"] verbs: ["list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: node-cluster-role-binding subjects: # 미첼이라는 유저에게 - kind: User name: michelle apiGroup: rbac.authorization.k8s.io roleRef: # cluster role을 부여 kind: ClusterRole name: node-cluster-role apiGroup: rbac.authorization.k8s.io
이번에는 michelle이 승진하여 볼륨에 대한 권한이 필요해졌다.
- [michelle]이 - [persistentvolumes]와 - [storageclasses]를 사용할 수 있는 권한을 주자.
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: storage-admin labels: rbac.example.com/aggregate-to-monitoring: "true" rules: - apiGroups: [""] resources: ["persistentvolumes"] verbs: ["list","create", "get"] - apiGroups: ["storage.k8s.io/v1 "] resources: ["storageclasses"] verbs: ["list","create", "get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: michelle-storage-admin subjects: - kind: User name: michelle # Name is case sensitive apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: storage-admin apiGroup: rbac.authorization.k8s.io
반응형'K8S' 카테고리의 다른 글
K8S + Istio 환경에서 Nginx Proxy 설정하기 (1) 2021.09.13 K8S Network Policy 정리 (0) 2021.08.02 K8S RBAC - Role 정리 (0) 2021.08.01 K8S KubeConfig 정리 (0) 2021.07.31 K8S Certificate Signing Request 정리 (0) 2021.07.30