So signieren Sie Ihre Docker-Images, um das Vertrauen zu erhöhen

0
176

Die meisten Docker-Images werden ohne jegliche Überprüfung verteilt, dass sie was sind sie behaupten zu sein. Sie können das Vertrauen in Ihre Bilder erhöhen, indem Sie sie digital signieren. Dies beweist den Nutzern, dass Sie das Bild veröffentlicht haben und kein Betrüger.

Das Signatursystem von Docker wird als Content Trust bezeichnet. Es wird über den CLI-Befehl docker trust bereitgestellt. Content Trust verwendet Schlüsselsätze, damit Registrierungsstellen die Identität potenzieller Herausgeber überprüfen können. Benutzer signierter Bilder können sicher sein, dass sie aus der erwarteten Quelle stammen.

Schlüssel generieren

Sie benötigen ein Schlüsselpaar, um mit der Verwendung von Inhalten beginnen zu können Vertrauen. Schlüsselpaare können von Zertifizierungsstellen ausgestellt oder von der Docker-CLI generiert werden.

Führen Sie docker trust key aus, um einen Schlüssel zu erstellen. Sie werden aufgefordert, eine Passphrase einzugeben. Dieser muss jedes Mal angegeben werden, wenn Sie den Schlüssel zum Signieren oder Überprüfen von Bildern verwenden. Drücken Sie bei jeder Eingabeaufforderung die Eingabetaste, um fortzufahren.

Sobald Sie fertig sind, werden in ~/.docker/trust zwei Dateien generiert: der private Schlüssel und der zugehörige öffentliche Schlüssel. Ähnlich wie bei SSH-Schlüsseln sollte der private Schlüssel niemals geteilt werden und darf nicht verloren gehen. Wenn Sie zwischen Computern wechseln müssen, können Sie eine private Schlüsseldatei in eine andere Docker-Installation importieren, indem Sie docker trust key load my-key.pem verwenden.

Hinzufügen Ihres öffentlichen Schlüssels zu Ihrer Registrierung

Docker Hub unterstützt alle Funktionen von Docker Trust. Wenn Sie einen privaten Docker Registry-Server verwenden, ist ein aufwendigerer Einrichtungsprozess erforderlich.

Werbung

Der Registrierungsserver bietet keine integrierte Signaturunterstützung. Sie benötigen einen separaten Docker Notary-Dienst, der die Signaturprüfung für Image-Pushs und -Pulls übernimmt. Notar hat drei Komponenten, den Server, einen Signaturdienst und eine MySQL-Datenbank. Es sollte auf derselben URL wie Ihr Registrierungsserver bereitgestellt werden.

Sie können Notary mithilfe seiner Docker Compose-Datei zum Laufen bringen:

git clone https://github.com/theupdateframework/notary.git docker-compose up -d

Diese grundlegende Bereitstellung wird mit einem selbstsignierten TLS-Zertifikat ausgeführt. Es ist nur für Entwicklungszwecke vorgesehen. Sie müssen der Zertifizierungsstellendatei Fixtures/root-ca.crt im Repository vertrauen, bevor Clients erfolgreich eine Verbindung herstellen können.

sudo mkdir -p /usr/share/ca-certificates/extra sudo cp Fixtures/root-ca.crt /usr/share/ca-certificates/extra/notary.crt sudo update-ca-certificates

Die obigen Befehle kopieren die Zertifikatsdatei in den Speicherort von ca-certificates. update-ca-certificates lädt alle Zertifikate neu und fügt Ihrem System die Notarbehörde hinzu.

Wenn Sie Notary in der Produktion ausführen möchten, müssen Sie die Authentifizierung einrichten, damit nur autorisierte Benutzer neue Schlüssel hinzufügen können. Die Umgebungsvariable NOTARY_AUTH sollte beim Starten des Dienstes mit docker-compose gesetzt werden. Dies akzeptiert Base64-codierte Anmeldeinformationen im Benutzernamen:Kennwort-Format. Sie werden aufgefordert, diese bei der Interaktion mit dem Notar anzugeben.

export NOTARY_AUTH=$(echo “Benutzername” | base64):$(echo “Passwort” | base64) docker-compose up -d Werbung

Jetzt können Sie Ihren öffentlichen Schlüssel zu Ihrem Notarserver hinzufügen. Schlüssel werden pro Repository hinzugefügt. Auf diese Weise können Sie Bilder voneinander isolieren und die Unterstützung für delegierte Mitwirkende von Drittanbietern aktivieren. Sie können später weitere Personen mit Veröffentlichungsrechten hinzufügen, indem Sie sie dazu bringen, den Befehl mit ihrem privaten Schlüssel zu wiederholen.

docker trust signer add your-key-name registration.example.com/my-image

Sie&#8217 ;muss die Passphrase des Schlüssels eingeben. Es wird dann auf Ihrem Registrierungsserver verfügbar sein.

Signieren von Bildern

Sobald sich Ihr Schlüssel in der Registrierung befindet, können Sie mit dem Signieren von Images beginnen. Verwenden Sie den Befehl docker trust sign. Stellen Sie sicher, dass jedes Bild mit der richtigen Registrierungs-URL versehen ist.

docker trust sign registration.example.com/my-image:latest

Dieser Befehl signiert das Bild mit Ihrem Schlüssel und überträgt es dann direkt an die Registrierung. Es ist nicht erforderlich, Docker Push danach manuell auszuführen. Sie müssen einen Repository-Schlüssel und eine Passphrase einrichten, um die Vertrauensdaten des einzelnen Images zu schützen. Folgen Sie jeder Aufforderung, um Ihre Signaturschlüssel einzurichten.

Wenn Sie vorhandene Workflows mit Docker-Push haben, können Sie sich dafür entscheiden Befehl statt Docker Trust. Führen Sie die vorherigen Schritte aus, um einen Schlüssel zu erstellen und ihn Notar hinzuzufügen. Legen Sie die Umgebungsvariable DOCKER_CONTENT_TRUST fest, damit Docker-CLI-Befehle Content Trust erkennen und automatisch anwenden.

export DOCKER_CONTENT_TRUST=1 docker push Registry.example.com/my-image:latest

Sie werden sehen, dass die Shell-Ausgabe mit dem übereinstimmt, was das Docker-Vertrauenszeichen erzeugt. Docker führt die gleichen Aktionen aus wie der explizitere Befehl.

Verifying Trusted Images

Die Variable DOCKER_CONTENT_TRUST wird wieder wichtiger, wenn es um die Überprüfung von Images geht du ziehst. Docker versucht standardmäßig nicht, Images zu überprüfen, selbst wenn sie Vertrauensdaten enthalten. Sie müssen die Umgebungsvariable in Ihrer Shell festlegen, um die Inhaltsvertrauensprüfung zu aktivieren.

export DOCKER_CONTENT_TRUST=1 docker pull Registry.example.com/my-image:latest Advertisement

Wenn die Variable gesetzt ist, werden alle Image-Pulls mit dem Notarserver ihrer Registry abgeglichen. Wenn der Notar keine Vertrauensdaten bereitstellen kann, wird das Bild als unsigniert behandelt und der Abruf abgebrochen. Dies schützt Sie vor Bildern, die von böswilligen Akteuren veröffentlicht werden, die sich als echter Herausgeber ausgeben.

Docker Enterprise-Benutzer können eine optionale Daemon-Einstellung konfigurieren, um zu verhindern, dass Docker Engine mit nicht vertrauenswürdigen Images arbeitet, die sich bereits auf dem Host befinden. Diese sind möglicherweise aus einer unsicheren Quelle in Tar-Archiven angekommen.

Bearbeiten Sie /etc/docker/daemon.json und fügen Sie den folgenden Schlüssel hinzu:

{ “content-trust”: { “mode”: “enforced” } }

Laden Sie die Docker-Daemon-Konfiguration mit systemctl reload docker neu, um die Änderung zu übernehmen.

Sie können den Vertrauensstatus eines Images mit Docker Trust Inspect überprüfen. Dadurch werden die mit dem Bild verknüpften Signaturen angezeigt, sodass Sie überprüfen können, ob es signiert wurde.

docker trust inspect Registry.example.com/my-image:latest

If Wenn Sie ein Image veröffentlicht haben, das Sie nicht mehr signieren möchten, verwenden Sie den Befehl docker trust revozieren. Dadurch werden die Vertrauensdaten des Images gelöscht, was dazu führt, dass alle nachfolgenden Docker-Client-Überprüfungen fehlschlagen.

Docker Trust widerrufen Registry.example.com/my-image:latest

Zusammenfassung< /h2>

Docker Content Trust fügt dem Docker-Ökosystem digitale Signaturen hinzu und erhöht so die Sicherheit bei der Verwendung von Images. Wenn Sie Images an Docker Hub übertragen, haben Sie bereits alles, was Sie zur Verwendung der Funktion benötigen. Legen Sie die Umgebungsvariable DOCKER_CONTENT_TRUST fest und verwenden Sie Docker-Befehle wie gewohnt.

Werbung

Für selbst gehostete Registrierungsbenutzer ist die Einrichtung komplizierter, aber in einer vertrauenswürdigen Umgebung lohnt sich der Aufwand immer noch. Zum Zeitpunkt des Schreibens hat Notary noch keine offizielle stabile Version und die Dokumentation befindet sich in seinem GitHub-Repository.