- cve-scan: Trivy-Loop ueber die 29 real deployten Images (Cluster-Inventur 2026-08-01 + Prod-Web-Image); 24h-Intervall, Fehler einzelner Images blockieren nicht - cve-exporter: Stdlib-Exporter mit first_seen-State (Zeitstrahl), Schema trivy_vuln_info/_count/_first_seen/_last_scan gemaess Pflichtfeldern - 3 Alertregeln (CRITICAL sofort, HIGH mit 24h-Daempfung, Scan-Frische) - promtool SUCCESS 9 rules; alle mit room=security - matrix-alerts: Label-basiertes Raum-Routing (MATRIX_ROOM_<NAME>), Edits landen im richtigen Raum via State - Grafana-Dashboard cve-overview: Severity-Stats, CVE-Tabelle mit NVD-Link/Fix-Version/first-seen, Zeitstrahl, Verlauf UNGETESTET bis zum Deploy auf CFGMON (compose up -d). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
24 lines
933 B
Bash
24 lines
933 B
Bash
#!/bin/sh
|
|
# Trivy-Scan-Schleife (gitops#47): scannt alle 24h die Liste der real deployten
|
|
# Images (cve/images.txt, aus dem Cluster inventarisiert) und legt die
|
|
# JSON-Reports fuer den cve-exporter ab. Kein Abbruch bei Einzelfehlern -
|
|
# ein nicht mehr pullbares Image darf den Rest nicht verhindern (der Exporter
|
|
# alarmiert ueber trivy_last_scan_timestamp, wenn ein Report veraltet).
|
|
set -u
|
|
RESULTS=/results
|
|
IMAGES=/config/images.txt
|
|
INTERVAL="${SCAN_INTERVAL_SECONDS:-86400}"
|
|
|
|
while true; do
|
|
while IFS= read -r img; do
|
|
case "$img" in ""|\#*) continue;; esac
|
|
safe=$(echo "$img" | tr '/:@' '___')
|
|
echo "scan: $img"
|
|
trivy image --scanners vuln --format json --output "$RESULTS/$safe.json.tmp" "$img" \
|
|
&& mv "$RESULTS/$safe.json.tmp" "$RESULTS/$safe.json" \
|
|
|| echo "FEHLER bei $img (Report bleibt auf altem Stand)"
|
|
done < "$IMAGES"
|
|
echo "runde fertig, schlafe ${INTERVAL}s"
|
|
sleep "$INTERVAL"
|
|
done
|