Skip to content

Backup und Wiederherstellung

Was ein MSSP sichert, wie oft und wie wiederhergestellt wird. SocTalk hält den Zustand in drei Schichten; jede hat ihren eigenen Backup- und Wiederherstellungspfad.

Diese Seite baut auf Täglicher Betrieb — Datenbank-Wiederherstellung auf, wo dieselbe Prozedur auf Runbook-Ebene dokumentiert ist. Nutze diese Seite, um die Strategie zu planen; nutze die Betriebsseite für die konkreten Handgriffe.

Was zu sichern ist

1. Postgres (die Control Plane)

soctalk-system-postgres-0 enthält:

  • Mandanten-Zeilen + Lebenszyklus-Ereignisse
  • Benutzer, Sitzungen, Rollen
  • Untersuchungen, Fälle, Runs, Proposals
  • Einstellungen (LLM, Integrationen, Branding)
  • Append-only audit_log und event-sourced case_events
  • Outbox-Zeilen, die auf die Verarbeitung durch den Executor warten

Verlusttoleranz: null. Ein verlorenes Postgres = verlorene Audit-Historie, keine wiederherstellbaren Untersuchungen.

2. Kubernetes Secrets in soctalk-system

Secret (Chart-gerenderter Name)Was darin enthalten ist
soctalk-system-llm-api-keyLLM-Provider-API-Key (installationsweiter Standard)
soctalk-system-bootstrap-adminInitiale Admin-E-Mail + Passwort (falls install.bootstrapAdmin.password in den Values gesetzt)
soctalk-system-jwt-signing-keySignaturschlüssel für Sitzungs-Token
soctalk-system-adapter-signing-keySignaturschlüssel für Adapter-Token
soctalk-system-postgres-admin-credsPostgres-soctalk_admin-Anmeldedaten (Migrationen)
soctalk-system-postgres-app-credsPostgres-soctalk_app-Anmeldedaten (Laufzeit)
soctalk-system-postgres-mssp-credsPostgres-soctalk_mssp-Anmeldedaten (mandantenübergreifende Abfragen)
soctalk-slack-credsSlack-Token (per Env bereitgestellt; nicht Chart-gerendert)
soctalk-thehive-credsTheHive-API-Key (per Env bereitgestellt)
soctalk-cortex-credsCortex-API-Key (per Env bereitgestellt)

Ein neu generierter Satz von Secrets ist wiederherstellbar, aber laufende Sitzungen brechen ab und Integrations-Anmeldedaten müssen erneut eingefügt werden.

3. Mandantenspezifische PVCs

Für jeden tenant-<slug>-Namespace:

PVCWas darin enthalten ist
wazuh-indexer-dataGesamte Wazuh-Warnungs- und Ereignishistorie
wazuh-manager-dataWazuh-Agent-Registrierungen + Manager-Zustand
cortex-dataCortex Elasticsearch (falls Cortex aktiviert)
thehive-dataTheHive Cassandra (falls TheHive aktiviert)

Mandanten mit poc-Profil verwenden local-path, das keine echte Persistenzgarantie bietet — ein Node-Neustart kann Daten verlieren. Mandanten mit persistent-Profil verwenden die StorageClass, die die Installation als Standard markiert; sichere sie gemäß der Dokumentation dieses Provisioners.

Frequenz

SchichtEmpfohlene FrequenzAufbewahrung
Logisches Postgres-Backup (pg_dump)täglich30 Tage
Postgres-WAL-Archivierungkontinuierlich7 Tage
Snapshot der Kubernetes Secretswöchentlich + bei jeder Rotation90 Tage
Mandantenspezifische PVCspassend zum SLA deines Kunden (typischerweise täglich bei Compliance-Arbeit)pro Vertrag

Compliance-Kunden (PCI, HIPAA, SOC 2) erfordern oft längere Aufbewahrung. Behandle die obigen Werte als Untergrenze.

Postgres-Backup

pg_dump (logisch)

Läuft gegen die aktive Datenbank, ohne Ausfallzeit. Langsamere Wiederherstellung als ein physisches Backup, komprimiert aber gut und ist portabel.

bash
kubectl -n soctalk-system exec soctalk-system-postgres-0 -- \
  pg_dump -U soctalk_app -d soctalk -Fc -Z 9 \
  > soctalk-$(date +%Y%m%d).pgdump

Leite die Ausgabe an deinen üblichen Offsite-Speicher weiter (S3, GCS, Azure Blob).

WAL-Archivierung (Point-in-Time)

In diesem Release nicht über das Chart verdrahtet. Das soctalk-system-Chart stellt keinen postgres.archiveCommand-Value bereit, daher erfordert PITR ein Postgres-Deployment außerhalb des im Chart gebündelten StatefulSets. Zwei Wege:

  1. Postgres extern betreiben (verwaltetes RDS / Cloud SQL / Azure Database for PostgreSQL). Konfiguriere WAL-Archivierung / PITR gemäß der Dokumentation des Providers. Das Chart auf ein externes Postgres zeigen zu lassen, ist in V1 nicht über die Values verdrahtet — das Chart codiert die Verbindungsdetails des gebündelten StatefulSets fest in die Rollen-Anmeldedaten-Secrets. Heute bedeutet das entweder, ein eigenes Helm-Overlay zu betreiben, das die DATABASE_URL-Env des API-Deployments patcht, oder soctalk-system-postgres-app-creds / -mssp-creds / -admin-creds nach der Installation zu modifizieren. Ein postgres.external-Values-Regler steht auf der Roadmap.
  2. Sidecar-Archiver in deinem eigenen Helm-Overlay (z. B. spilo oder wal-g als Sidecar). Außerhalb des Umfangs des Charts; läuft als separates Deployment, das WAL an Objektspeicher streamt.

In jedem Fall bleibt die SocTalk-Seite unverändert — die Data Plane behandelt Postgres als externe Abhängigkeit. Die Verdrahtung eines Chart-seitigen archiveCommand ist für ein zukünftiges Release vorgemerkt.

Wiederherstellung (Postgres)

Siehe das Runbook. Zusammenfassung:

  1. Skaliere die API auf null, damit nichts schreibt (das V1-Chart bündelt den Orchestrator in den API-Pod — ein Deployment).
  2. pg_restore den Dump (erst die DB bereinigen).
  3. Bei Verwendung von WAL: WAL bis zum gewünschten Point-in-Time wiedereinspielen.
  4. Skaliere die API wieder hoch.

Nach der Wiederherstellung kann der API-Pod (der den Orchestrator im V1-Chart einbettet) einen Anstoß benötigen, um ausstehende Runs erneut aufzunehmen:

bash
kubectl -n soctalk-system rollout restart deploy soctalk-system-api

Secrets-Backup

K8s Secrets sind wegen des Geheimnismaterials mühsam sicher zu sichern. Zwei Muster:

Sealed Secrets (empfohlen)

Installiere Bitnami sealed-secrets einmal pro Cluster. Wandle deine Secrets in SealedSecret-Ressourcen um; committe diese nach git. Der Controller des Clusters entschlüsselt sie zur Installationszeit. Der Verlust eines Secrets ist aus git wiederherstellbar.

Velero mit restic / kopia

Velero sichert Kubernetes-Ressourcen (einschließlich Secrets) sowie PVCs in Objektspeicher. Verwende den in-tree CSI-Snapshotter für PVCs und Standard-Ressourcen-Backup für Secrets.

bash
velero backup create soctalk-system-daily \
  --include-namespaces soctalk-system \
  --snapshot-volumes \
  --schedule "0 2 * * *"

Mandantenspezifisches PVC-Backup

Mandanten mit persistent-Profil verwenden eine echte StorageClass; nutze die Snapshot-Tools dieses Provisioners:

  • Longhorn: integrierte geplante Backups nach S3
  • Rook/Ceph: RBD-Snapshots oder cephfs-mirror
  • CSI-Cloud-Volumes (EBS/Persistent Disk/Azure Disk): native Snapshot-APIs

Für Velero-Nutzer deckt velero backup create tenant-<slug>-daily --include-namespaces tenant-<slug> --snapshot-volumes sowohl die PVCs als auch die K8s-Objekte in einem Durchgang ab.

Mandantenspezifische Wiederherstellung

  1. Stilllege den bestehenden Mandanten (falls vorhanden) — dies löscht den Namespace.
  2. Stelle die PVCs in einem frischen Namespace aus dem Snapshot wieder her.
  3. Onboarde einen Mandanten mit demselben Slug und Profil über POST /api/mssp/tenants/onboard — die Provisionierung ist idempotent auf dem Namespace, sodass die Helm-Installation die wiederhergestellten PVCs übernimmt.
  4. Prüfe, ob Wazuh die bestehenden Agents sieht (keine erneute Registrierung nötig, wenn die PVC-Wiederherstellung sauber war).

Wenn nur die Data Plane beschädigt ist (nicht die SocTalk-Control-Plane), ist der einfachere Weg helm rollback tenant-<slug>, gefolgt von einer In-Place-Wiederherstellung der PVCs.

Wiederherstellungsübung

Führe vierteljährlich eine Wiederherstellungsübung durch. Wähle einen Non-Prod-Cluster oder einen vorübergehend stillgelegten Mandanten. Zeitlich auf 4 h begrenzen. Dokumentiere, was fehlgeschlagen ist, und aktualisiere diese Seite.

Häufige Fehler, die die Übung aufdeckt:

  • WAL-Lücke (die Archivierung ist während eines Node-Ausfalls zurückgefallen)
  • Secrets, die seit dem letzten Backup rotiert wurden
  • StorageClass-Fehlanpassung zwischen Cluster und Snapshot
  • Netzwerkrichtlinie, die den wiederhergestellten Pod daran hindert, das neue Postgres zu erreichen

Was hier nicht abgedeckt ist

  • Cluster-weite Disaster Recovery (Ausfall von Control-Plane-Nodes usw.) — das ist Kubernetes-Betrieb, nicht SocTalk-spezifisch. Siehe die Dokumentation deiner Distribution.
  • Wiederherstellung von LLM-Provider-Anmeldedaten — außerhalb des Umfangs; verwalte sie mit deinem normalen Runbook zur Secret-Rotation.
  • Backups von Kunden-Endpunkten — Verantwortung des Kunden, nicht des MSSP.

Veröffentlicht unter der Apache-2.0-Lizenz.