Role Base Access Control 역할 기반 접근제어
역할Role은 네임스페이스 별로 각각 설정할 수 있음 → yaml 파일에서 네임스페이스 명시하기
역할Role 생성
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: developer
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods"] # 축약어 대신 풀네임사용하기 deployments
verbs: ["get", "watch", "list", "create", "update"]
kubectl create -f {파일}
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: devuser-developer-binging
namespace: default
subjects:
- kind: User
name: dev-user # "name" is case sensitive
apiGroup: rbac.authorization.k8s.io
roleRef:
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
kubectl create -f {파일}
kubectl get roles
kubectl describe role {role이름}
kubectl get rolebindings
kubectl describe rolebinding {rb이름}
controlplane ~ ➜ k get roles
NAME CREATED AT
developer 2024-01-11T04:53:41Z
controlplane ~ ➜ k describe role developer
Name: developer
Labels: <none>
Annotations: <none>
PolicyRule:
Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
pods [] [] [list create delete]
controlplane ~ ➜ kubectl get rolebinding
NAME ROLE AGE
dev-user-binding Role/developer 12m
controlplane ~ ➜ kubectl describe rolebinding dev-user-binding
Name: dev-user-binding
Labels: <none>
Annotations: <none>
Role:
Kind: Role
Name: developer
Subjects:
Kind Name Namespace
---- ---- ---------
User dev-user
kubectl auth can-i {명령어} {객체}
kubectl auth can-i create deploy
kubectl auth can-i delete nodes
# 특정 유저의 접근 권한 확인 가능
kubectl auth can-i create deploy --as {유저}
kubectl auth can-i delete nodes --as {유저}
# 특정 유저의 특정 네임스페이스 권한 확인 가능
kubectl auth can-i create deploy --as {유저} --namespace {네임스페이스}
특정 유저로 명령어 실행하기
--as {유저이름}
옵션 추가
# dev-user 유저로 파드 조회
controlplane ~ ✖ kubectl get pods --as dev-user
NAME READY STATUS RESTARTS AGE
red-697496b845-f2b89 1/1 Running 0 33m
red-697496b845-j8ksp 1/1 Running 0 33m
# dev-user 유저로 deploy 조회했으나 권한이 없어 실패
controlplane ~ ➜ kubectl get deploy --as dev-user
Error from server (Forbidden): deployments.apps is forbidden: User "dev-user" cannot list resource "deployments" in API group "apps" in the namespace "default"
조금 더 상세하게 접근 권한을 설정하고 싶다면 사용 가능
5종류의 파드가 존재한다고 할 때,
위의 파일 처럼 파드 접근 역할을 생성한다면
blue와 orange 파드에만 접근 권한이 생긴다.