본문 바로가기
K8S

[kubernetes] role이 할당하는 resource 종류

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

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 보안을 강화할 수 있다.

반응형

댓글