Secrets Management

Die Plattform verwendet SOPS zur Verwaltung sensibler Daten innerhalb der GitOps-Repositories.

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

Ziele

  • GitOps-kompatibles Secret Management

  • Schutz sensibler Daten im Repository

  • Versionierung von Secrets

  • Reproduzierbare Deployments

Architektur

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

Unverschlüsselte Secrets werden niemals im Repository gespeichert.

Installation

Linux / macOS

SOPS und Age werden über Homebrew installiert.

brew install sops age

Version prüfen:

sops --version
age --version

Age Schlüssel

Die Plattform verwendet Age als Verschlüsselungsverfahren für SOPS.

Schlüssel erzeugen

mkdir -p ~/.config/sops/age

age-keygen \
  -o ~/.config/sops/age/keys.txt

Der Schlüssel wird standardmäßig unter folgendem Pfad gespeichert:

~/.config/sops/age/keys.txt

Öffentlichen Schlüssel anzeigen

age-keygen \
  -y ~/.config/sops/age/keys.txt

Der ausgegebene öffentliche Schlüssel wird in der jeweiligen .sops.yaml verwendet.

Beispiel:

creation_rules:
  - age: age1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

FluxCD Bootstrap

FluxCD benötigt Zugriff auf den privaten Age-Schlüssel zur Entschlüsselung der SOPS-Secrets.

Age Secret erstellen

cat ~/.config/sops/age/keys.txt |
kubectl create secret generic sops-age \
  --namespace=flux-system \
  --from-file=age.agekey=/dev/stdin

Kustomization konfigurieren

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

FluxCD Integration

FluxCD unterstützt die automatische Entschlüsselung von SOPS-verschlüsselten Ressourcen.

Beispiel:

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

Der Age-Schlüssel wird im Namespace flux-system bereitgestellt.

Während der Reconciliation entschlüsselt FluxCD die Ressourcen automatisch.

Verwendete Ressourcen

SOPS wird für Kubernetes Secrets verwendet.

Typische Inhalte:

  • Zugangsdaten

  • API Keys

  • Datenbank Passwörter

  • DNS Provider Credentials

  • Object Storage Credentials

Repository-Konfiguration

Die Verschlüsselung wird über .sops.yaml gesteuert.

Beispiel:

creation_rules:
  - age: age1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Schlüsselrotation

Empfohlene Vorgehensweise:

  1. Neuen Age-Schlüssel erzeugen

  2. .sops.yaml aktualisieren

  3. Secrets erneut verschlüsseln

  4. Neues Secret sops-age im Cluster erzeugen

  5. Alten Schlüssel entfernen

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

Disaster Recovery

Für die Wiederherstellung werden benötigt:

  • Git Repository

  • Age Private Key

  • SOPS Konfiguration

Ohne den privaten Age-Schlüssel können gespeicherte Secrets nicht wiederhergestellt werden.

Verwandte Dokumente