Kubernetes RBAC(Role-Based Access Control)는 클러스터 리소스에 대한 접근 권한을 역할 기반으로 관리하는 메커니즘이다. 최소 권한 원칙을 구현해 의도치 않은 변경과 보안 사고를 방지한다.
핵심 리소스
Role/ClusterRole: 권한 정의 (어떤 리소스에 어떤 작업)
- Role: 특정 네임스페이스
- ClusterRole: 클러스터 전체
RoleBinding/ClusterRoleBinding: 역할과 주체 연결
- 주체: User, Group, ServiceAccount
Role과 RoleBinding
yaml
# 읽기 전용 Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: production
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods", "pods/log"]
verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["get", "list"]
---
# ServiceAccount에 Role 바인딩
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: production
subjects:
- kind: ServiceAccount
name: monitoring-sa
namespace: monitoring
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
ClusterRole 예시
yaml
# 네임스페이스 관리자
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: namespace-admin
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
- nonResourceURLs: ["/healthz", "/metrics"]
verbs: ["get"]
RBAC 검증
bash
# 권한 확인
kubectl auth can-i create deployments --as=system:serviceaccount:default:mysa -n production
# 모든 권한 나열
kubectl auth can-i --list --as=system:serviceaccount:default:mysa -n production
# rbac-lookup 도구
kubectl rbac-lookup mysa -k serviceaccount
관련 개념