cve: the scanner reads the derived set, images.txt is gone (#0106)
Criterion one of this piece of work was that the hand-maintained list stops existing and is not replaced by another maintained file. It is deleted here; the scanner reads what the exporter derives. Without a usable list the loop does nothing at all and retries in a minute rather than sleeping out the full day, because after a deploy the exporter only writes the file on its next scrape. The old file staying put during a failed derivation is deliberate: the loop then keeps working from the last known state instead of running into nothing. Probed rather than assumed, with trivy stubbed: no list skips the round, an empty list skips the round, and a list with a comment header scans exactly its two entries.
This commit is contained in:
@@ -1,29 +0,0 @@
|
||||
clamav/clamav:1.5.3
|
||||
coturn/coturn:latest
|
||||
docker.io/grafana/alloy:v1.7.5
|
||||
docker.io/library/haproxy:3.2-alpine
|
||||
docker.io/library/postgres:17.9-bookworm
|
||||
docker.io/livekit/livekit-server:v1.10.0
|
||||
docker.io/postgres:17-alpine
|
||||
docker.io/prometheuscommunity/postgres-exporter:v0.18.1
|
||||
ghcr.io/element-hq/ess-helm/matrix-tools:0.7.3
|
||||
ghcr.io/element-hq/matrix-authentication-service:1.15.0
|
||||
ghcr.io/fluxcd/helm-controller:v1.5.3
|
||||
ghcr.io/fluxcd/kustomize-controller:v1.8.3
|
||||
ghcr.io/fluxcd/notification-controller:v1.8.3
|
||||
ghcr.io/fluxcd/source-controller:v1.8.2
|
||||
ghcr.io/goauthentik/server:2026.2.3
|
||||
gnuxie/draupnir:v3.1.0
|
||||
nginx:1.26-alpine
|
||||
oci.element.io/element-admin:0.1.11
|
||||
oci.element.io/lk-jwt-service:0.4.2
|
||||
oci.element.io/synapse:v1.151.0-ess.1
|
||||
quay.io/jetstack/cert-manager-cainjector:v1.14.0
|
||||
quay.io/jetstack/cert-manager-controller:v1.14.0
|
||||
quay.io/jetstack/cert-manager-webhook:v1.14.0
|
||||
quay.io/prometheus-operator/prometheus-config-reloader:v0.81.0
|
||||
registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.15.0
|
||||
rohana.axion1337.de/sorb/axion-backup:v2
|
||||
rohana.axion1337.de/sorb/axion-secret-rotation:v1
|
||||
rohana.axion1337.de/sorb/clamav-http-scanner:v1.0.0
|
||||
rohana.axion1337.de/sorb/threadnet-web:v0.3.0
|
||||
@@ -1,23 +1,50 @@
|
||||
#!/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).
|
||||
# Trivy-Scan-Schleife (gitops#47, seit #0106 mit abgeleiteter Zielmenge).
|
||||
#
|
||||
# Die Ziele standen bis 2026-08-21 in cve/images.txt und wurden von Hand
|
||||
# nachgezogen. Gemessen an dem Tag: 27 von 51 laufenden Images, also 52 % -
|
||||
# nicht gescannt wurden unter anderem der Web-Client, den jeder Nutzer laedt,
|
||||
# beide Traefik-Schichten und die Registry selbst. Gleichzeitig lief ein Scan
|
||||
# gegen threadnet-web:v0.3.0, ein Image, das nirgends mehr laeuft.
|
||||
#
|
||||
# Seitdem schreibt der cve-exporter die Soll-Menge nach /targets/targets.txt
|
||||
# (Quellen: Cluster-Metriken, cAdvisor des Betriebs-Hosts, Registry). Diese
|
||||
# Datei wird NICHT von Hand gepflegt - siehe ADR-0026.
|
||||
#
|
||||
# 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
|
||||
TARGETS="${TARGETS_FILE:-/targets/targets.txt}"
|
||||
INTERVAL="${SCAN_INTERVAL_SECONDS:-86400}"
|
||||
# ⚠️ Kurze Wartezeit, wenn die Zielliste (noch) fehlt: Beim ersten Start nach
|
||||
# einem Ausrollen schreibt der Exporter sie erst beim naechsten Scrape. Mit dem
|
||||
# vollen 24h-Intervall stuende der Scanner deswegen einen Tag still.
|
||||
WARTEZEIT="${WARTE_INTERVAL_SECONDS:-60}"
|
||||
|
||||
while true; do
|
||||
# ⚠️ Ohne brauchbare Zielliste wird NICHTS getan. Der Exporter schreibt sie
|
||||
# nur, wenn mindestens eine Quelle geliefert hat - faellt die Herleitung
|
||||
# ganz aus, bleibt die alte Datei stehen und diese Schleife arbeitet
|
||||
# weiter mit dem letzten bekannten Stand, statt ins Leere zu laufen.
|
||||
if [ ! -s "$TARGETS" ]; then
|
||||
echo "warte: $TARGETS fehlt oder ist leer - keine Runde"
|
||||
sleep "$WARTEZEIT"
|
||||
continue
|
||||
fi
|
||||
|
||||
anzahl=0
|
||||
while IFS= read -r img; do
|
||||
case "$img" in ""|\#*) continue;; esac
|
||||
anzahl=$((anzahl + 1))
|
||||
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"
|
||||
done < "$TARGETS"
|
||||
|
||||
echo "runde fertig: ${anzahl} Ziele, schlafe ${INTERVAL}s"
|
||||
sleep "$INTERVAL"
|
||||
done
|
||||
|
||||
Reference in New Issue
Block a user