본문 바로가기

쿠버네티스

Kubernetes RBAC(Role-Based Access Control) 정리

728x90

문제 유형

Kubernetes RBAC(Role-Based Access Control) 문제

  • 목적: Kubernetes의 RBAC를 활용하여 특정 네임스페이스(api-access)에서 서비스 계정(cicd-token)이 클러스터 수준의 리소스(deployment, statefulSet, daemonSet)에 대해 필요한 권한을 가질 수 있도록 설정하는 문제입니다.
  • 주요 작업:
    1. ClusterRole 생성 (클러스터 전역에서의 권한 정의)
    2. ServiceAccount 확인 및 설정
    3. ClusterRole과 ServiceAccount를 연결하는 ClusterRoleBinding 생성

문제 해결 전략

요구사항
Kubernetes에서 RBAC를 설정하여 api-access 네임스페이스에 있는 ServiceAccount(cicd-token)가 클러스터 전역에서 다음 리소스에 대해 생성 권한을 가지도록 구성하세요:

  • 리소스: deployment, statefulSet, daemonSet
  • 권한: create

다음 작업을 수행

  1. ClusterRole deployment-clusterrole을 생성하여 위 리소스에 대해 create 권한을 부여합니다.
  2. cicd-token이라는 ServiceAccount가 api-access 네임스페이스에 존재하는지 확인합니다.
  3. ClusterRoleBinding deployment-clusterrolebinding을 생성하여 deployment-clusterrole과 cicd-token을 연결합니다.
  4. 각 단계의 결과를 확인합니다.

 


 

필요한 명령어 

1. ClusterRole 생성

 
kubectl create clusterrole <ClusterRole 이름> --verb=<권한> --resource=<리소스 리스트>​
 
 
 
실제 명령어
kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployment,statefulSet,daemonSet​

 

2. ServiceAccount 생성 확인

 
kubectl get sa --namespace=<네임스페이스>​
 
 
예시
 
kubectl get sa --namespace=api-access​
 
 

3. ClusterRoleBinding 생성

 
kubectl create clusterrolebinding <ClusterRoleBinding 이름> --clusterrole=<ClusterRole 이름> --serviceaccount=<네임스페이스>:<ServiceAccount 이름>
 
 
예시
kubectl create clusterrolebinding deployment-clusterrolebinding --clusterrole=deployment-clusterrole --se

 

4. 결과 확인

생성된 ClusterRole 확인

kubectl get clusterrole <ClusterRole 이름> kubectl describe clusterrole <ClusterRole 이름>
 
생성된 ClusterRoleBinding 확인
kubectl get clusterrolebindings <ClusterRoleBinding 이름> kubectl describe clusterrolebindings <ClusterRoleBinding 이름>

단계별 명령어

1. ClusterRole 생성

kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployment,statefulSet,daemonSet
  • 설명:
    • deployment-clusterrole이라는 이름의 ClusterRole 생성.
    • 리소스(deployment, statefulSet, daemonSet)에 대해 create 권한을 부여.
    • ClusterRole은 클러스터 전역에서 작동.

2. ServiceAccount 확인

kubectl get sa --namespace=api-access
  • 설명:
    • api-access 네임스페이스에서 cicd-token이라는 ServiceAccount가 존재하는지 확인.
    • ServiceAccount가 존재하지 않는다면 추가로 생성해야 함.

3. ClusterRoleBinding 생성

kubectl create clusterrolebinding deployment-clusterrolebinding --clusterrole=deployment-clusterrole --serviceaccount=api-access:cicd-token
 
  • 설명:
    • deployment-clusterrolebinding이라는 이름의 ClusterRoleBinding 생성.
    • deployment-clusterrole과 cicd-token ServiceAccount를 연결.
    • ServiceAccount가 클러스터 전역에서 정의된 권한(create)을 사용할 수 있도록 설정.

4. 결과 확인

ClusterRole 확인

 

설명: deployment-clusterrole이 제대로 생성되었는지 확인

kubectl get clusterrole deployment-clusterrole kubectl describe clusterrole deployment-clusterrole
 
 
ClusterRoleBinding 확인
 
 
설명: deployment-clusterrolebinding이 ServiceAccount와 올바르게 연결되었는지 확인
kubectl get clusterrolebindings deployment-clusterrolebinding kubectl describe clusterrolebindings deployment-clusterrolebinding

 

728x90