Zum Inhalt

Feldverschlüsselung

Zugangsdaten und andere Geheimnisse liegen in der Datenbank mit AES-256-GCM verschlüsselt. Im Klartext existieren sie nur kurz im Arbeitsspeicher — etwa wenn der Server einem Collector seine Check-Konfiguration ausliefert oder selbst einen Check ausführt.

Was verschlüsselt ist

Bereich Werte
Hosts SNMP-Community, SNMPv3-Auth- und Priv-Passwort, SSH-Passwort, SSH-Schlüssel, Passwort bzw. Token-Geheimnis des API-Kontos
Checks Passwort-, Schlüssel- und Community-Felder in der Check-Konfiguration, als Passwort deklarierte Script-Werte
Zugangsdaten-Sets alle geheimen Felder (SNMP, SSH)
Discovery SNMP-Communities und SNMPv3-Passwörter der Scans und Collector-Vorgaben, Standard-Community
Benachrichtigungskanäle Tokens, Passwörter und Webhook-Adressen
E-Mail-Versand SMTP-Passwort
Anmeldung TOTP-Geheimnisse, SSO-Client-Secrets, LDAP-Bind-Passwort
KI API-Schlüssel der Cloud-Anbieter
Zertifikat privater Schlüssel, ACME-Kontoschlüssel, DNS-Zugangsdaten, EAB-Schlüssel
Push privater Schlüssel des Push-Schlüsselpaars (VAPID)

Schlüssel

FIELD_ENCRYPTION_KEY ist ein Base64url-kodierter 32-Byte-Schlüssel. Das Setup-Script erzeugt ihn mit:

openssl rand -base64 32 | tr '+/' '-_' | tr -d '='

Wirksam ist ausschließlich die Zeile FIELD_ENCRYPTION_KEY=… in der .env neben der Compose-Datei (bei Standard-Installation /opt/vesana/.env) — von dort setzt Docker Compose sie in die Container ein. Das Setup-Script setzt die .env auf Rechte 600 und das Verzeichnis secrets/ auf 700 (Dateien darin 600); ein erneuter Lauf des Installers repariert zu offene Rechte.

secrets/field_encryption_key ist nur eine Kopie

Das Setup-Script legt den Schlüssel zusätzlich unter secrets/field_encryption_key ab. Diese Datei wird von nichts gelesen: keine Compose-Datei bindet sie ein, kein Dienst öffnet sie. Wer beim Umzug nur sie ändert und die .env vergisst, hat nichts geändert — die Instanz läuft weiter mit dem alten Schlüssel.

Ablauf

sequenceDiagram
    participant U as Benutzer
    participant API
    participant DB
    participant C as Collector

    U->>API: Host anlegen mit SNMP-Community
    API->>API: verschlüsseln mit FIELD_ENCRYPTION_KEY
    API->>DB: speichern (Nonce + Chiffretext + Tag)
    Note over DB: Klartext nirgends gespeichert

    C->>API: Check-Konfiguration abholen (HTTPS, API-Key)
    API->>DB: Host lesen
    API->>API: entschlüsseln
    API->>C: Konfiguration mit Zugangsdaten
    Note over C: Klartext nur im Arbeitsspeicher

Maskierung in der API

API-Antworten geben verschlüsselte Felder nie im Klartext zurück, sondern als ***. Auch Super-Admins können gespeicherte Zugangsdaten nur setzen, nicht lesen. Wer ein Formular mit *** (oder einem leeren Passwortfeld) speichert, behält den gespeicherten Wert.

Unverschlüsselter Bestand

Werte aus sehr alten Installationen können noch unverschlüsselt in der Datenbank stehen. Sie werden weiter gelesen und beim nächsten Speichern verschlüsselt.

Schlüsselverlust

Schlüsselverlust = Daten unwiederbringlich

Ohne FIELD_ENCRYPTION_KEY lassen sich verschlüsselte Felder nie wieder lesen. Es gibt keinen Recovery-Mechanismus.

Konsequenz: Das Backup des Schlüssels ist genauso wichtig wie das Datenbank-Backup. Empfehlung in Backup & Restore. Nach einem Restore prüft Vesana, ob sich die verschlüsselten Werte mit dem aktuellen Schlüssel lesen lassen, und warnt, wenn nicht.

Schlüssel wechseln

Einen Schlüsselwechsel unterstützt Vesana nicht — weder in der Oberfläche noch per Werkzeug. Ein neuer FIELD_ENCRYPTION_KEY macht alle bisher verschlüsselten Werte unlesbar: Zugangsdaten an Hosts, Checks, Kanälen und Einstellungen müssten danach neu eingegeben werden, 2FA-Authenticator neu eingerichtet werden. Den Schlüssel deshalb nicht ändern, sondern sicher aufbewahren.

Verschlüsselung in Backups

Datenbank-Dumps enthalten die verschlüsselten Werte (nicht den Klartext, nicht den Schlüssel). Bei einem Restore in eine Instanz mit anderem FIELD_ENCRYPTION_KEY sind die Werte unlesbar — Restore also immer mit demselben Schlüssel.

Daher: .env-Backup zwingend zusammen mit dem Datenbank-Backup, aber nicht am selben Ort:

  • Datenbank-Backup: Volume / Off-Site-Kopie
  • .env: Passwort-Manager / verschlüsselter separater Speicher

Anschluss