[K8s] RBAC: Role, ClusterRole, ServiceAccount, RoleBinding
Kubernetes RBAC, RBAC, K8s RBAC, ServiceAccount, Role, ClusterRole, RoleBinding, ClusterRoleBinding
정의
RBAC (Role-Based Access Control) = K8s 의 권한 부여 모델. 주체 + 권한 + 바인딩.
4 객체
flowchart LR
User[User / Group<br/>또는 ServiceAccount] -->|RoleBinding| Role
User -->|ClusterRoleBinding| CRole[ClusterRole]
Role -->|namespace 안| API[API resources]
CRole -->|cluster 전체| API
| 객체 | 범위 |
|---|---|
Role | 단일 namespace |
ClusterRole | 전체 cluster |
RoleBinding | 같은 namespace 안 user → Role |
ClusterRoleBinding | cluster 전체 user → ClusterRole |
ServiceAccount
apiVersion: v1
kind: ServiceAccount
metadata:
name: app-sa
namespace: default
- Pod 가 K8s API 호출 할 때의 identity.
- 기본은
defaultSA. 명시 권장. - 모든 SA 는 토큰 자동 마운트 (
/var/run/secrets/kubernetes.io/serviceaccount/token).
Role 예시
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
namespace: default
rules:
- apiGroups: [""]
resources: [pods, pods/log]
verbs: [get, list, watch]
- apiGroups: [apps]
resources: [deployments]
verbs: [get, list]
| verb | 의미 |
|---|---|
get | 단일 |
list | 목록 |
watch | 변경 stream |
create | 생성 |
update | 갱신 |
patch | 부분 갱신 |
delete | 삭제 |
deletecollection | 일괄 삭제 |
RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: app-pod-reader
namespace: default
subjects:
- kind: ServiceAccount
name: app-sa
namespace: default
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
ClusterRole + ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata: { name: namespace-admin }
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
---
kind: ClusterRoleBinding
metadata: { name: alice-cluster-admin }
subjects:
- kind: User
name: alice
roleRef:
kind: ClusterRole
name: namespace-admin
검사 / 디버깅
# 내가 무엇을 할 수 있나?
kubectl auth can-i get pods
kubectl auth can-i list secrets --as alice
# 특정 SA 권한
kubectl auth can-i get pods --as=system:serviceaccount:default:app-sa
# 누가 어떤 권한?
kubectl get rolebinding,clusterrolebinding -A | grep alice
Aggregated ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: monitoring
labels:
rbac.authorization.k8s.io/aggregate-to-monitoring: "true"
rules: [...]
다른 ClusterRole 이 자동 결합. 운영 도구의 plugin 권한 추가 패턴.
흔한 함정
WARNING
verbs: ["*"]남발 = 권한 최소화 원칙 위배. 필요한 verb 만.- default SA 사용 = 모든 pod 가 같은 권한. 명시 SA + 최소 Role.
apiGroups: ["*"]와resources: ["*"]= 모든 자원 접근. cluster-admin과 다를 바 없음.- RoleBinding namespace 잘못 = Role 은 같은 namespace 만. 다른 namespace 면 무효.
- token 직접 사용 = 만료 짧음 (1시간 기본, 1.24+). projected SA token 으로 자동 갱신.
관련 위키
이 글의 용어 (4개)
- [Auth] mTLS (Mutual TLS): 양방향 인증서 인증auth-security
- 정의 mTLS (Mutual TLS) 는 서버뿐 아니라 클라이언트도 TLS 인증서로 자기 신분 증명. 일반 TLS = 서버 인증만, mTLS = 양방향. 활용: 서비스 메시 (I…
- [Auth] OAuth 2.0 / 2.1: Authorization Code + PKCEauth-security
- 정의 OAuth 2.0 (RFC 6749, 2012) 은 제3자 앱이 사용자 동의로 자원에 접근 하게 하는 권한 위임 프레임워크. 인증 (authentication) 이 아니라 …
- [AWS] IAM: User, Role, Policy, STScloud
- 정의 IAM (Identity and Access Management) = AWS 의 권한 관리 전부. User, Group, Role, Policy. 객체 | 객체 | 의미 |…
- [K8s] Pod: 컨테이너의 최소 단위, sidecar, lifecyclekubernetes
- 정의 Pod = K8s 의 가장 작은 배포 단위. 1개 이상의 컨테이너 + 공유 네트워크 + 공유 스토리지. [!IMPORTANT] Pod 는 컨테이너의 wrapping 이 아니…
💬 댓글