Kubernetes Secrets ist eine Ressource in Kubernetes, die dient zur Speicherung von vertraulichen Informationen wie Passwörtern, Schlüsseln und Zertifikaten verwendet wird. Secrets können von Pods, Containern oder anderen Kubernetes-Objekten wie Deployments und Services verwendet werden, ohne dass die vertraulichen Informationen direkt im YAML-Manifest gespeichert werden müssen.
Die Verschlüsselung der Kubernetes Secrets erfolgt intern in Kubernetes und benötigt keine externe Komponente. Die Secrets werden standardmäßig in base64 codiert (s. Base64 Sicherheitsbedenken), was jedoch keine Verschlüsselung darstellt, sondern nur eine einfache Kodierung. Die Kubernetes Secrets werden im etcd-Cluster gespeichert und vom API-Server verwaltet.
Secrets können in Pods über Umgebungsvariablen oder Volumes gemountet werden. Wenn Secrets als Umgebungsvariablen verwendet werden, werden die vertraulichen Informationen in Umgebungsvariablen im Pod ausgeführt. Wenn Secrets als Volumes verwendet werden, werden die vertraulichen Informationen in einer Datei gespeichert, die im Pod als Volumes gemountet ist.
Secrets können auch mit Labels und Annotations versehen werden, um eine einfache Suche und Organisation zu ermöglichen. Secrets können auch aktualisiert und gelöscht werden, um sicherzustellen, dass vertrauliche Informationen auf dem neuesten Stand und sicher bleiben.
Offizielle Dokumentation: Secrets | Kubernetes
Arten von Secrets
Es gibt zwei Arten von Secrets in Kubernetes: generische Secrets und Secrets für Image-Repositories (Container-Registry). Generische Secrets werden für allgemeine vertrauliche Informationen wie Passwörter und Schlüssel verwendet, während Secrets für Image-Repositories verwendet werden, um Anmeldeinformationen für die Verbindung zu einer Container-Registry zu speichern. In diesem Fall werden Secrets verwendet, um den Benutzername und Passwort oder Token in einem Kubernetes-Cluster zu speichern, damit Pods oder Deployments auf das private Repository zugreifen können.
Speicherung der Secrets
Folgende Möglichkeiten können verwendet werden, um eine sichere Speicherung der Secrets zu gewährleisten:
Secret Encryption Config
In diesem Fall werden die Secrets werden mit einem symmetrischen Schlüssel verschlüsselt, der in einem separaten Secret gespeichert wird. Dadurch wird die Sicherheit erhöht, da der Schlüssel selbst verschlüsselt wird und nur von autorisierten Benutzern entschlüsselt werden kann.
Verwendung von Secrets-Management-Tools
Durch die Verwendung von Vault können Kubernetes-Cluster einheitliche Methoden zur Verwaltung von Secrets implementieren und die Sicherheit von Secrets erhöhen. Wenn man von Vault spricht, spricht man eigentlich über HashiCorp Vault.
HashiCorp Vault ist eine zentrale Plattform zur Verwaltung von Secrets, wie z.B. Passwörter, API-Schlüssel, Tokens und Zertifikate, sowie zur sicheren Generierung von Zufallszahlen und -werten.
Die Secrets werden in Vault in sogenannten "Secret Engines" gespeichert, die je nach Bedarf konfiguriert werden können. Beispielsweise kann ein Secret Engine für Passwörter und ein anderer für Tokens erstellt werden. Für jede Art von Secret gibt es einen eindeutigen Pfad, unter dem die Secrets innerhalb des Secret Engines abgelegt werden.
Kubernetes Befehle
Hier sind einige der wichtigsten kubectl-Befehle für Secrets:
- kubectl create secret - Erstellt ein neues Secret
- kubectl get secrets - Zeigt alle vorhandenen Secrets an
- kubectl describe secret - Zeigt Informationen zu einem bestimmten Secret an
- kubectl delete secret - Löscht ein vorhandenes Secret
- kubectl edit secret - Bearbeitet ein vorhandenes Secret
- kubectl apply -f <file> - Erstellt oder aktualisiert ein Secret anhand einer YAML-Datei
Base64 Sicherheitsbedenken
Base64-Codierung ist ein Verfahren zur Kodierung von Binärdaten in Textdaten und umgekehrt. Die Codierung ist keine Verschlüsselung und kann relativ einfach rückgängig gemacht werden. Das bedeutet, dass jemand, der Zugriff auf die Secret-Datei hat, die Base64-kodierten Informationen ohne viel Aufwand entschlüsseln kann. Es ist daher wichtig, sensible Informationen wie Passwörter und Zugangsdaten in Kubernetes Secrets durch Verschlüsselung zu schützen, bevor sie gespeichert oder übertragen werden.