Wie man den Befehl docker trust sign verwendet, um ein Image zu signieren

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab erfahren Sie, wie Sie den Befehl docker trust sign verwenden können, um Ihre Docker-Images zu sichern. Zunächst werden wir uns ein unsigniertes Image anschauen, um seine Eigenschaften vor dem Signieren zu verstehen. Anschließend üben Sie als Repository-Administrator das Signieren eines Image-Tags, um seine Authentizität zu bestätigen, und überprüfen dann die Signatur. Abschließend erkunden Sie den Prozess des Signierens und Überprüfens eines Tags als zugewiesener Signaturersteller, um die kollaborative Natur von Docker Content Trust zu demonstrieren.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/tag("Tag an Image") docker/ImageOperationsGroup -.-> docker/push("Push Image to Repository") subgraph Lab Skills docker/inspect -.-> lab-555255{{"Wie man den Befehl docker trust sign verwendet, um ein Image zu signieren"}} docker/pull -.-> lab-555255{{"Wie man den Befehl docker trust sign verwendet, um ein Image zu signieren"}} docker/tag -.-> lab-555255{{"Wie man den Befehl docker trust sign verwendet, um ein Image zu signieren"}} docker/push -.-> lab-555255{{"Wie man den Befehl docker trust sign verwendet, um ein Image zu signieren"}} end

Untersuchung eines unsignierten Images

In diesem Schritt lernen wir, wie man ein Docker-Image untersucht, das nicht signiert wurde. Docker Content Trust bietet eine Möglichkeit, die Integrität und Authentizität von Docker-Images zu überprüfen. Allerdings sind nicht alle Images signiert. Das Untersuchen eines unsignierten Images hilft uns, die grundlegenden Informationen über das Image zu verstehen, bevor wir uns mit den Konzepten des Signierens und Überprüfens befassen.

Zunächst müssen wir ein unsigniertes Image aus einem Docker-Registry herunterladen. Wir verwenden das hello-world-Image, das normalerweise standardmäßig nicht signiert ist.

docker pull hello-world

Dieser Befehl lädt das hello-world-Image aus der Docker Hub-Registry auf Ihren lokalen Rechner herunter. Sie sollten eine Ausgabe sehen, die den Downloadfortschritt und -abschluss anzeigt.

Als Nächstes werden wir das heruntergeladene Image mit dem Befehl docker inspect untersuchen. Dieser Befehl liefert detaillierte Informationen über ein Docker-Objekt, einschließlich Images, Container, Volumes und Netzwerke.

docker inspect hello-world

Die Ausgabe dieses Befehls ist ein umfangreiches JSON-Dokument, das verschiedene Details über das hello-world-Image enthält. Sie können diese Ausgabe untersuchen, um Informationen wie die Image-ID, das Erstellungsdatum, die Architektur, das Betriebssystem und die Konfiguration zu sehen.

Da dieses Image nicht signiert ist, finden Sie in der Ausgabe des docker inspect-Befehls keine Informationen über Signaturen oder Vertrauenswürdigkeit. Dies ist das wichtigste Merkmal eines unsignierten Images aus der Sicht von Docker Content Trust.

Signieren eines Tags als Repository-Administrator

In diesem Schritt lernen wir, wie man als Repository-Administrator einen Docker-Image-Tag signiert. Docker Content Trust verwendet digitale Signaturen, um sicherzustellen, dass die Images, die Sie herunterladen, genau so sind, wie der Herausgeber es beabsichtigt hat. Als Repository-Administrator haben Sie die Befugnis, Image-Tags zu signieren und damit ihre Authentizität zu bestätigen.

Bevor wir ein Image signieren können, müssen wir Docker Content Trust aktivieren. Dies geschieht, indem Sie die Umgebungsvariable DOCKER_CONTENT_TRUST auf 1 setzen.

export DOCKER_CONTENT_TRUST=1

Dieser Befehl aktiviert die Inhaltsüberprüfung für alle nachfolgenden Docker-Befehle in Ihrer aktuellen Terminal-Sitzung.

Nun erstellen wir einen neuen Tag für das hello-world-Image, das wir im vorherigen Schritt heruntergeladen haben. Der neue Tag soll den Namen eines Repositorys enthalten. Wir verwenden hier den Platzhalter your_docker_username/my-signed-image. Ersetzen Sie your_docker_username durch Ihren tatsächlichen Docker Hub-Benutzernamen, falls Sie einen haben, oder verwenden Sie einfach labexuser für dieses Lab.

docker tag hello-world labexuser/my-signed-image:latest

Dieser Befehl erstellt einen neuen Tag labexuser/my-signed-image:latest, der auf dasselbe Image wie hello-world verweist.

Jetzt pushen wir dieses getaggte Image in eine Registry. Wenn Docker Content Trust aktiviert ist, wird Sie Docker auffordern, einen noch nicht signierten Image-Tag zu signieren, wenn Sie ihn pushen.

docker push labexuser/my-signed-image:latest

Wenn Sie diesen Befehl ausführen, wird Docker Sie auffordern, einen neuen Signierschlüssel zu erstellen oder einen bestehenden zu verwenden. Da dies wahrscheinlich das erste Mal ist, dass Sie signieren, werden Sie aufgefordert, einen neuen Schlüssel zu erstellen. Sie müssen ein Passwort für den neuen Schlüssel angeben. Merken Sie sich dieses Passwort, da Sie es später benötigen, um andere Images zu signieren oder Schlüssel zu rotieren.

Nachdem Sie das Passwort eingegeben und bestätigt haben, wird Docker den Image-Tag signieren und ihn in die Registry pushen. Sie sollten eine Ausgabe sehen, die den Signiervorgang und den erfolgreichen Push anzeigt.

Überprüfung der Signatur als Repository-Administrator

In diesem Schritt werden wir die Signatur des Image-Tags überprüfen, den wir im vorherigen Schritt signiert haben. Als Repository-Administrator können Sie Docker Content Trust nutzen, um sicherzustellen, dass das Image, das Sie herunterladen, das von Ihnen signierte Image ist.

Zunächst stellen wir sicher, dass Docker Content Trust weiterhin aktiviert ist. Wenn Sie eine neue Terminal-Sitzung geöffnet haben, müssen Sie möglicherweise die Umgebungsvariable erneut setzen.

export DOCKER_CONTENT_TRUST=1

Jetzt versuchen wir, den signierten Image-Tag herunterzuladen. Da Docker Content Trust aktiviert ist, wird Docker die Signatur überprüfen, bevor es das Image herunterlädt.

docker pull labexuser/my-signed-image:latest

Wenn Sie diesen Befehl ausführen, wird Docker nach einer gültigen Signatur für den labexuser/my-signed-image:latest-Tag suchen. Wenn die Signatur gültig und vertrauenswürdig ist, wird das Image heruntergeladen. Sie sollten eine Ausgabe sehen, die anzeigt, dass das Image heruntergeladen wird und dass die Signatur überprüft wird. Die Ausgabe wird explizit "Verifying trust data for" erwähnen.

Wenn die Signatur ungültig oder fehlend wäre (und die Inhaltsüberprüfung aktiviert ist), würde der Downloadvorgang fehlschlagen, wodurch Sie daran gehindert werden, ein möglicherweise kompromittiertes Image zu verwenden.

Um die mit dem Image verknüpften Vertrauensinformationen genauer zu untersuchen, können Sie den Befehl docker trust inspect verwenden.

docker trust inspect labexuser/my-signed-image:latest

Dieser Befehl zeigt detaillierte Informationen über die mit dem angegebenen Image-Tag verknüpften Signaturen an. Sie sollten Informationen über die Signierer und die signierten Tags sehen. Diese Ausgabe bestätigt, dass der Image-Tag erfolgreich signiert wurde und dass die Signatur von Docker Content Trust erkannt wird.

Signieren eines Tags als Signierer

In diesem Schritt werden wir untersuchen, wie ein bestimmter "Signierer" einen Docker-Image-Tag signieren kann. In einer realen Umgebung kann ein Repository mehrere Signierer haben, die jeweils für die Signatur bestimmter Tags oder Releases verantwortlich sind. Dies ermöglicht einen verteilteren und sichereren Signiervorgang.

Zunächst stellen Sie sicher, dass Docker Content Trust aktiviert ist:

export DOCKER_CONTENT_TRUST=1

Jetzt erstellen wir einen neuen Tag für unser Image, um eine andere Version oder einen anderen Release zu simulieren, für den ein Signierer verantwortlich sein könnte.

docker tag labexuser/my-signed-image:latest labexuser/my-signed-image:v1.0.0

Dies erstellt einen neuen Tag labexuser/my-signed-image:v1.0.0, der auf dasselbe Image verweist.

Um diesen neuen Tag als anderer "Signierer" zu signieren, verwenden wir den Befehl docker trust sign. Mit diesem Befehl können Sie explizit einen bestimmten Tag mit einem bestimmten Schlüssel signieren.

docker trust sign labexuser/my-signed-image:v1.0.0

Wenn Sie diesen Befehl ausführen, wird Docker Sie nach dem Passwort des Signierschlüssels fragen, den Sie verwenden möchten. Wenn Sie denselben Schlüssel verwenden, der in Schritt 2 generiert wurde, geben Sie dieses Passwort ein. Wenn Sie ein anderer Signierer mit einem anderen Schlüssel wären, würden Sie das Passwort dieses Schlüssels verwenden.

Nachdem Sie das Passwort erfolgreich eingegeben haben, wird Docker den Tag labexuser/my-signed-image:v1.0.0 signieren. Sie sollten eine Ausgabe sehen, die den Signiervorgang bestätigt.

Schließlich müssen wir die aktualisierten Vertrauensinformationen in die Registry pushen. Der docker push-Befehl für den signierten Tag wird die neuen Signaturinformationen enthalten.

docker push labexuser/my-signed-image:v1.0.0

Dieser Befehl pusht den v1.0.0-Tag zusammen mit seiner zugehörigen Signatur in die Registry.

Überprüfung der Signatur als Signierer

In diesem letzten Schritt werden wir die Signatur des v1.0.0-Image-Tags überprüfen, den wir im vorherigen Schritt als "Signierer" signiert haben. Dies zeigt, wie jeder Benutzer mit aktiviertem Docker Content Trust die Authentizität eines von einem vertrauenswürdigen Signierer signierten Images überprüfen kann.

Zunächst stellen Sie sicher, dass Docker Content Trust aktiviert ist.

export DOCKER_CONTENT_TRUST=1

Jetzt versuchen wir, den v1.0.0-Image-Tag herunterzuladen. Da die Inhaltsüberprüfung (Content Trust) aktiviert ist, wird Docker die mit diesem Tag verknüpfte Signatur überprüfen.

docker pull labexuser/my-signed-image:v1.0.0

Ähnlich wie bei der Überprüfung in Schritt 3 sollten Sie eine Ausgabe sehen, die anzeigt, dass Docker die Vertrauensinformationen für das Image überprüft und es dann herunterlädt. Dies bestätigt, dass die Signatur, die Sie als Signierer angewendet haben, gültig und erkannt wird.

Um die Signaturinformationen weiter zu bestätigen, können Sie erneut den Befehl docker trust inspect verwenden.

docker trust inspect labexuser/my-signed-image:v1.0.0

Die Ausgabe dieses Befehls zeigt die Signierer für den v1.0.0-Tag an. Sie sollten die Schlüsselinformationen des Signierers sehen, den Sie im vorherigen Schritt verwendet haben. Dies liefert konkrete Beweise dafür, dass der Tag von einer vertrauenswürdigen Entität signiert wurde.

Dies schließt unsere Untersuchung zum Signieren und Überprüfen von Docker-Image-Tags mit Docker Content Trust ab. Durch die Aktivierung der Inhaltsüberprüfung und die Verwendung von Signierschlüsseln können Sie die Sicherheit Ihres Container-Workflows erheblich verbessern, indem Sie die Integrität und Authentizität der von Ihnen verwendeten Images gewährleisten.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man mit Docker Content Trust arbeitet. Zunächst haben wir ein unsigniertes Image untersucht, um seine grundlegenden Informationen und das Fehlen von Signaturdetails zu verstehen. Anschließend haben wir den Prozess des Signierens eines Docker-Image-Tags als Repository-Administrator erkundet. Dies beinhaltet die Aktivierung der Inhaltsüberprüfung (Content Trust) und die Verwendung des Befehls docker trust sign, um die Authentizität des Images zu bestätigen.

Nach dem Signiervorgang haben wir gelernt, wie man als Repository-Administrator die Signatur überprüft, um die Integrität des Images sicherzustellen. Wir haben auch das Signieren eines Tags als bestimmter Signierer geübt, was die Delegierung der Signaturberechtigung innerhalb eines Repositorys zeigt. Schließlich haben wir die Signatur als Signierer überprüft und damit die erfolgreiche Anwendung und Überprüfung der delegierten Signatur bestätigt.