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.