apiVersion: kyverno.io/v1 kind: ClusterPolicy metadata: name: check-image-vulnerabilities annotations: policies.kyverno.io/title: "Проверка уязвимостей образов через внешний API" policies.kyverno.io/category: Security policies.kyverno.io/severity: critical policies.kyverno.io/subject: Pod policies.kyverno.io/description: >- Проверяет образ контейнера через внешний vulnerability scanning API перед деплоем в production. Блокирует деплой если найдены критические уязвимости. НАСТРОЙТЕ URL вашего сканера (Trivy, Snyk, Grype и т.д.) Требует: admissionController.extraArgs: [--enableExternalDataCall=true] spec: validationFailureAction: Enforce background: false # только для живых запросов, не background scan rules: - name: check-critical-vulnerabilities match: resources: kinds: - Pod namespaces: - production preconditions: any: - key: "{{ request.operation }}" operator: In value: [CREATE, UPDATE] context: - name: scanResult apiCall: # Замените на URL вашего vulnerability API urlPath: "https://vuln-api.company.com/v1/scan" method: POST data: - key: image value: "{{ request.object.spec.containers[0].image }}" - key: severity value: CRITICAL jmesPath: "critical_count || `0`" validate: message: >- Образ '{{ request.object.spec.containers[0].image }}' содержит {{ scanResult }} критических уязвимостей. Деплой в production запрещён. Обновите базовый образ и пересоберите: https://vuln-api.company.com/report deny: conditions: - key: "{{ scanResult }}" operator: GreaterThan value: "0"