Ich habe ein Basis-Docker-Image, mit dem eine Bildanalysesoftware ausgeführt wird. Für jeden aus dem Image erstellten Container gibt es eine Reihe von Konfigurationseinstellungen, von denen einige Geheimnisse (Verschlüsselungsschlüssel, Kundeninformationen usw.) sind, die von der Software zum Analysieren und Verteilen der verarbeiteten Images verwendet werden. Wie kann ich diese Geheimnisse sicher an einen Container weitergeben?
docker
secret-management
PrestonM
quelle
quelle
Antworten:
Sie haben 3 Methoden, um Geheimnisse für eine App in einem Docker-Container zu erlangen. Bei den ersten beiden handelt es sich um eine Docker-Konfiguration. Die letzte Möglichkeit besteht darin, dass Ihre Apps Geheimnisse direkt aus einem geheimen Speicher abrufen.
1 - Umgebungsvariablen
Laut "The 12 Factor App" -Anleitung handelt es sich bei den Geheimnissen lediglich um Konfigurationsdaten, die immer in der Umgebung festgelegt werden sollten. Sie können Ihre Geheimnisse während der Docker-Ausführung als Umgebungsvariablen festlegen, und Ihre App greift von dort auf sie zu.
2 - Bereitgestellte Volumes
Sie könnten alle Ihre Geheimnisse in einer bestimmten Konfigurations- / Geheimnisdatei haben und diese dann als bereitgestelltes Volume in Ihre Instanz einbinden .
3 - Aus dem Geheimladen holen
Wie @ 030 bereits erwähnt, können Sie Hashicorp Vault (oder "Amazon Secrets Manager" oder einen ähnlichen Dienst) verwenden.
Ihre App oder eine Beiwagen-App kann die Geheimnisse, die sie benötigt, direkt abrufen, ohne sich um eine Konfiguration des Docker-Containers kümmern zu müssen. Mit dieser Methode können Sie dynamisch erstellte Geheimnisse verwenden (eine sehr ansprechende Funktion solcher Systeme), ohne sich Gedanken darüber machen zu müssen, dass die Geheimnisse im Dateisystem angezeigt werden können oder die Umgebungsvariablen des Docker-Containers überprüft werden müssen.
Persönliche Meinung
Ich glaube, env-Variablen sind der richtige Weg. Es ist einfacher zu verwalten, und Sie können immer noch aus einem geheimen Speicher wie Hashicorp Vault abrufen, wenn Sie das CI-Build-System veranlassen, die Geheimnisse während des Builds abzurufen und sie bei der Bereitstellung festzulegen. Sie erhalten das Beste aus beiden Welten und den zusätzlichen Vorteil, dass Ihre Entwickler keinen Anwendungscode schreiben müssen, um Geheimnisse abzurufen.
Entwickler sollten sich auf ihre Codefunktionalität konzentrieren und sich nicht mit Administratoraufgaben wie dem Abrufen von Kennwörtern befassen.Der Code Ihrer Anwendung sollte sich auf die eigene App-Funktionalität konzentrieren und nicht auf Backend-Aufgaben wie das Abrufen von Kennwörtern. Genau wie in der 12-Faktor-App.
Bearbeiten: Der letzte Satz wurde geändert, um die Auswirkungen der Silierung zwischen Entwickler und SysAdmin zu beseitigen. Die Aufgaben selbst sollten aus der Sicht des Codes getrennt sein, aber DevOps handelt von denselben Personen, die beides im Auge behalten und nicht darauf beschränkt sind.
Persönliche Meinung (Update)
Laut @ Dirks ausgezeichnetem Kommentar ( Übergabe von Geheimnissen an einen Docker-Container ) gibt es ein sehr starkes Argument, einen geheimen Speicher vor ENV-Vars zu priorisieren, da diese nicht durchgesickert werden sollen.
quelle
inspect
oderexec
anzeigen. Umgebungsvariablen werden häufig instdout
oder in Protokolldateien abgelegt, wenn sie in einem Debug-Modus ausgeführt werden. Alle untergeordneten Prozesse können sie lesen und anzeigen, die möglicherweise außerhalb Ihrer Kontrolle liegen. Weitere Informationen zB hier: diogomonica.com/2017/03/27/…Es gibt eine andere Option nur mit Pipe:
Erstellen Sie zunächst den Docker-Daemon mit
-i
. Der Befehlread A
bleibt hängen und wartet auf die Eingabe von/proc/1/fd/0
. Führen Sie dann den zweiten Docker-Befehl aus, lesen Sie das Geheimnis von stdin und leiten Sie zum letzten Hängeprozess weiter.quelle