Secrets Management

Die Plattform verwendet Mozilla SOPS zur Verwaltung sensibler Daten in Git.

Secrets verbleiben verschlüsselt im Repository und werden erst während der Reconciliation durch FluxCD entschlüsselt.

Komponenten

  • SOPS

  • GnuPG

  • FluxCD

  • Kubernetes Secrets

Verwendete Dokumentation:

Architektur

Secret
   |
   v
SOPS Encrypt
   |
   v
Git Repository
   |
   v
FluxCD
   |
   v
SOPS Decrypt
   |
   v
Kubernetes Secret

Unverschlüsselte Secrets werden niemals in Git gespeichert.

GPG Schlüssel

Die Plattform verwendet einen GPG-Schlüssel für die Verschlüsselung und Entschlüsselung.

Der private Schlüssel wird außerhalb des Repositories gespeichert.

Speicherung

Der private GPG-Schlüssel wird in Enpass gespeichert.

Zusätzlich sollte ein verschlüsseltes Offline-Backup vorhanden sein.

Empfohlene Speicherorte:

  • Enpass

  • Verschlüsseltes Backup

  • Offline Backup

Der Verlust des privaten Schlüssels verhindert die Entschlüsselung vorhandener Secrets.

Installation

GPG

Schlüssel importieren:

gpg --import private.key

Prüfen:

gpg --list-secret-keys

SOPS

Installation abhängig vom Betriebssystem.

Linux Beispiel:

curl -LO \
https://github.com/getsops/sops/releases/latest/download/sops-linux-amd64

chmod +x sops-linux-amd64
sudo mv sops-linux-amd64 /usr/local/bin/sops

Prüfen:

sops --version

Repository-Konfiguration

Im Repository befindet sich eine .sops.yaml.

Beispiel:

creation_rules:
  - pgp: "<FINGERPRINT>"

Neue Dateien werden dadurch automatisch mit dem definierten Schlüssel verschlüsselt.

Secret erzeugen

Beispiel:

apiVersion: v1
kind: Secret
metadata:
  name: example
stringData:
  password: secret

Datei verschlüsseln:

sops --encrypt \
  --in-place secret.yaml

Danach enthält die Datei ausschließlich verschlüsselte Werte.

Secret bearbeiten

Vorhandene Dateien werden direkt mit SOPS bearbeitet.

sops secret.yaml

Nach dem Speichern erfolgt die erneute Verschlüsselung automatisch.

Entschlüsselung

Temporäre Entschlüsselung:

sops --decrypt secret.yaml

Datei in Klartext ausgeben:

sops --decrypt secret.yaml > plaintext.yaml

Klartextdateien dürfen niemals ins Repository eingecheckt werden.

FluxCD Integration

FluxCD unterstützt die automatische Entschlüsselung mittels SOPS.

Beispiel:

apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: application
spec:
  decryption:
    provider: sops
    secretRef:
      name: sops-gpg

GPG Schlüssel im Cluster

Der private Schlüssel wird als Kubernetes Secret im Namespace flux-system gespeichert.

Beispiel:

kubectl create secret generic sops-gpg \
  --namespace flux-system \
  --from-file=sops.asc

FluxCD verwendet diesen Schlüssel automatisch zur Entschlüsselung.

Verwendung in diesem Repository

Folgende Komponenten verwenden aktuell SOPS:

  • FluxCD

  • ExternalDNS

  • Velero

  • Garage Operator

  • Woodpecker

  • Anwendungen mit Zugangsdaten

  • Datenbank Credentials

  • API Keys

Kustomizations mit entschlüsselten Ressourcen verwenden:

decryption:
  provider: sops
  secretRef:
    name: sops-gpg

Schlüsselrotation

Empfohlene Vorgehensweise:

  1. Neuen GPG-Schlüssel erstellen

  2. .sops.yaml aktualisieren

  3. Secrets erneut verschlüsseln

  4. Neuen Schlüssel im Cluster hinterlegen

  5. Alten Schlüssel entfernen

Die Rotation sollte regelmäßig überprüft werden.

Disaster Recovery

Für eine erfolgreiche Wiederherstellung werden benötigt:

  • Git Repository

  • GPG Private Key

  • SOPS Konfiguration

  • FluxCD Secret sops-gpg

Ohne den privaten Schlüssel können die gespeicherten Secrets nicht wiederhergestellt werden.

Best Practices

  • Niemals unverschlüsselte Secrets committen.

  • Nur verschlüsselte Dateien im Repository speichern.

  • GPG Private Key in Enpass sichern.

  • Zusätzlich Offline-Backups aufbewahren.

  • Schlüssel regelmäßig prüfen.

  • Klartextdateien nach Verwendung sofort löschen.