[CKA] ServiceAccount와 RBAC 실습
ServiceAccount, Role과 Binding을 연결하고 실제 권한을 검증하는 흐름을 정리합니다.
ServiceAccount가 사용할 권한의 범위를 먼저 정합니다. namespace 리소스에는 Role과 RoleBinding을, PersistentVolume처럼 cluster 범위 리소스에는 ClusterRole과 ClusterRoleBinding을 사용합니다.
kubectl create serviceaccount pvviewer -n default
kubectl create clusterrole pvviewer-role --resource=persistentvolumes --verb=list
kubectl create clusterrolebinding pvviewer-role-binding \
--clusterrole=pvviewer-role \
--serviceaccount=default:pvviewer
Pod의 serviceAccountName에는 ServiceAccount 이름을 지정합니다.
apiVersion: v1
kind: Pod
metadata:
name: pvviewer
spec:
serviceAccountName: pvviewer
containers:
- name: app
image: redis
사용자에게 특정 namespace의 Pod 권한을 줄 때는 Role과 RoleBinding을 같은 namespace에 만듭니다.
kubectl create role developer \
--resource=pods \
--verb=create,list,get,update,delete \
--namespace=development
kubectl create rolebinding developer-binding \
--role=developer \
--user=<user> \
--namespace=development
생성 후 auth can-i로 실제 권한을 검증합니다.
kubectl auth can-i list persistentvolumes \
--as=system:serviceaccount:default:pvviewer
kubectl auth can-i update pods --as=<user> --namespace=development
인증서로 사용자를 인증하는 과정과 RBAC으로 권한을 부여하는 과정은 별개입니다. CSR을 제출했다면 관리자가 승인한 뒤 인증서를 kubeconfig에 연결하고, 마지막에 권한을 시험합니다.