보안 심화 — OPA, Falco, Supply Chain
기본편 #7(RBAC)을 넘어서는 프로덕션 보안
1. Policy as Code — OPA/Gatekeeper
1.1 왜 Policy as Code인가
RBAC은 **"누가 무엇을 할 수 있는가"**를 제어. 하지만 "어떤 리소스가 어떤 조건을 만족해야 하는가"(예: 모든 Pod에 리소스 제한 필수, 특정 레지스트리만 허용)는 RBAC으로 할 수 없음.
1.2 OPA & Gatekeeper
| 컴포넌트 | 역할 |
|---|---|
| OPA (Open Policy Agent) | 범용 정책 엔진 (Rego 언어) |
| Gatekeeper | OPA의 K8s 네이티브 구현 (Admission Webhook) |
flowchart LR
User_OPA["kubectl apply"] --> API_OPA["API Server"]
API_OPA --> Gatekeeper_OPA["Gatekeeper<br/>(Admission Webhook)"]
Gatekeeper_OPA -->|"정책 위반"| Reject["❌ 거부"]
Gatekeeper_OPA -->|"정책 준수"| Accept["✅ 허용"]
1.3 정책 예시
| 정책 | 설명 |
|---|---|
| 이미지 레지스트리 제한 | gcr.io/myorg/*만 허용 |
| 리소스 제한 필수 | requests/limits 없으면 거부 |
| 레이블 필수 | app, team 레이블 없으면 거부 |
| Privileged 금지 | privileged: true인 Pod 거부 |
| latest 태그 금지 | 이미지 태그가 latest이면 거부 |
2. 런타임 보안 — Falco
2.1 Falco란
시스템 콜을 모니터링하여 컨테이너의 비정상 행위를 실시간 탐지.
| 탐지 예시 | 설명 |
|---|---|
| 컨테이너 내 셸 실행 | kubectl exec 또는 악성 코드 |
/etc/shadow 읽기 | 패스워드 파일 접근 |
| 아웃바운드 네트워크 연결 | 예상치 못한 외부 통신 |
| 바이너리 실행 | 원래 이미지에 없는 프로그램 실행 |
2.2 아키텍처
flowchart LR
Kernel["Linux Kernel<br/>(시스템 콜)"] -->|"eBPF/kprobe"| Falco["Falco Engine<br/>(규칙 매칭)"]
Falco -->|"알림"| Output["Slack / PagerDuty<br/>SIEM / Stdout"]
3. Supply Chain Security
3.1 이미지 보안 파이프라인
flowchart LR
Build["이미지 빌드"] --> Scan["취약점 스캔<br/>(Trivy)"]
Scan --> Sign["이미지 서명<br/>(Cosign)"]
Sign --> Push["레지스트리 Push"]
Push --> Admission["Admission 검증<br/>(서명 확인)"]
Admission --> Deploy["배포"]
| 단계 | 도구 | 역할 |
|---|---|---|
| 스캔 | Trivy, Grype, Snyk | CVE 탐지 |
| 서명 | Cosign (Sigstore) | 이미지 무결성 보장 |
| SBOM | Syft, Trivy | 소프트웨어 구성 목록 생성 |
| 검증 | Kyverno, Gatekeeper | 미서명/미스캔 이미지 차단 |
4. CIS Benchmark
CIS(Center for Internet Security)의 K8s 보안 벤치마크를 자동 검사.
# kube-bench 실행 — CIS 벤치마크 자동 체크
docker run --rm -v /etc:/etc:ro -v /var:/var:ro \
aquasec/kube-bench run
| 영역 | 검사 항목 |
|---|---|
| Master | API Server 설정, etcd 암호화, RBAC |
| Worker | kubelet 설정, 파일 권한 |
| Pod | Security Context, 네트워크 정책 |
다음 글
→ #16 멀티클러스터 & Federation