반응형
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 보안을 강화하면서도 효율적인 권한 관리를 할 수 있다.
반응형
'K8S' 카테고리의 다른 글
[kubernetes] API groups 를 활용하여 리소스 제어 (0) | 2025.03.04 |
---|---|
[Kubernetes] Service Account 개념 및 활용 (0) | 2025.03.04 |
[kubernetes] role이 할당하는 resource 종류 (0) | 2025.03.04 |
[kubernetes] RBAC와 role (0) | 2025.03.04 |
[kubernetes] karpenters의 limit range - default vs defaultRequest (0) | 2025.01.26 |
댓글