Files
Thore CimbalandClaude Fable 5 b6007c50fd monitoring: CVE-Pipeline v1 (gitops#47) - Scanner, Exporter, Regeln, Routing, Dashboard
- 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
2026-08-01 13:42:07 +02:00

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