본문 바로가기
따배쿠

[따배쿠/멤버십] 13-2. 인증과 권한 관리 - 권한관리편

by Engineer-Lee 2022. 11. 19.
반응형

이번에는 serviceaccount의 권한 관리를 하는 role과 rolebinding에 대해 알아보자

 

role은 serviceaccount가 어떤 api를 이용할 수 있는지 사용권한을 정의해준다.

rolebinding은 user 또는 group과 serviceaccount와 role을 연결해준다.

https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/#normal-user

 

 

13-1 강의에 이어서 이번에는 새로 만든 serviceaccount에 role을 할당해보자

role은 해당하는 네임스페이스 내에서는 유효하다.

cluster role은 전체 네임스페이스에서 유효하다.

 

kubectl create role developer --verb=create --verb=get --verb=list --verb=update --verb=delete --resource=pods

developer라는 이름의 role에 pod에 대해 create, get, list, update, delete 권한을 부여한다.

 

이제 kubectl create rolebinding developer-binding-myuser --role=developer --user=myuser 로 rolebinding을 한다.

 

myuser의 키와 인증서를 쿠버네티스 config 파일에 등록하자

kubectl config set-credentials myuser --client-key=myuser.key --client-certificate=myuser.crt --embed-certs=true 로 myuser라는 유저를 등록한다.

 

kubectl config set-context myuser --cluster=kubernetes --user=myuser 로 config 파일에 context를 등록한다.

 

kubectl config current-context 로 보면 현재 context는 admin이다,

kubectl config use-context myuser myuser를 통해 myuser로 context change 한다.

 

myuser는 pod에 대한 권한만 있기에 service를 get하진 못한다.

 

 

 

 

이제 cluster role에 대해 알아보자

cluster role은 전체 네임스페이스에서 유효하다.

 

kubectl config use-context kubernetes-admin@kubernetes로 context를 admin으로 바꾼다.

 

그리고 kubectl delete rolebindings.rbac.authorization.k8s.io developer-binding-myuser로 rolebinding을 삭제하고

kubectl delete role developer로 role도 삭제한다.

 

 

kubectl create clusterrole developer --verb=create --verb=get --verb=list --verb=update --verb=delete --resource=pods developer라는 이름의 cluster role에 pod에 대해 create, get, list, update, delete 권한을 부여한다.

 

kubectl create clusterrolebinding developer-binding-myuser --clusterrole=developer --user=myuser

cluster role binding을 한다.

 

이제 kubectl config use-context myuser로 cluster role을 가진 myuser로 context를 바꾸고

kubectl get pods -n kube-system로 kube-system로 네임스페이스의 pod들 또한 get 할 수 있다.

 

 

이제 지금까지 만들었던 것을 모두 삭제해보자

kubectl config use-context kubernetes-admin@kubernetes 로 admin으로 context를 바꾼다.

그리고 아래의 일련의 작업들을 한다.

 

 

 

kubectl describe clusterrole view 로 view라는 cluster role을 보자

대부분의 리소스에 get, list, watch 권한을 가지고 있다.

이를 이용해서 kubectl create clusterrolebinding developer-binding-myuser --clusterrole=view-user=myuser 하게 되면 myuser가 view라는 cluster role 의 권한을 가지게 된다.

 

cluster-admin은 전체 리소스에 대해 모든 권한을 가진다.

이는 쿠버네티스 admin과 동일한 권한이다.

반응형