반응형
1. Role과 ClusterRole의 공통적인 설정 방식
RBAC에서 권한을 설정할 때 주요한 3가지 요소는 다음과 같다.
- apiGroups: 해당 리소스가 속한 API 그룹
- 기본적으로 "" (빈 문자열) 은 core API 그룹을 의미하며, pods, services, configmaps 등 기본 리소스가 포함된다.
- 다른 API 그룹(예: apps, batch, networking.k8s.io)도 명시적으로 지정 가능.
- resources: 접근 권한을 설정할 Kubernetes 리소스.
- 예: pods, services, deployments, configmaps, nodes, namespaces 등
- verbs: 리소스에 대해 허용할 작업(권한).
- 예: get, list, watch, create, update, patch, delete
2. 할당 가능한 리소스 종류
(1) Core API 그룹 (빈 문자열 "")
Core API 그룹은 Kubernetes의 기본 리소스를 포함하며, 가장 많이 사용된다.
apiGroups: [""]
resources:
- pods
- services
- configmaps
- secrets
- persistentvolumeclaims
- persistentvolumes
- namespaces
verbs: ["get", "list", "watch", "create", "update", "delete"]
- pods: 파드 관리 (get, list, delete, create 등)
- services: 서비스 리소스 관리
- configmaps: 설정 데이터 관리
- secrets: 보안 관련 데이터 접근 (get 권한 부여 시 보안 위험 주의)
- persistentvolumes, persistentvolumeclaims: 영구 볼륨(PV, PVC) 관리
- namespaces: 네임스페이스 조회 및 관리 (ClusterRole에서 사용)
(2) API 그룹 별 추가 리소스
Core API 그룹 외에도 Kubernetes는 다양한 API 그룹을 제공한다.
① apps 그룹 (배포 및 관리)
apiGroups: ["apps"]
resources:
- deployments
- statefulsets
- daemonsets
- replicasets
verbs: ["get", "list", "watch", "create", "update", "delete"]
- deployments: Deployment 관리
- statefulsets: StatefulSet 관리
- daemonsets: DaemonSet 관리
- replicasets: ReplicaSet 관리
② batch 그룹 (잡 실행)
apiGroups: ["batch"]
resources:
- jobs
- cronjobs
verbs: ["get", "list", "watch", "create", "update", "delete"]
- jobs: 단기 실행 작업 관리
- cronjobs: 정기적으로 실행되는 작업 관리
③ networking.k8s.io 그룹 (네트워크)
apiGroups: ["networking.k8s.io"]
resources:
- ingresses
- networkpolicies
verbs: ["get", "list", "watch", "create", "update", "delete"]
- ingresses: Ingress 설정 관리
- networkpolicies: 네트워크 정책 관리
④ policy 그룹 (보안 정책)
apiGroups: ["policy"]
resources:
- podsecuritypolicies
verbs: ["use"]
- podsecuritypolicies: Pod 보안 정책 (deprecated in Kubernetes 1.21+)
⑤ rbac.authorization.k8s.io 그룹 (RBAC 권한 관리)
apiGroups: ["rbac.authorization.k8s.io"]
resources:
- roles
- rolebindings
- clusterroles
- clusterrolebindings
verbs: ["get", "list", "watch", "create", "update", "delete"]
- roles, rolebindings: 특정 네임스페이스 내 RBAC 설정 관리
- clusterroles, clusterrolebindings: 클러스터 전체의 RBAC 설정 관리
⑥ storage.k8s.io 그룹 (스토리지)
apiGroups: ["storage.k8s.io"]
resources:
- storageclasses
- volumeattachments
verbs: ["get", "list", "watch", "create", "update", "delete"]
- storageclasses: 스토리지 클래스 관리
- volumeattachments: 볼륨 연결 관리
3. Role과 ClusterRole 사용 시 리소스 적용 범위 차이
리소스 종류 | RoleCluster | Role |
Pods | 특정 네임스페이스에서만 관리 가능 | 모든 네임스페이스에서 관리 가능 |
Services | 특정 네임스페이스에서만 관리 가능 | 모든 네임스페이스에서 관리 가능 |
ConfigMaps | 특정 네임스페이스에서만 관리 가능 | 모든 네임스페이스에서 관리 가능 |
Deployments | 특정 네임스페이스에서만 관리 가능 | 모든 네임스페이스에서 관리 가능 |
Nodes | ❌ 지원 안함 | ✅ 클러스터 전체에서 관리 가능 |
Namespaces | ❌ 지원 안함 | ✅ 클러스터 전체에서 관리 가능 |
ClusterRoles | ❌ 지원 안함 | ✅ 클러스터 전체에서 관리 가능 |
- Role은 특정 네임스페이스 내에서만 리소스를 관리할 수 있음.
- ClusterRole은 클러스터 전반에서 모든 네임스페이스의 리소스를 관리 가능.
4. 모든 리소스에 대한 관리 권한 부여
(1) 특정 네임스페이스 내 모든 리소스 접근 (Role)
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: namespace-admin
namespace: my-namespace
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
- apiGroups: ["*"] → 모든 API 그룹을 포함
- resources: ["*"] → 모든 리소스 포함
- verbs: ["*"] → 모든 작업 가능 (조회, 생성, 수정, 삭제 등)
(2) 클러스터 전체의 모든 리소스 접근 (ClusterRole)
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-admin-role
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
- 클러스터 내 모든 네임스페이스의 모든 리소스 접근 가능
- 클러스터 관리자 수준 권한 (주의해서 사용해야 함)
5. 결론
- Role은 네임스페이스 내 리소스만 관리 가능, ClusterRole은 클러스터 전역 리소스 관리 가능.
- API 그룹을 지정하여 특정 Kubernetes 리소스에 대한 권한을 설정할 수 있음.
- *를 사용하여 모든 API 그룹과 리소스에 대한 권한을 할당할 수도 있음.
- 네트워크, 보안, 스토리지 등 다양한 API 그룹을 활용하여 세분화된 RBAC 정책을 적용할 수 있음.
이러한 개념을 잘 이해하고 적절하게 RBAC를 설정하면 Kubernetes 보안을 강화할 수 있다.
반응형
'K8S' 카테고리의 다른 글
[Kubernetes] Service Account 개념 및 활용 (0) | 2025.03.04 |
---|---|
[kubernetes] rolebinding과 clusterrolebinding 할당하는 리소스 (0) | 2025.03.04 |
[kubernetes] RBAC와 role (0) | 2025.03.04 |
[kubernetes] karpenters의 limit range - default vs defaultRequest (0) | 2025.01.26 |
[kubernetes] kubectl alias 설정하기 (0) | 2025.01.23 |
댓글