🔒 보안

Kyverno

Kyverno

Kubernetes 네이티브 정책 관리 도구. YAML로 정책 정의.

📖 상세 설명

Kyverno는 Kubernetes 네이티브 정책 관리 도구로, YAML만으로 정책을 정의할 수 있어 Rego 언어를 배울 필요가 없습니다. 2019년 Nirmata에서 개발되었으며, CNCF 프로젝트로 채택되었습니다.

Kyverno의 정책 타입은 validate(검증), mutate(변경), generate(생성), verifyImages(이미지 검증) 4가지입니다. validate로 리소스 스펙을 검증하고, mutate로 기본값을 주입하며, generate로 연관 리소스를 자동 생성합니다.

verifyImages는 Cosign, Notary로 서명된 이미지만 배포하도록 강제합니다. SLSA 출처 증명(attestation)도 검증 가능하여 공급망 보안을 구현할 수 있습니다.

OPA Gatekeeper와 비교하면 학습 곡선이 낮고 Kubernetes 친화적입니다. 단, 매우 복잡한 정책 로직은 Rego가 더 강력할 수 있습니다. 팀의 숙련도와 정책 복잡도에 따라 선택합니다.

💻 코드 예제

# Kyverno 설치
helm repo add kyverno https://kyverno.github.io/kyverno/
helm install kyverno kyverno/kyverno -n kyverno --create-namespace

# ClusterPolicy: 리소스 제한 필수
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: require-resource-limits
spec:
  validationFailureAction: Enforce
  rules:
    - name: require-limits
      match:
        resources:
          kinds:
            - Pod
      validate:
        message: "CPU and memory limits are required"
        pattern:
          spec:
            containers:
              - resources:
                  limits:
                    cpu: "?*"
                    memory: "?*"

---
# ClusterPolicy: 서명된 이미지만 허용
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: verify-image-signature
spec:
  validationFailureAction: Enforce
  rules:
    - name: verify-cosign-signature
      match:
        resources:
          kinds:
            - Pod
          namespaces:
            - production
      verifyImages:
        - imageReferences:
            - "ghcr.io/myorg/*"
          attestors:
            - entries:
                - keyless:
                    issuer: "https://token.actions.githubusercontent.com"
                    subject: "https://github.com/myorg/*"

---
# ClusterPolicy: 기본 레이블 자동 추가 (mutate)
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: add-default-labels
spec:
  rules:
    - name: add-team-label
      match:
        resources:
          kinds:
            - Deployment
      mutate:
        patchStrategicMerge:
          metadata:
            labels:
              +(managed-by): kyverno

🗣️ 실무에서 이렇게 말해요

플랫폼: "Kyverno로 이미지 서명 검증 정책 넣으려고요. verifyImages 쓰면 Cosign 서명 확인 가능해요."

개발팀: "기존 Gatekeeper랑 같이 쓸 수 있나요?"

플랫폼: "네, 둘 다 Admission Webhook이라 공존 가능해요. 근데 역할 중복 안 되게 분리하는 게 좋아요."

면접관: "Kyverno와 OPA Gatekeeper 차이점을 설명해주세요."

지원자: "Kyverno는 YAML 기반으로 정책을 작성하여 학습 곡선이 낮고, mutate와 generate로 리소스 변경/생성이 가능합니다. Gatekeeper는 Rego 언어로 복잡한 로직을 표현할 수 있습니다. 또한 Kyverno는 verifyImages로 이미지 서명 검증을 네이티브로 지원합니다."

리뷰어: "validationFailureAction이 audit인데, 프로덕션에선 enforce로 바꿔야 실제로 차단돼요."

작성자: "맞아요, 테스트 끝나면 enforce로 전환하겠습니다."

⚠️ 주의사항

📚 더 배우기