티스토리 뷰

반응형

쿠버네티스 실습: 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” 차이나 “롤백/정책 변경” 흐름도 추가하면 좋습니다.

 

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
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
글 보관함
반응형