본문 바로가기
K8S

[kubernetes] rolebinding과 clusterrolebinding 할당하는 리소스

by Rainbound-IT 2025. 3. 4.
반응형

RoleBinding과 ClusterRoleBinding은 Kubernetes에서 Role 또는 ClusterRole을 특정 주체(사용자, 그룹, 서비스 계정 등)에게 할당할 때 사용된다.


1. RoleBinding과 ClusterRoleBinding의 차이

 

RBAC 리소스 할당하는 Role 적용 범위
RoleBinding Role 특정 네임스페이스 내에서만 적용
ClusterRoleBinding ClusterRole 클러스터 전체에서 적용
  • RoleBinding은 특정 네임스페이스 내에서만 Role을 사용자에게 할당할 수 있음.
  • ClusterRoleBinding은 ClusterRole을 클러스터 전체에서 적용할 수 있으며, 특정 네임스페이스에도 적용 가능.

2. RoleBinding과 ClusterRoleBinding이 할당하는 주체 (Subjects)

RoleBinding과 ClusterRoleBinding은 Kubernetes의 사용자 및 서비스 계정에게 접근 권한을 부여할 수 있다.
subjects 필드에 다음과 같은 리소스를 할당할 수 있다.

주체 유형설명

User 특정 사용자를 지정 (외부 인증 시스템 연동 필요)
Group 사용자 그룹 지정 (RBAC를 그룹 기반으로 적용)
ServiceAccount Kubernetes 내 서비스 계정을 지정

각각의 예제를 살펴보자.


3. RoleBinding을 통한 특정 네임스페이스 내 권한 할당

네임스페이스 내 특정 사용자 또는 서비스 계정에 Role을 할당한다.

(1) 특정 사용자에게 Role 할당

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: pod-reader-binding
  namespace: my-namespace
subjects:
- kind: User
  name: example-user
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

설명

  • example-user가 my-namespace에서 pod-reader 역할을 수행할 수 있음.
  • pod-reader는 pods를 get, list, watch할 수 있는 역할을 부여받았다고 가정.

(2) 그룹을 지정하여 Role 할당

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: developers-binding
  namespace: my-namespace
subjects:
- kind: Group
  name: developers
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: dev-role
  apiGroup: rbac.authorization.k8s.io

설명

  • developers 그룹이 my-namespace 내에서 dev-role을 수행 가능.
  • 조직 내 여러 개발자를 하나의 그룹으로 묶어 관리할 때 유용함.

(3) ServiceAccount에 Role 할당

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: serviceaccount-binding
  namespace: my-namespace
subjects:
- kind: ServiceAccount
  name: my-service-account
  namespace: my-namespace
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

설명

  • my-service-account 서비스 계정이 pod-reader 역할을 수행할 수 있도록 설정.
  • CI/CD 파이프라인 또는 애플리케이션 Pod에서 실행되는 서비스 계정에 특정 권한을 부여할 때 사용됨.

4. ClusterRoleBinding을 통한 클러스터 전체 권한 할당

ClusterRoleBinding은 ClusterRole을 사용자(User), 그룹(Group), 또는 서비스 계정(ServiceAccount)에 할당하며, 클러스터 전체에서 권한을 부여한다.

(1) 특정 사용자에게 클러스터 전체 권한 할당

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: cluster-admin-binding
subjects:
- kind: User
  name: admin-user
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

설명

  • admin-user가 cluster-admin 권한을 부여받음.
  • 클러스터 내 모든 네임스페이스와 리소스에 대해 관리 가능.

(2) 특정 그룹에게 클러스터 전체 권한 할당

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: devops-cluster-binding
subjects:
- kind: Group
  name: devops-team
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: view
  apiGroup: rbac.authorization.k8s.io

설명

  • devops-team 그룹이 view 권한을 부여받음.
  • view는 Kubernetes의 사전 정의된 ClusterRole 중 하나로, 모든 네임스페이스에서 리소스를 조회할 수 있음.

(3) ServiceAccount에 ClusterRole 할당

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: cicd-cluster-binding
subjects:
- kind: ServiceAccount
  name: cicd-service
  namespace: cicd-namespace
roleRef:
  kind: ClusterRole
  name: edit
  apiGroup: rbac.authorization.k8s.io

설명

  • cicd-namespace 내 cicd-service 서비스 계정이 edit 권한을 부여받음.
  • edit 권한을 통해 배포 및 수정 작업을 수행할 수 있음.
  • CI/CD 파이프라인에서 필요한 권한을 부여할 때 사용.

5. RoleBinding과 ClusterRoleBinding 적용 범위 정리

 

RBAC 리소스
할당할 수 있는 Role 적용 대상
RoleBinding Role 특정 네임스페이스 내 사용자, 그룹, 서비스 계정
ClusterRoleBinding ClusterRole 클러스터 전체에서 사용자, 그룹, 서비스 계정
  • RoleBinding은 특정 네임스페이스에서만 작동하며, Role과 함께 사용됨.
  • ClusterRoleBinding은 ClusterRole과 함께 사용되며, 클러스터 전체에서 권한을 부여할 수 있음.
  • ClusterRoleBinding을 사용하면 특정 네임스페이스에 제한된 역할도 가능하므로 주의해야 함.

6. 결론

  • RoleBinding은 특정 네임스페이스 내에서 권한을 제한적으로 할당하는 데 사용됨.
  • ClusterRoleBinding은 클러스터 전체에서 권한을 부여하는 데 사용됨.
  • subjects에는 User, Group, ServiceAccount를 지정할 수 있음.
  • 네임스페이스 내에서만 권한을 부여할 때는 Role + RoleBinding을 사용하고, 클러스터 전체에서 관리할 때는 ClusterRole + ClusterRoleBinding을 사용.

이러한 RBAC 설정을 적절히 활용하면 Kubernetes 보안을 강화하면서도 효율적인 권한 관리를 할 수 있다. 

반응형

댓글