Skip to main content

RBAC & Security

누가, 무엇을, 어디서 할 수 있는가 — K8s 접근 제어의 핵심


1. 인증 (Authentication)

API Server에 **"나는 누구인가"**를 증명하는 단계.

방식설명용도
X.509 인증서kubeconfig에 인증서 포함✅ kubeadm 기본
Bearer TokenService Account TokenPod → API Server
OIDCOpenID 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 RegistryHarbor, ECR, GCR
latest 태그 금지항상 명시적 버전 태그 사용
최소 베이스 이미지distroless, Alpine

다음 글

→ #8 Scheduling & Resource Management


📝 참고 자료