본문으로 건너뛰기
김신건의 로그

[K8s] RBAC: Role, ClusterRole, ServiceAccount, RoleBinding

· 수정 · 📖 약 1분 · 268자/단어 #kubernetes #rbac #security #k8s #iam
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
ClusterRoleBindingcluster 전체 user → ClusterRole

ServiceAccount

apiVersion: v1
kind: ServiceAccount
metadata:
  name: app-sa
  namespace: default
  • Pod 가 K8s API 호출 할 때의 identity.
  • 기본은 default SA. 명시 권장.
  • 모든 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

  1. verbs: ["*"] 남발 = 권한 최소화 원칙 위배. 필요한 verb 만.
  2. default SA 사용 = 모든 pod 가 같은 권한. 명시 SA + 최소 Role.
  3. apiGroups: ["*"]resources: ["*"] = 모든 자원 접근. cluster-admin과 다를 바 없음.
  4. RoleBinding namespace 잘못 = Role 은 같은 namespace 만. 다른 namespace 면 무효.
  5. 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 이 아니…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기