Füllen von Docker-Containern mit vertraulichen Informationen mithilfe von Kubernetes

8

Ich habe einen Pod, der Container ausführt, die Zugriff auf vertrauliche Informationen wie API-Schlüssel und DB-Kennwörter benötigen. Im Moment sind diese sensiblen Werte wie folgt in die Controllerdefinitionen eingebettet:

%Vor%

, die dann im Docker-Container als Umgebungsvariable $DB_PASSWORD verfügbar sind. Alles ziemlich einfach.

Aber ihre Dokumentation zu lesen auf Secrets , sie ausdrücklich sagt, dass setzt sensible Konfigurationswerte in der Definition Verletzungen am besten Praxis und ist möglicherweise ein Sicherheitsproblem. Die einzige andere Strategie, die ich mir vorstellen kann, ist die folgende:

  • Erstellen Sie einen OpenPGP-Schlüssel pro Benutzer-Community oder Namespace
  • verwenden Krypta den Konfigurationswert in ETCD einzustellen (die den privaten Schlüssel verschlüsselt wird)
  • erstellen Kubernetes Geheimnis mit dem privaten Schlüssel, wie so
  • Verknüpfen Sie dieses Geheimnis mit dem Container (was bedeutet, dass der private Schlüssel als Volume-Mount verfügbar sein wird), so
  • , wenn der Container gestartet wird, wird die Datei innerhalb des Volumens Zugriff für die privaten Schlüssel montieren, und es verwendet, um die conf Werte zu entschlüsseln zurück von ETCD
  • dies kann dann in CONFD aufgenommen werden, die nach einer Vorlage Definition lokale Dateien auffüllt (wie Apache oder Wordpress Konfigurationsdateien )

Dies erscheint ziemlich kompliziert, aber sicherer und flexibler, da die Werte nicht mehr statisch sind und im Klartext gespeichert werden.

Also ist meine Frage, und ich weiß, dass es keine vollkommen objektive ist, ob das absolut notwendig ist oder nicht? Nur Admins können die RC-Definitionen an erster Stelle sehen und ausführen; Wenn jemand den kubernetes-Meister verletzt hat, müssen Sie sich um andere Sorgen sorgen. Der einzige Vorteil, den ich sehe, ist, dass es keine Gefahr gibt, dass Geheimnisse im Klartext an das Dateisystem übergeben werden ...

Gibt es andere Möglichkeiten, Docker-Container auf sichere Weise mit geheimen Informationen zu füllen?

    
hohner 26.08.2015, 15:06
quelle

2 Antworten

4

Wenn Sie nicht viele Megabyte config haben, klingt dieses System unnötig komplex. Die vorgesehene Nutzung ist nur für Sie jede Konfiguration in ein Geheimnis gestellt, und die Schoten die Config benötigen kann dieses Geheimnis als Volume.

Sie können dann eine Vielzahl von Mechanismen verwenden, um diese Konfiguration an Ihre Aufgabe zu übergeben, z. Wenn es die Umgebungsvariablen source secret/config.sh; ./mybinary ist, ist das ein einfacher Weg.

Ich glaube nicht, dass Sie zusätzliche Sicherheit erhalten, wenn Sie einen privaten Schlüssel als Geheimnis speichern.

    
lavalamp 31.08.2015 18:10
quelle
2

Ich würde persönlich entscheiden, einen Remote-Keymanager zu verwenden, auf den Ihre Software über eine HTTPS-Verbindung über das Internet zugreifen kann. Zum Beispiel würde Keywhiz oder Vault wahrscheinlich passen die Rechnung.

Ich würde den Schlüsselverwalter in einem separaten isolierten Teilnetz hosten und die Firewall so konfigurieren, dass nur der Zugriff auf IP-Adressen möglich ist, von denen ich erwartete, dass sie die Schlüssel benötigen. Sowohl KeyWhiz als auch Vault verfügen über einen ACL-Mechanismus, sodass Sie möglicherweise gar nichts mit Firewalls zu tun haben, aber es ist nicht schaden, darüber nachzudenken - der Schlüssel hier ist jedoch, den Keymanager in einem separaten Netzwerk zu hosten und sogar möglich ein separater Hosting-Provider.

Ihre lokale Konfigurationsdatei im Container enthält nur die URL des Schlüsseldienstes und möglicherweise Anmeldeinformationen zum Abrufen des Schlüssels vom Schlüsselverwalter. Die Anmeldeinformationen würden für einen Angreifer nutzlos sein, wenn er nicht mit der ACL übereinstimmt. IP-Adressen.

    
Soren 05.09.2015 02:52
quelle

Tags und Links