Wir alle haben mit sensiblen Informationen zu tun, wenn wir mit Computersystemen arbeiten. Systemadministratoren verschieben SSH-Schlüssel und Webentwickler müssen sich um API-Token kümmern. Das Problem mit sensiblen Informationen ist, dass sie sensibel sind , was bedeutet, dass es eine Sicherheitskatastrophe verursachen könnte, wenn es irgendwie in die falschen Hände geraten würde. Container sind keine Ausnahme von diesem Problem – Benutzer müssen vertrauliche Informationen in Containern verwenden und gleichzeitig die vertraulichen Informationen sicher aufbewahren.
[ Vielleicht gefällt Ihnen auch die Lektüre: Rootless-Container mit Podman ]
Warum Geheimnisse?
Was ist, wenn jemand eine Datenbank in einem Container ausführen muss und die Anmeldedaten für die Datenbank in einen Container eingefügt werden müssen? Dies kann auf mehrere Arten erfolgen. Sie könnten beim Ausführen des Containers einfach eine Datei erstellen und die Anmeldedaten dort speichern. Dies ist jedoch gefährlich. Wenn der Container in das Image exportiert wird, werden die Anmeldeinformationen ebenfalls exportiert. Jeder, der die Kontrolle über das Bild hat, könnte auf die Datenbank zugreifen. Eine weitere Möglichkeit besteht darin, die Zugangsdaten über die CLI weiterzugeben, aber das erfordert jedes Mal die Eingabe der Daten, was mühsam sein kann.
Was wäre, wenn es eine Methode zur zentralen Verwaltung sensibler Informationen gäbe?
Der neue Befehl, podman secret
, ist eine Reihe von Unterbefehlen und Optionen, die vertrauliche Informationen auf benutzerfreundliche und sichere Weise verwalten. Es ermöglicht Benutzern, vertrauliche Inhalte innerhalb eines Containers problemlos zu verwenden, verhindert jedoch, dass sie irgendwo außerhalb des Containers landen, z. B. in einer Bildregistrierung. Wir haben eine ganze Reihe von Unterbefehlen für podman secret
implementiert :create
, rm
, ls
, und inspect
, um Geheimnisse zu erstellen und zu manipulieren, sowie ein --secret
Flag zum Einfügen eines Geheimnisses in einen Container.
Wie wird es verwendet?
Beim podman secret create
ausgeführt wird, erwartet Podman eine Datei mit den zu speichernden Daten.
$ echo "secretdata" > secretfile
$ podman secret create secretname secretfile
e17465c9772b38f336fc4cbac
Die podman secret inspect
Der Befehl zeigt nicht die gespeicherten Daten an, sondern nur Metadaten zum Geheimnis.
$ podman secret inspect secretname
[
{
"ID": "e17465c9772b38f336fc4cbac",
"CreatedAt": "2021-02-12T09:05:49.661504248-05:00",
"UpdatedAt": "2021-02-12T09:05:49.661504248-05:00",
"Spec": {
"Name": "secretname",
"Driver": {
"Name": "file",
"Options": null
}
}
}
]
Natürlich können Sie Ihre Geheimnisse auch auflisten und entfernen.
$ podman secret ls
ID NAME DRIVER CREATED UPDATED
e17465c9772b38f336fc4cbac secretname file 1 second ago 1 second ago
$ podman secret rm secretname
e17465c9772b38f336fc4cbac
Um das Geheimnis zu verwenden und auf die geheimen Daten zuzugreifen, kann ein Container erstellt oder mit einem --secret
ausgeführt werden Flagge. Innerhalb des Containers kann auf die geheimen Daten in einer Datei unter /run/secrets/secretname
zugegriffen werden . Sie können den --secret
verwenden mehrmals markieren, um dem Container zahlreiche Geheimnisse hinzuzufügen.
$ podman run --secret secretname --name foo alpine cat /run/secrets/secretname
secretdata
Secrets werden nicht an ein Image übergeben oder mit einem podman commit
exportiert oder ein podman export
Befehl. Dadurch wird verhindert, dass vertrauliche Informationen versehentlich an ein öffentliches Register übertragen oder an die falsche Person weitergegeben werden.
$ podman commit foo secrimg
Getting image source signatures
Copying blob 1119ff37d4a9 skipped: already exists
Copying blob 3dd965b4468a done
Copying config 263fcafb79 done
Writing manifest to image destination
Storing signatures
263fcafb790dfdf6a7312953d3600ff9d990a664ec341ded7d0a6dfa1e71bb5d
$ podman run secrimg cat /run/secrets/mysecret
cat: can't open '/run/secrets/mysecret': No such file or directory
Wie funktioniert es?
Wenn ein Benutzer den --secret
verwendet Flag, Podman ruft die geheimen Daten ab und speichert sie auf einem tmpfs
. Anschließend wird die Datei unter /run/secrets/secretname
in den Container gemountet . Von dort aus kann das Geheimnis wie gewohnt innerhalb des Containers verwendet werden, egal ob es sich um Datenbankschlüssel oder TLS-Zertifikate handelt.
Secrets existieren nur auf dem Computer des Secret-Erstellers oder in einem Container, wenn dieser zur Ausführung bereit ist. Geheimnisse sind speziell darauf ausgelegt, nicht existiert in Bildern:Ein podman commit
wird weder das Geheimnis in das Bild übertragen noch ein podman export
. Wenn jemand ein Image aus einem Container mit einem Geheimnis erstellen würde, dann führen Sie einen Container aus diesem Image aus, die Datei unter /run/secret/mysecret
würde es nicht geben. Dadurch wird verhindert, dass geheime Daten versehentlich in eine Registry übertragen werden, wodurch verhindert wird, dass vertrauliche, kompromittierende Informationen irgendwo vorhanden sind, wo sie nicht sein sollten.
Zukunftsarbeit
Im Moment übernimmt diese Lösung die Aufgabe, Geheimnisse zu verwalten. Der einzige implementierte Treiber zum Speichern der sensiblen Informationen ist derzeit jedoch ein Dateitreiber, was bedeutet, dass die Daten auf der Festplatte in unverschlüsselten Dateien gespeichert werden, die vom Container-Host kontrolliert werden. Wir planen weitere Verbesserungen, wie die Implementierung einer Verschlüsselung oder die Verwendung anderer Treiber. Wir möchten auch geheime Umgebungsvariablen unterstützen, bei denen es sich um Umgebungsvariablen handelt, die innerhalb des Containers festgelegt, aber nicht im Image aufgezeichnet werden. Die Beteiligung der Community an diesen Aufgaben wird dankbar angenommen.
[ Erste Schritte mit Containern? Schauen Sie sich diesen kostenlosen Kurs an. Containerisierte Anwendungen bereitstellen:Eine technische Übersicht. ]
Cool. Ich will es.
Podman-Geheimnisse sind in Podman 3.1.0 verfügbar. Wenn Sie es ausprobieren möchten, können Sie Podman herunterladen, indem Sie dieser Installationsanleitung folgen. Wenn Sie Podman bereits haben, können Sie die Secrets-Funktion erhalten, indem Sie auf Podman 3.1.0 upgraden. Bei Fragen oder Feedback können Sie sich auch gerne an das Podman-Team wenden. Podman-Entwickler hängen oft im Freenode-Kanal #podman ab. Sie können uns eine E-Mail senden, indem Sie die Podman-Mailingliste verwenden. Wir haben auch monatliche Community-Treffen. Bitte zögern Sie nicht, vorbeizuschauen und dort auch Hallo zu sagen.