ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • K8S RBAC - Role 정리
    K8S 2021. 8. 1. 01:06

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

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

     

     

    RBAC는 사용자에게 특정 역할(Role)을 부여하여 권한을 제한하는 방식이다. 

    RBAC에는 Cluster 단위의 Clusterrole과 namespace 단위의 Role이 있다.

     

    RBAC를 생성하기 위해서는 역할을 명시해 놓은 Role object와 사용자, 그리고 role을 사용자에게 매핑할 RoleBinding Object가 필요하다. 

     

    1. authorization mode 확인하기 

    k8s api server에는 어떤 인가 모드를 사용하는지 명시되어 있다.

    # cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep mode

     

     

    2. 모든 네임스페이스에 있는 Role 확인하기 

    다음과 같이 다양한 role들이 생성을 하지 않았음에도 불구하고 존재한다.

     

    # kubectl get role -A

     

    3. kube-proxy Role의 Resource확인하기 

    여기서 Resource는 어떤 오브젝트를 사용할 수 있는지를 의미하며 

    verb는 resource를 가지고 무엇을 할 수 있는지를 의미한다. 

     

    # kubectl describe role kube-proxy -n kube-system

    즉 kube-proxy role는 configmap에 대해서만 get 동작이 가능하다.  

     

     

    4. kube-proxy Role를 사용하는 account 확인하기 

    # kubectl get rolebinding -A | grep kube-proxy

    kube-proxy Role을 사용하는 kube-proxy rolebinding을 describe해보자.  

     

    # kubectl describe rolebinding kube-proxy -n kube-system

    kube-proxy rolebinding은 system:bootstrappers:kubeadm:default-node-token라는 그룹과 rolebinding이 되어 있다. 

     

     

    5. dev-user로 pod 리스트를 가져올수 있는지 확인하기 

    특정 account로 커맨드를 실행하고 싶다면 --as 커맨드를 이용한다. 

     

    # kubectl get pods --as dev-user

     

    6. Role과 RoleBinding 생성 실습 

     

    - dev-user가

    - default namespace의 

    - pod를

    - create, list, delete하는 Role과 Rolebinding을 생성해보자. 

     

    < role.yaml >

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      namespace: default
      name: developer
    rules:
    - apiGroups: [""] # "" indicates the core API group
      resources: ["pods"]
      verbs: ["create", "delete", "list"]

     

    < rolebinding.yaml >

    apiVersion: rbac.authorization.k8s.io/v1
    # This role binding allows "dev-user" to read pods in the "default" namespace.
    kind: RoleBinding
    metadata:
      name: dev-user-binding
      namespace: default
    subjects:
    # You can specify more than one "subject"
    - kind: User
      name: dev-user # "name" is case sensitive
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      # "roleRef" specifies the binding to a Role / ClusterRole
      kind: Role #this must be Role or ClusterRole
      name: developer # this must match the name of the Role or ClusterRole you wish to bind to
      apiGroup: rbac.authorization.k8s.io

     

    생성 후, dev-user로 pods에 대해 list 커맨드 실행 가능한 것을 알 수 있다.  

     

    # kubectl get pods --as dev-user

     

    반응형

    'K8S' 카테고리의 다른 글

    K8S Network Policy 정리  (0) 2021.08.02
    K8S RBAC - Cluster Role 정리  (0) 2021.08.01
    K8S KubeConfig 정리  (0) 2021.07.31
    K8S Certificate Signing Request 정리  (0) 2021.07.30
    K8S TLS Certificate 정리  (0) 2021.07.26

    댓글

Designed by Tistory.