← 목차
Week 6 · Phase 3 운영과 확장
보안과 RBAC
+ Pod Security
인증·인가의 차이, RBAC 4대 리소스, ServiceAccount, X.509/OIDC 사용자, 그리고 Pod Security Admission
학습 자료
· k8s-rbac · podsecurity_admission
산출물 · 팀별 권한 분리 + ServiceAccount + PSA 적용
학습 목표
"누가, 무엇을, 어디까지 할 수 있나"
인증 vs 인가
— Authentication(누구인가)과 Authorization(무엇을 허용)의 차이를 안다
RBAC 4대 리소스
— Role / ClusterRole / RoleBinding / ClusterRoleBinding을 작성한다
ServiceAccount
— Pod 워크로드의 권한을 분리한다
X.509 / OIDC
— 사용자 인증 흐름을 이해하고 직접 사용자를 만든다
Pod Security Admission
— 네임스페이스 단위 Pod 보안 정책을 적용한다
인증(AuthN) → 인가(AuthZ) → Admission
API 요청이 통과하는 3개의 관문
요청
① 인증 (AuthN)
X.509 · OIDC · SA Token
② 인가 (AuthZ)
RBAC 규칙 검사
③ Admission (PSA 등)
정책 검증 → etcd 저장
인증: "너 누구야?" · 인가: "그거 해도 돼?" · Admission: "정책에 맞아?" — 셋 다 통과해야 반영
RBAC 4대 리소스 조합
권한(Role)과 부여(Binding)를 범위(네임스페이스/클러스터)로 조합
리소스
범위
역할
Role
네임스페이스
해당 NS 안의 권한 규칙 정의
ClusterRole
클러스터 전체
클러스터 범위 권한 or 여러 NS 재사용
RoleBinding
네임스페이스
주체(User/SA)에게 Role/ClusterRole을 NS에 부여
ClusterRoleBinding
클러스터 전체
주체에게 ClusterRole을 전 클러스터에 부여
ServiceAccount & Pod Security Admission
워크로드 권한 분리 + 네임스페이스 Pod 보안
ServiceAccount
워크로드의 신원
Pod에 SA 할당 → 해당 권한으로만 API 호출
Token(1.24+ 프로젝티드·단명) 자동 마운트
예: Jenkins SA는
ci NS만
, prod는 read-only
PSA
3 레벨 × 3 모드
레벨:
privileged
/
baseline
/
restricted
모드:
enforce
(차단) /
audit
(기록) /
warn
(경고)
NS 라벨로 적용 · restricted = runAsNonRoot·drop ALL
라이브 실습 — RBAC & 권한 검증
사용자를 만들고 권한 범위를 확인
# 인터랙티브 RBAC 스크립트 (SA→Role/Binding→권한테스트→X.509 사용자)
$
./k8s-rbac.sh
# alice 사용자 권한 영향 범위 검증
$
kubectl
auth can-i --list -n dev --as=alice
$
kubectl
auth can-i create deployments -n prod --as=alice
# no
$
kubectl
auth can-i create deployments -n dev --as=alice
# yes
과제 — 권한 설계 & 강제
회사 시나리오로 권한 체계를 설계
RBAC 설계
팀별 권한 분리
dev팀(dev/test edit) · ops팀(전체 view) · security팀(audit) RBAC 설계서+적용
Jenkins SA: ci NS만 동작, prod read-only
Forbidden 분석 → 최소 권한만 추가 워크플로우 문서화
PSA 강제
restricted 차단
restricted
NS에 권한 부족 Pod 배포 → 차단 로그 분석
워크로드 수정:
runAsNonRoot
, drop ALL capabilities
체크리스트 & 다음 주
이걸 할 수 있으면 Week 6 완료
kubectl auth can-i / impersonation(--as)
을 활용할 수 있다
Role/ClusterRole/RoleBinding/ClusterRoleBinding
4조합
을 그릴 수 있다
X.509 CSR
로 사용자를 만들고 kubeconfig를 발급할 수 있다
Pod에
ServiceAccount
를 할당하고 token을 검증할 수 있다
PSA
3레벨·3모드
(enforce/audit/warn)의 차이를 설명할 수 있다
→
다음 주(Week 7)
— CRD·Operator·Cluster API로 K8s를 확장하고, Helm/Carvel로 패키지를 관리합니다.
‹
›