RBAC & Security
누가, 무엇을, 어디서 할 수 있는가 — K8s 접근 제어의 핵심
1. 인증 (Authentication)
API Server에 **"나는 누구인가"**를 증명하는 단계.
| 방식 | 설명 | 용도 |
|---|---|---|
| X.509 인증서 | kubeconfig에 인증서 포함 | ✅ kubeadm 기본 |
| Bearer Token | Service Account Token | Pod → API Server |
| OIDC | OpenID Connect (Keycloak, Dex) | 엔터프라이즈 SSO |
| Webhook | 외부 인증 서비스 | 커스텀 인증 |
2. 인가 (Authorization) — RBAC
**"이 사용자가 이 작업을 할 수 있는가"**를 결정.
2.1 RBAC 4대 오브젝트
flowchart LR
subgraph NS["네임스페이스 범위"]
Role["Role<br/>(권한 정의)"]
RB["RoleBinding<br/>(사용자에게 부여)"]
end
subgraph Cluster["클러스터 범위"]
CR["ClusterRole<br/>(권한 정의)"]
CRB["ClusterRoleBinding<br/>(사용자에게 부여)"]
end
Role --> RB
CR --> CRB
CR -->|"네임스페이스에서도 사용 가능"| RB
2.2 Role 예시
# 네임스페이스 내 Pod 읽기 권한
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: production
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
---
# RoleBinding
kind: RoleBinding
metadata:
name: read-pods
namespace: production
subjects:
- kind: User
name: jay
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
2.3 기본 ClusterRole
| ClusterRole | 권한 |
|---|---|
| cluster-admin | 전체 클러스터 관리 (모든 리소스, 모든 동작) |
| admin | 네임스페이스 관리 (RBAC 포함) |
| edit | 네임스페이스 내 리소스 CRUD (RBAC 제외) |
| view | 네임스페이스 내 읽기 전용 |
3. Service Account
3.1 Pod의 API 접근 ID
모든 Pod는 **Service Account(SA)**로 API Server에 인증됨. 네임스페이스마다 default SA가 자동 생성됨.
apiVersion: v1
kind: ServiceAccount
metadata:
name: monitoring-sa
namespace: monitoring
---
# Pod에서 SA 지정
spec:
serviceAccountName: monitoring-sa
3.2 최소 권한 원칙
# SA 자동 마운트 비활성화 (필요 없는 Pod)
automountServiceAccountToken: false
4. Pod Security
4.1 Pod Security Standards (PSS)
| 레벨 | 설명 |
|---|---|
| Privileged | 제한 없음 (호스트 접근 가능) |
| Baseline | 기본 보안 (위험한 권한 차단) |
| Restricted | 엄격 (root 실행 금지, 읽기 전용 FS 등) |
4.2 Security Context
securityContext:
runAsNonRoot: true # root 실행 금지
runAsUser: 1000
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
capabilities:
drop: ["ALL"]
4.3 Pod Security Admission (PSA)
네임스페이스에 레이블로 정책 적용:
metadata:
labels:
pod-security.kubernetes.io/enforce: restricted
pod-security.kubernetes.io/warn: restricted
pod-security.kubernetes.io/audit: restricted
5. 이미지 보안
| 실천 | 방법 |
|---|---|
| 이미지 스캐닝 | Trivy, Grype로 CVE 탐지 |
| 이미지 서명 | Cosign, Sigstore |
| Private Registry | Harbor, ECR, GCR |
| latest 태그 금지 | 항상 명시적 버전 태그 사용 |
| 최소 베이스 이미지 | distroless, Alpine |
다음 글
→ #8 Scheduling & Resource Management