Ein Secret ist ein Objekt in Kubernetes zum Speichern vertraulicher Daten wie Passwörter, API-Tokens, SSH-Schlüssel oder TLS-Zertifikate. Secrets sehen auf den ersten Blick aus wie ConfigMaps – mit dem entscheidenden Unterschied, dass ihr Inhalt sensibel ist und besonders geschützt werden muss.
Base64 ist keine Verschlüsselung
Der wichtigste Punkt: Die Werte eines Secrets werden nur Base64-kodiert gespeichert, nicht verschlüsselt. Jeder, der das Objekt lesen darf, kann den Wert mit einem einzigen Befehl dekodieren. Wer Secret-YAML wie verschlüsselten Text behandelt, hat ein Sicherheitsproblem.
So werden Secrets wirklich geschützt
- Zugriffskontrolle: Secrets liegen hinter der Kubernetes-API und sind über RBAC-Regeln geschützt – nur Rollen mit passender Berechtigung dürfen sie lesen (Least Privilege).
- Verschlüsselung im Speicher: Werden Secrets in etcd abgelegt, sind sie standardmäßig unverschlüsselt. Mit
--encryption-provider-config(inklusive KMS-Anbindung) lässt sich die Verschlüsselung at rest aktivieren. - Externe Verwaltung: Für hohe Anforderungen übernehmen Secrets-Manager wie Vault oder Cloud-KMS-Dienste die Speicherung; Kubernetes-Secrets enthalten dann nur noch einen Verweis.
Typen und Verwendung
Neben dem Standard-Typ Opaque gibt es spezielle Typen: kubernetes.io/tls für Zertifikate, kubernetes.io/dockerconfigjson für Registry-Anmeldedaten (zur Nutzung mit einer Container-Registry), kubernetes.io/basic-auth und kubernetes.io/ssh-auth. Pods erhalten Secrets wie ConfigMaps über Umgebungsvariablen oder als gemountetes Volume – TLS-Zertifikate liegen zum Beispiel als Dateien im Container.
Secrets sind ebenfalls auf 1 MiB begrenzt und können mit immutable: true (stabil seit Kubernetes 1.21) unveränderbar gemacht werden. Helm-Charts bündeln Secrets zusammen mit anderen Manifesten in einem Paket.