Killer Shell CKA - RBAC ServiceAccount Permissions

1 개요[ | ]

Killer Shell CKA - RBAC ServiceAccount Permissions

2 실습[ | ]

1) ServiceAccount 생성

k -n ns1 create sa pipeline
k -n ns2 create sa pipeline

2) 클러스터 전역 조회 권한 부여(ClusterRole view 사용)

k get clusterrole view
k create clusterrolebinding pipeline-view \
  --clusterrole=view \
  --serviceaccount ns1:pipeline \
  --serviceaccount ns2:pipeline

3) 각 네임스페이스에서만 Deployment 생성/삭제 가능하도록 권한 부여

  • 방법: ClusterRole 1개를 만들고, 각 네임스페이스에서 RoleBinding으로 연결
k create clusterrole pipeline-deployment-manager \
  --verb=create,delete --resource=deployments

k -n ns1 create rolebinding pipeline-deployment-manager \
  --clusterrole=pipeline-deployment-manager \
  --serviceaccount ns1:pipeline

k -n ns2 create rolebinding pipeline-deployment-manager \
  --clusterrole=pipeline-deployment-manager \
  --serviceaccount ns2:pipeline
  • 참고: 동일한 내용을 네임스페이스별 Role로 각각 만들어도 된다(ClusterRole 대신 Role).

3 검증[ | ]

ServiceAccount로 권한 확인

# ns1 파이프라인: ns1에서만 배포 생성/삭제 가능
k auth can-i create deployments --as system:serviceaccount:ns1:pipeline -n ns1  # YES
k auth can-i delete deployments --as system:serviceaccount:ns1:pipeline -n ns1  # YES
k auth can-i update deployments --as system:serviceaccount:ns1:pipeline -n ns1  # NO
k auth can-i create deployments --as system:serviceaccount:ns1:pipeline -n default  # NO

# ns2 파이프라인: ns2에서만 배포 생성/삭제 가능
k auth can-i create deployments --as system:serviceaccount:ns2:pipeline -n ns2  # YES
k auth can-i delete deployments --as system:serviceaccount:ns2:pipeline -n ns2  # YES
k auth can-i update deployments --as system:serviceaccount:ns2:pipeline -n ns2  # NO
k auth can-i create deployments --as system:serviceaccount:ns2:pipeline -n default  # NO

# 클러스터 전역 조회(view) 권한
k auth can-i list deployments --as system:serviceaccount:ns1:pipeline -A  # YES
k auth can-i list pods        --as system:serviceaccount:ns1:pipeline -A  # YES
k auth can-i list pods        --as system:serviceaccount:ns2:pipeline -A  # YES
k auth can-i list secrets     --as system:serviceaccount:ns2:pipeline -A  # NO (기본 view는 secrets 비허용)

4 RBAC 요약[ | ]

  • 권한을 정의하는 리소스와 적용 범위
    • Role: 단일 네임스페이스 범위에서 권한 정의
    • ClusterRole: 클러스터 전역에서 권한 정의
  • 권한을 주체(ServiceAccount 등)에 연결하는 리소스와 적용 범위
    • RoleBinding: 단일 네임스페이스에 적용
    • ClusterRoleBinding: 클러스터 전역에 적용
  • 유효한 조합
    • Role + RoleBinding: 단일 네임스페이스에서 권한 정의·적용
    • ClusterRole + ClusterRoleBinding: 클러스터 전역에서 권한 정의·적용
    • ClusterRole + RoleBinding: 권한은 전역에 정의, 적용은 단일 네임스페이스
  • 잘못된 조합
    • Role + ClusterRoleBinding: 불가(네임스페이스 한정 권한을 전역에 바인딩할 수 없음)

5 같이 보기[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}