Trivy Operator: Escaneo Continuo en Kubernetes¶
Monitorea imágenes, configuraciones y recursos en el clúster con findings continuos, políticas y alertas.
Instalación rápida¶
helm repo add aqua https://aquasecurity.github.io/helm-charts
helm repo update
helm install trivy-operator aqua/trivy-operator -n trivy-system --create-namespace \
--set trivy.ignoreUnfixed=true \
--set trivy.severity=HIGH,CRITICAL
Recursos que genera¶
- VulnerabilityReports (por imagen)
- ConfigAuditReports (por objeto Kubernetes)
- ExposedSecretReports (búsqueda de secretos)
- RbacAssessmentReports (hallazgos RBAC)
Consultar reportes:
kubectl get vulnerabilityreports -A
kubectl get configauditreports -A
kubectl get rbacassessmentreports -A
Alertas con PrometheusRule¶
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: trivy-operator-alerts
namespace: trivy-system
spec:
groups:
- name: trivy
rules:
- alert: TrivyHighVulns
expr: sum by (severity) (trivy_image_vulnerabilities{severity=~"HIGH|CRITICAL"}) > 0
for: 5m
labels:
severity: warning
annotations:
summary: "Vulnerabilidades altas detectadas"
description: "Trivy Operator reporta HIGH/CRITICAL en imágenes"
Enforcing con Kyverno (ejemplo)¶
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: block-high-cves
spec:
validationFailureAction: Enforce
background: true
rules:
- name: image-must-have-report
match:
resources:
kinds: [Pod]
preconditions:
- key: "{{ request.operation }}"
operator: AnyIn
value: ["CREATE", "UPDATE"]
validate:
message: "Imagen sin reporte Trivy o con HIGH/CRITICAL"
deny:
conditions:
- key: "{{ vulnerabilities.high }}"
operator: GreaterThan
value: 0
Buenas prácticas¶
- Ejecutar Trivy Operator en namespace dedicado con PSP/PSA restrictivas
- Usar
trivy.ignoreUnfixed=truepara reducir ruido inicial - Exportar métricas a Prometheus y alertar en Slack/Email
- Revisar hallazgos de RBAC y secretos expuestos regularmente