Zum Hauptinhalt springen
Version: 1.89.x (Q2 26)

Secret Management

Preview Feature

Secret Management ist derzeit eine Preview-Funktion. Es wird hier eine frühe Version dieser Funktionalität gezeigt, die sich in zukünftigen Updates noch ändern kann, während die Erfahrung weiter verbessert wird.

Codesphere bietet ein Secret-Management-System, das mit OpenBao, einem Open-Source-Sicherheitstresor, integriert ist. Dadurch wird sichergestellt, dass sensible Daten wie API-Schlüssel, Datenbank-Zugangsdaten und Zertifikate mit branchenüblicher Verschlüsselung gespeichert und nur bei Bedarf in die Services eingespeist werden.

Überblick​

Im Gegensatz zu Standard-Umgebungsvariablen werden Secrets in einem Vault gespeichert, der mit einer Codesphere-Instanz ausgeliefert wird. Dies bietet mehrere Vorteile:

  • Verschlüsselung im Ruhezustand: Alle Werte werden vor der Speicherung verschlüsselt.
  • Granularer Zugriff: Nur Services, die explizit auf ein Secret verweisen, können auf dessen Wert zugreifen.
  • Automatische Bereinigung: Secrets sind an den Lifecycle des Workspace gebunden.
info

Derzeit haben nur Admins einer Codesphere-Installation direkten Zugriff auf den Vault.

Secrets referenzieren​

Secrets werden im Landscape Config Editor verwaltet. Um ein Secret zu definieren, muss unabhängig davon, ob die UI oder die YAML-Konfiguration verwendet wird, eine bestimmte Template-Syntax genutzt werden.

Template-Syntax: ${{ vault.secretKeyOfBao }}

Um mit dem visuellen Editor ein Secret zu einem Service hinzuzufügen:

  1. Öffne den Landscape Config Editor im Workspace.
  2. Wähle den zu konfigurierenden Service aus und öffne das Fly-in-Sheet Edit Service.
  3. Wechsle zum Tab Values.
  4. Füge einen neuen Eintrag mit der Template-Syntax hinzu:
    • Key: Der Name der Umgebungsvariable, die vom Service verwendet wird (z. B. SECRET_KEY).
    • Value: Das Template, das auf den Vault-Key verweist (${{ vault.secretFoo }}).

Konfigurationsansicht des Secret Management mit Secret-Key-Einträgen und Optionen zur Wertebehandlung. Konfiguration von Umgebungsvariablen mithilfe von Vault-Templates im Tab „Values“ des Service.

Erweiterte Environment-Templates​

Neben Vault-Secrets unterstützt Codesphere dynamische Templates, um auf System-IDs oder bestehende Workspace-Umgebungsvariablen zu verweisen. Diese sind besonders nützlich, um die Konfiguration portabel zu machen oder Variablen neu zuzuordnen.

TemplateBeschreibung
${{ workspace.id }}
Wird zur ID des Workspace aufgelöst, der die Landscape enthält.
${{ team.id }}
Wird zur ID des Teams aufgelöst, dem der Workspace gehört.
${{ workspace.env['KEY'] }}
Wird zu einer globalen Umgebungsvariable des Workspace aufgelöst.

Anwendungsfall: Variablen-Remapping​

Mit dem Template ${{ workspace.env[...] }} können globale Variablen auf spezifische Service-Anforderungen abgebildet werden.

Erwartet beispielsweise ein Backend-Service eine Umgebungsvariable namens PG_USER, die Datenbank-Zugangsdaten sind jedoch global als BACKEND_PG_USER gespeichert, um Namenskollisionen mit anderen Datenbanken zu vermeiden, kann die Zuordnung wie folgt erfolgen:

env:
PG_USER: ${{ workspace.env['BACKEND_PG_USER'] }}

Sync und Persistenz​

Nach dem Definieren der Secret-Referenzen muss das Landscape Profile im Execution Manager synchronisiert werden.

Der Sync-Vorgang​

Wenn die ausgewählte ci.yml-Datei während einer Landscape-Synchronisierung neue Secret-Referenzen enthält, ist der Nutzer selbst dafür verantwortlich, die tatsächlichen Secret-Werte bereitzustellen. Der Ablauf umfasst folgende Schritte:

  1. Aufforderung: Ein Modal erscheint und fordert dazu auf, die in der Konfiguration definierten Secret-Einträge bereitzustellen.
  2. Eingabe: Der Secret-Key und der zugehörige tatsächliche Wert müssen mindestens einmal eingegeben werden, um den Eintrag im Vault zu initialisieren.
  3. Persistenz: Nach dem Absenden werden diese Werte in der OpenBao-Instanz gespeichert.
  4. Injektion: Der Sync wird fortgesetzt, und die Landscape greift auf die Vault-Keys zu, um sie in die jeweiligen Services einzuspeisen.

Sync-Landscape-Dialog zur Zuordnung und Synchronisierung von Secrets zu Landscape-Services. Das Secret-Eingabe-Modal, das während des Landscape-Sync-Vorgangs ausgelöst wird.

info

Vor jeder Landscape-Synchronisierung können bestehende Secrets auch manuell überschrieben werden.

warnung

Landscape-Synchronisierungen schlagen fehl, wenn ein im CI-Profil definierter Service nicht auf den Secret-Eintrag zugreifen kann, auf den er verweist. Stelle sicher, dass alle Secrets beim ersten Deployment einer Landscape korrekt eingerichtet sind.

Sicherheit und Zugriffskontrolle​

Codesphere erzwingt eine strikte Isolation für den Zugriff auf Secrets:

  • Referenzbasierter Zugriff: Ein Service kann ein Secret nur abrufen, wenn es explizit in dessen Konfiguration definiert ist.
  • Landscape-Isolation: Secrets werden auf Landscape-Ebene verwaltet, wodurch unterschiedliche Deployment-Umgebungen getrennt bleiben.

Lifecycle und Bereinigung​

Um eine saubere Sicherheitslage zu gewährleisten, verwaltet Codesphere den Lifecycle der Secrets automatisch. Beim Löschen eines Workspace:

  • Werden alle zugehörigen Secret-Einträge im Vault identifiziert, die zu diesem Workspace und dessen Services gehören.
  • Führt das System eine permanente Bereinigung aller zugehörigen Keys durch.
  • Bleiben keine sensiblen Daten mehr verfügbar, nachdem der Workspace entfernt wurde.