init
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
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"
|
||||
Reference in New Issue
Block a user