OpenBao-Secret-Backend verwenden
Standardmäßig liest SupaCloud alle Geheimnisse aus Umgebungsvariablen. Durch
Setzen von SECRET_BACKEND=openbao wird OpenBao zur maßgeblichen Quelle: Der
Server lädt alle Geheimnisse auf Anwendungsebene aus dem einzelnen KV-v2-Pfad
supacloud/app, bevor die Validierung der erforderlichen Geheimnisse ausgeführt
wird. Umgebungsvariablen bleiben als erlaubte Überschreibung über dem Vault
erhalten — sie haben immer Vorrang gegenüber dem vault-gelieferten Wert.
Voraussetzungen
Abschnitt betitelt „Voraussetzungen“- Ein OpenBao- oder HashiCorp-Vault-kompatibler Server mit aktiviertem KV v2 am
supacloud-Mount. - Der SupaCloud-Serverprozess kann die Vault-Adresse (
VAULT_ADDR) erreichen. - Entweder ein statisches Token oder eine AppRole mit Lesezugriff auf
supacloud/appund die bestehenden subsystemspezifischen Pfade (supacloud/db,supacloud/messaging,supacloud/management,supacloud/ai,supacloud/registry).
1. Vault-Authentifizierung konfigurieren
Abschnitt betitelt „1. Vault-Authentifizierung konfigurieren“-
Statisches Token — eine einzelne Umgebungsvariable setzen:
Terminal window VAULT_ADDR=https://vault.example.comVAULT_TOKEN=<your-token> -
AppRole — stattdessen Role-ID und Secret-ID setzen:
Terminal window VAULT_ADDR=https://vault.example.comOPENBAO_ROLE_ID=<role-id>OPENBAO_SECRET_ID=<secret-id>Der Server meldet sich beim Start an, dann erneuert eine Hintergrundschleife das Token bei etwa der Hälfte seiner TTL und meldet sich bei einem Erneuerungsfehler automatisch neu an (Issue #385). Die Richtlinie der AppRole sollte
auth/token/renew-selferlauben; andernfalls deckt der Neuanmelde-Fallback dies ab.
2. Geheimnisse in supacloud/app schreiben
Abschnitt betitelt „2. Geheimnisse in supacloud/app schreiben“Alle Geheimnisse auf Anwendungsebene befinden sich in einer einzelnen KV-v2-Zuordnung, deren Schlüssel der jeweilige Name der Umgebungsvariablen ist. Einmalig schreiben; einzelne Schlüssel beim Rotieren eines Geheimnisses aktualisieren:
vault kv put supacloud/app \ SUPACLOUD_CREDENTIAL_ENCRYPTION_KEY="base64:<32-byte key>" \ SUPACLOUD_JWT_SECRET="<min-32-chars>" \ OIDC_CLIENT_SECRET="<value>" \ SUPACLOUD_MCP_CONFIRMATION_SECRET="<min-32-chars>" \ DISCORD_BOT_TOKEN="<value>" \ STRIPE_SECRET_KEY="<value>" \ STRIPE_WEBHOOK_SECRET="<value>" \ SUPACLOUD_LINEAR_OAUTH_CLIENT_ID="<value>" \ SUPACLOUD_LINEAR_OAUTH_CLIENT_SECRET="<value>" \ SUPACLOUD_NOTION_OAUTH_CLIENT_ID="<value>" \ SUPACLOUD_NOTION_OAUTH_CLIENT_SECRET="<value>"Nur die Schlüssel aufnehmen, die dein Deployment verwendet; unbekannte Schlüssel werden ignoriert.
Der Verschlüsselungsschlüssel für Zugangsdaten wird in einen prozessinternen
Halter (secret_store) geladen und nie in std::env geschrieben, sodass er
nicht von Agent-Containern oder dem Code-Runner-Subprozess geerbt werden kann.
3. SECRET_BACKEND=openbao setzen
Abschnitt betitelt „3. SECRET_BACKEND=openbao setzen“Zur Server-Umgebung (oder .env) hinzufügen:
SECRET_BACKEND=openbaoDer Server wird nun:
supacloud/appaus dem Vault laden und jedesAppConfig-Feld füllen, das nach dem Env-Durchlauf noch leer ist.- Den prozessinternen Verschlüsselungsschlüssel-Halter und die generische Secret-Map für verzögerte Aufrufstellen (Stripe, SMTP, FinTS, Edition-Lizenz) befüllen.
- Die Validierung der erforderlichen Geheimnisse ausführen —
SUPACLOUD_JWT_SECRETund der Verschlüsselungsschlüssel für Zugangsdaten werden nach der Hydration erneut geprüft (inAppConfig::validate_required), sodass ein vault-gelieferter Wert die Anforderung erfüllt.SUPACLOUD_INITIAL_ADMIN_EMAILSist ein nicht-geheimer Produktions-Guard, der infrom_envvor dem Vault-Lesen validiert wird und nicht über diesupacloud/app-Map bereitgestellt werden kann. - Beim Start mit einer Fehlermeldung abbrechen, wenn ein erforderliches Geheimnis weder im Vault noch in der Umgebung vorhanden ist.
Einrichtung überprüfen
Abschnitt betitelt „Einrichtung überprüfen“Im Server-Startprotokoll nach den Loaded … from OpenBao-Einträgen suchen
(sowie Cached vault secret: … je Pfad), zum Beispiel:
Loaded app secrets from OpenBaoCached vault secret: supacloud/appCached vault secret: supacloud/dbFehlt ein erforderliches Geheimnis in beiden Quellen, beendet sich der Prozess mit einer Meldung, die die Variable benennt, z. B.:
SUPACLOUD_CREDENTIAL_ENCRYPTION_KEY must be set in prod so databasecredential material is encrypted at restAuf reine Umgebungsvariablen zurückschalten
Abschnitt betitelt „Auf reine Umgebungsvariablen zurückschalten“SECRET_BACKEND=env setzen (oder VAULT_TOKEN/OPENBAO_ROLE_ID entfernen,
damit die automatische Erkennung auf env zurückfällt). Der Server kontaktiert
OpenBao dann nicht mehr und liest alle Geheimnisse direkt aus den
Umgebungsvariablen.