티스토리 뷰
쿠버네티스 실습: Zero Trust 클러스터 구축 — Istio mTLS + OPA + Kyverno 완전 가이드
octo54 2025. 10. 28. 12:00쿠버네티스 실습: Zero Trust 클러스터 구축 — Istio mTLS + OPA + Kyverno 완전 가이드
이전 글에서는 Vault + OIDC + ArgoCD를 이용한 DevSecOps 파이프라인을 구축해,
비밀번호·API 키·인증 토큰이 코드에 노출되지 않는 보안 중심 자동화 환경을 완성했습니다.
이번 글에서는 그 위에 Zero Trust Architecture(제로 트러스트 아키텍처) 를 도입해
네트워크·정책·런타임 레벨까지 완전한 보안 제어를 실현합니다.
1) Zero Trust란?
**Zero Trust(제로 트러스트)**는 "기본적으로 어떤 요청도 신뢰하지 않는다"는 철학입니다.
즉, 내부 트래픽이라도 항상 인증·인가·암호화를 거쳐야 합니다.
구분 기존 보안 Zero Trust
| 신뢰 모델 | 내부망은 신뢰 | 모든 요청 검증 |
| 인증 방식 | 네트워크 레벨 인증 | ID 기반 인증(OIDC, Service Account) |
| 트래픽 보호 | 방화벽 기반 | mTLS 전면 적용 |
| 접근 제어 | 수동 RBAC 설정 | 정책 엔진(Kyverno/OPA) 자동 제어 |
이번 실습의 목표는 다음과 같습니다:
“Pod 간 통신부터 데이터 접근, 정책 승인까지 모두 코드와 인증 기반으로 통제한다.”
2) 전체 아키텍처
[User / Developer]
↓ (OIDC)
[Vault / ArgoCD]
↓
[Istio Service Mesh]
├── mTLS 트래픽 암호화
├── OPA(Gatekeeper) 접근 제어
└── Kyverno 정책 검증
핵심 요소:
- Istio → 서비스 간 통신을 암호화하고 정책 적용
- OPA (Open Policy Agent) → 클러스터 접근 제어
- Kyverno → 리소스 수준의 정책 검증 (Pod, Deployment 등)
3) Istio로 mTLS 전면 적용
3-1. 설치
istioctl install --set profile=default -y
kubectl label namespace team-a istio-injection=enabled
3-2. 기본 PeerAuthentication 정책
모든 서비스 간 트래픽을 mTLS로 암호화합니다.
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: team-a
spec:
mtls:
mode: STRICT
적용 후 확인:
istioctl authn tls-check
결과:
HOST:PORT STATUS SERVER CLIENT
backend:8080 OK mTLS mTLS
frontend:8080 OK mTLS mTLS
4) OPA Gatekeeper로 정책 기반 접근 제어
4-1. 설치
kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/release-3.x/deploy/gatekeeper.yaml
4-2. Policy 예제 — Root 권한 금지
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPNoPrivileged
metadata:
name: disallow-privileged
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
→ Root 권한을 요구하는 Pod은 배포 거부됩니다.
테스트:
kubectl apply -f pod-privileged.yaml
# Error: violates policy "disallow-privileged"
5) Kyverno로 선언적 보안 정책 적용
Kyverno는 "쿠버네티스 네이티브" 정책 엔진으로, YAML 수준에서 보안 검증을 자동화합니다.
5-1. 설치
kubectl create -f https://github.com/kyverno/kyverno/releases/download/v1.12.0/install.yaml
5-2. 예시 정책 — 이미지 서명 검증
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: verify-image-signatures
spec:
validationFailureAction: enforce
rules:
- name: verify-image-signatures
match:
resources:
kinds:
- Pod
verifyImages:
- image: "registry.example.com/*"
key: "cosign.pub"
→ 서명되지 않은 이미지 배포 시 자동 거부.
6) Vault + Istio 통합 — mTLS 인증서 자동 발급
Vault는 Istio용 인증서(Identity Issuer) 역할도 할 수 있습니다.
vault secrets enable pki
vault write pki/root/generate/internal common_name="cluster.local"
vault write pki/roles/istio \
allowed_domains="*.svc.cluster.local" \
allow_subdomains=true \
max_ttl="72h"
Istio 설정 변경:
istioctl install \
--set values.global.pilotCertProvider=vault \
--set values.global.vault.address=http://vault.vault.svc:8200
→ Istio 사이드카가 Vault로부터 인증서를 자동 발급받고, mTLS가 완전 자동화됩니다.
7) 예시 — 네트워크 정책 시나리오
상황 결과
| 백엔드 → DB 연결 | 허용 (mTLS 인증) |
| 프론트엔드 → Redis 연결 | 허용 |
| 외부 Pod → DB 접근 | 거부 (OPA 정책) |
| 서명되지 않은 이미지 배포 | 거부 (Kyverno) |
| Root 권한 Pod 실행 | 거부 (OPA PSP 정책) |
→ 완벽한 Zero Trust 통신 환경 완성.
8) Observability & 감사 로깅
Istio + OPA + Kyverno의 결합으로 모든 보안 이벤트가 로깅됩니다.
Prometheus + Grafana 대시보드에서 다음 지표를 모니터링할 수 있습니다.
- istio_requests_total{response_code="403"} → 접근 거부율
- kyverno_policy_violations_total → 정책 위반 횟수
- opa_decision_latency_seconds → 정책 평가 지연
9) DevSecOps 파이프라인 요약
Terraform → 클러스터 생성
Helm → 애플리케이션 배포
ArgoCD → 자동 동기화
Vault → Secret 및 인증 관리
Istio → 트래픽 암호화(mTLS)
OPA/Kyverno → 정책 검증 및 차단
Prometheus/Grafana → 모니터링 및 감사
→ 배포, 보안, 모니터링, DR까지 모두 자동화된 Self-Healing Zero Trust Cluster 구축.
10) 정리
- Istio mTLS로 모든 트래픽 암호화
- OPA Gatekeeper로 클러스터 접근 제어
- Kyverno로 YAML 수준 보안 정책 적용
- Vault 인증서 자동발급 + OIDC 통합으로 운영자 인증 자동화
- Zero Trust 모델의 핵심: “코드가 곧 보안 정책이다.”
다음 글에서는 이러한 Zero Trust 기반 인프라 위에
Service-to-Service 권한 인증(JWT, OAuth2, SPIFFE/SPIRE 기반 Identity Management) 를 적용해
정책 기반 마이크로서비스 접근 제어를 구현하겠습니다.
쿠버네티스,ZeroTrust,DevSecOps,Istio,mTLS,OPA,Kyverno,보안자동화,Policy엔진,K8s실습
🔍 확인할 만한 자료
- Istio 공식 문서에서 mTLS 설정과 강제 적용 방법이 잘 설명되어 있습니다. (Istio)
- HashiCorp Vault를 Istio‑CSR 또는 cert‑manager 와 연동해, Vault를 내부 PKI로 사용하는 방식이 실제 사례로 존재합니다. (Medium)
- Vault + Istio 환경에서 mTLS Strict 모드 적용 시 주의사항(예: Vault가 사이드카 주입된 상태에서 시작 문제)도 커뮤니티에서 언급되고 있습니다. (HashiCorp Discuss)
✅ 추천 보완 사항
- Vault를 Istio의 CA(인증서 발급원)로 사용하는 경우, 설정이 꽤 복잡하므로 별도의 단계로 자세히 설명하는 것이 좋겠습니다.
- OPA 및 Kyverno 정책 엔진을 적용할 때 주요 예시 외에도 실무에서 자주 사용하는 정책(예: 이미지 서명 검증, namespace 라벨 강제화 등)을 조금 더 추가하면 좋겠습니다.
- Zero Trust 모델을 구축할 때, 네트워크 계층(mTLS) 외에도 런타임 제어, 서비스 계정 권한, 리소스 접근 제어까지 포함하는 구조라는 점을 강조하면 좋습니다.
- 설치 명령어나 버전 정보는 시간이 지나면 바뀔 수 있으므로 “버전 확인 필요”라는 주의를 한 줄 넣으면 독자에게 도움이 됩니다.
- 예제 YAML/스크립트 제공 시, 실제 운영 환경을 고려해 “dev/test vs prod” 차이나 “롤백/정책 변경” 흐름도 추가하면 좋습니다.
'project > 맥미니로 시작하는 쿠버네티스' 카테고리의 다른 글
- Total
- Today
- Yesterday
- DevOps
- JAX
- 웹개발
- llm
- NestJS
- REACT
- nextJS
- ai철학
- seo 최적화 10개
- 개발블로그
- 생성형AI
- SEO최적화
- fastapi
- flax
- Redis
- Python
- 딥러닝
- kotlin
- Next.js
- Prisma
- 쿠버네티스
- Docker
- node.js
- 백엔드개발
- JWT
- PostgreSQL
- rag
- LangChain
- Express
- CI/CD
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |

