Post

Section 7-4. RBAC

udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의 및 쿠버네티스 인 액션 (마르코 룩샤)를 참고하여 정리한 글입니다.

Section07. Security

RBAC (Role Based Access Controls)

1
2
3
4
5
6
7
8
9
10
11
12
+===============================================+
|  # 그룹                    # 권한 모음         | 
|                        +------------------+   |
| dev-user        =====> | Can view Pods    |   |
|                        | Can create Pods  |   |
|                        | Can Delete Pods  |   |
|                        |        ...       |   |
|                        |                  |   |
|                        |    Developer     |   |
|                        +------------------+   |
|                                               |
+===============================================+
  • 해당 예제의 Role을 만들고 dev-user와 바인딩해보자.

Role 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
# developer-role.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: developer
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["pods"]
  verbs: ["list", "get", "create", "update", "delete"]
- apiGroups: [""]
  resources: ["ConfigMap"]
  verbs: ["create"]  
  • apiGroups : core group은 비울 수 있다.
  • resources : 접근 권한을 부여할 리소스
  • verb : 해당 리소스에 부여할 권한

사용자를 Role에 링크하기 (RoleBinding 생성)

1
2
3
4
5
6
7
8
9
10
11
12
13
# devuser-developer-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: devuser-developer-binding
subjects:
- kind: User
  name: dev-user
  apiGroup: rbac.authorization.k8s.io
roleRef:        
  kind: Role
  name: developer
  apiGroup: rbac.authorization.k8s.io
  • RoleRef : 이전에 생성한 Role의 세부 사항과 일치시킨다.

RBAC 확인하기

  • Role 확인
    1
    2
    3
    
    $ kubecel get roles
    
    $ kubectl describe role developer
    
  • RoleBinding 확인
    1
    2
    3
    
    $ kubecel get rolebindings
    
    $ kubecel describe rolebindings devuser-developer-binding
    

접근 권한 확인하기

1
2
3
4
5
6
7
8
9
10
11
12
13
$ kubectl auth can-i <행동> <리소스>

$ kubectl auth can-i create deployments
> yes

$ kubectl auth can-i delete nodes
> no

$ kubectl auth can-i create deployments --as dev-user
> no

$ kubectl auth can-i create pods --as dev-user
> yes
  • 관리자일경우 --as 옵션을 통해 다른 유저의 권한을 확인할 수 있다.
This post is licensed under CC BY 4.0 by the author.