본문 바로가기
Development/Docker&Kubernetes

[K8S] Kubernetes RBAC Authorization & Binding

by 폴피드 2018. 8. 29.
728x90
반응형

1. RBAC Authorization


개개인의 Role  의해서 network resource  access 할수 있도록 허용한다.

RBAC  rbac.authorization.k8s.io API 그룹을 사용한다.

RBAC  사용하기 위해서는 apiserver start 시에 --authorization-mode=RBAC 또는 /etc/kubernetes/manifests/kube-apiserver.yaml 파일에 kube-apiserver 항목에 --authorization-mode=RBAC  설정해주면 된다.


2. Role & ClusterRole


- Role  단일한 namespace 있는 resource 에 대한 권한을 정의한다.

role.yaml

1
2
3
4
5
6
7
8
9
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]
cs
apiGroups & resources : 어떤 Resource 대한 Rule 인지를 정의한다.

Verbs : 어떤 operation  할지 정의한다.


- Cluster Role  모든 namespace  대한 권한을 정의한다. 

clusterrole.yaml

1
2
3
4
5
6
7
8
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]
cs

Role 정의와 동일하지만 metadata  namespace 항목만 빠져있다.


3. RoleBinding & ClusterRoleBinding

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
RoleBinding
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: Group
  name: group1
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: read-secrets-global
subjects:
- kind: Group
  name: group12
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: secret-reader
  apiGroup: rbac.authorization.k8s.io
cs


Binding을 통해서 각각의 group 에 role 과 clusterrole 을 바인딩을 했다. role 은 group1, clusterrole 은 group2 에 바인딩을 했다. 


이렇게 바인딩이 끝나면 Group 에 따라서 호출할 수 있는 API 가 달라지게 된다. 



728x90
반응형