본문 바로가기
  • 오늘처럼
소프트웨어 아키텍처/Kubernetes

[Kubernetes] 1-10. RBAC 적용해보기

by bluefriday 2022. 5. 3.
반응형

이번에는 새로운 ServiceAccount(이하 SA)과 Role을 만들고 RoleBinding을 통하여 매핑하여 해당 SA 가 제한된 기능만을 수행할 수 있는지를 확인한다.

먼저 Service Account를 생성한다.

kubectl -n test-namespace create sa test-sa
serviceaccount/test-sa created

 

이후에 secret 과 configmap 을 생성만 할 수 있는 Role을 생성한다.

kubectl -n test-registry create role test-role \
  --verb=create \
  --resource=secret \
  --resource=configmap

위 kubectl create 명령어와 동일하게 하단의 yaml 파일을 apply하여도 생성 가능하다.

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: test-role
  namespace: test-namespace
rules:
- apiGroups:
  - ""
  resources:
  - secrets
  - configmaps
  verbs:
  - create

이제 Role 과 ServiceAccount 를 연결해주는 RoleBinding 객체를 생성한다. 역시 create, apply 둘다 가능하다.

### kubectl create
kubectl -n test-registry create rolebinding test-rolebinding \
  --role test-role \
  --serviceaccount test-namespace:test-sa

### kubectl apply
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: test-rolebinding
  namespace: test-namespace
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: test-role
subjects:
- kind: ServiceAccount
  name: test-sa
  namespace: test-namespace

 

실제 생성 명령어를 사용하지 않고 권한에 대하여 확인하기 위해 'kubectl auth can-i' 명령어를 사용한다.

kubectl -n test-namespace auth can-i create secret \
  --as system:serviceaccount:test-namespace:test-sa
yes

kubectl -n test-namespace auth can-i create configmap \
  --as system:serviceaccount:test-namespace:test-sa
yes

kubectl -n test-namespace auth can-i create pod \
  --as system:serviceaccount:test-namespace:test-sa
no

kubectl -n test-namespace auth can-i delete secret \
  --as system:serviceaccount:test-namespace:test-sa
no

kubectl -n test-namespace auth can-i get configmap \
  --as system:serviceaccount:test-namespace:test-sa
no

 

댓글