RBAC (Role Base Access Control)

zuckerfrei·2024년 1월 11일
0

Kubernetes

목록 보기
42/63

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 {파일}

RoleBinding 생성
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 {파일}

RBAC 확인

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"

Resource Name

조금 더 상세하게 접근 권한을 설정하고 싶다면 사용 가능

5종류의 파드가 존재한다고 할 때,
위의 파일 처럼 파드 접근 역할을 생성한다면
blue와 orange 파드에만 접근 권한이 생긴다.

profile
무설탕 음료를 좋아합니다

0개의 댓글