ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • K8S RBAC - Cluster Role 정리
    K8S 2021. 8. 1. 02:09

     

    틀린 내용이 있을 수도 있습니다! 

    틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다!

     

     

    지난 포스팅에서는 RBAC의 Role을 다뤘고, 이번 포스팅에서는 Cluster Role에 대해서 알아본다. 

     

    K8S RBAC(Role Based Access Control) 정리

    RBAC는 사용자에게 특정 역할(Role)을 부여하여 권한을 제한하는 방식이다. RBAC를 생성하기 위해서는 역할을 명시해 놓은 Role object와 역할을 사용자에게 매핑한 RoleBinding Object가 필요하다. 1. authoriz

    seungjuitmemo.tistory.com

     

    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

    댓글

Designed by Tistory.