-
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