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.
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.
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:
-
Neuen GPG-Schlüssel erstellen
-
.sops.yamlaktualisieren -
Secrets erneut verschlüsseln
-
Neuen Schlüssel im Cluster hinterlegen
-
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.