Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Azure Container Registry implementiert das Docker Content Trust (DCT) -Modell, um das Pushen und Abrufen signierter Images zu ermöglichen. Dieser Artikel beginnt mit der Aktivierung von DCT in Ihren Containerregistrierungen. DCT ist ein Feature der Premium-Dienstebene der Containerregistrierung.
Wichtig
DCT wird am 31. März 2028 veraltet und vollständig entfernt. Ausführliche Informationen und Übergangsanleitungen finden Sie unter "Transition from Docker Content Trust to Notary Project".
Einschränkungen
Ein Token mit Repositoryberechtigungen unterstützt derzeit kein Docker-Pushen und -Pullen signierter Images.
Funktionsweise von DCT
Wichtig für alle verteilten Systeme, die mit Sicherheit konzipiert sind, ist die Überprüfung der Quelle und der Integrität der Daten, die das System eingeben. Verbraucher der Daten müssen in der Lage sein, den Herausgeber (Quelle) der Daten zu überprüfen und sicherzustellen, dass die Daten nach der Veröffentlichung (Integrität) nicht geändert wurden.
Als Bildherausgeber können Sie DCT verwenden, um die Bilder zu signieren, die Sie an Ihre Registrierung übertragen. Verbraucher Ihrer Bilder (Personen oder Systeme, die Bilder aus Ihrer Registrierung abrufen) können ihre Clients so konfigurieren, dass nur signierte Bilder abgerufen werden. Wenn ein Consumer ein signiertes Image mittels Pull abruft, überprüft der Docker-Client die Integrität des Images. In diesem Modell sind Verbraucher sicher, dass Sie die signierten Bilder in Ihrer Registrierung veröffentlicht haben und dass die Bilder nach der Veröffentlichung nicht geändert wurden.
Hinweis
Containerregistrierung unterstützt acr import nicht das Importieren von Images, die mit DCT signiert sind. Standardmäßig sind die Signaturen nach dem Import nicht sichtbar. Notär v2 speichert diese Signaturen als Artefakte.
Vertrauenswürdige Images
DCT funktioniert mit den Tags in einem Repository. Bildrepositorys können Bilder enthalten, die sowohl signierte als auch nicht signierte Tags enthalten. Beispielsweise ist es möglich, nur die Images myimage:stable und myimage:latest zu signieren, myimage:dev jedoch nicht.
Signaturschlüssel
Sie verwalten DCT mithilfe einer Reihe von kryptografischen Signaturschlüsseln. Diese Schlüssel sind einem bestimmten Repository in einer Registrierung zugeordnet.
Es gibt mehrere Typen von Signaturschlüsseln, die Docker-Clients und Ihre Registrierung bei der Verwaltung von Vertrauensstellungen für die Tags in einem Repository verwenden. Wenn Sie DCT aktivieren und in Ihre Pipeline für Container-Veröffentlichung und -Konsum integrieren, müssen Sie diese Schlüssel sorgfältig verwalten. Weitere Informationen finden Sie weiter unten in diesem Artikel unter "Verwaltenvon Schlüsseln" und "Verwalten von Schlüsseln für die Vertrauensstellung von Inhalten " in der Docker-Dokumentation.
DCT für die Registrierung aktivieren
Der erste Schritt besteht darin, DCT auf Registrierungsebene zu aktivieren. Nachdem Sie DCT aktiviert haben, können Clients (Benutzer oder Dienste) signierte Bilder an Ihre Registrierung übertragen.
Durch das Aktivieren von DCT für Ihr Registry wird die Nutzung des Registry nicht auf Nutzer beschränkt, die DCT aktiviert haben. Verbraucher, die dcT nicht aktiviert haben, können Ihre Registrierung weiterhin normal verwenden. Verbraucher, die DCT in ihren Clients aktiviert haben, können jedoch nur signierte Bilder in Ihrer Registrierung sehen.
Um DCT für Ihre Registrierung mithilfe des Azure-Portals zu aktivieren, wechseln Sie zur Registrierung. Wählen Sie unter "Richtlinien" die Option "Inhaltsvertrauensstellung" aus. Wählen Sie "Aktiviert" und dann " Speichern" aus. Sie können auch den Azure CLI-Befehl az acr config content-trust update verwenden.
Aktivieren von DCT für den Client
Um mit vertrauenswürdigen Images zu arbeiten, müssen sowohl Image-Herausgeber als auch Consumer DCT für ihre Docker-Clients aktivieren. Als Herausgeber können Sie die Bilder signieren, die Sie an eine DCT-fähige Registrierung übertragen. Als Verbraucher schränkt die Aktivierung von DCT die Ansicht einer Registrierung nur auf signierte Bilder ein. DCT ist in Docker-Clients standardmäßig deaktiviert, sie kann jedoch pro Shellsitzung oder pro Befehl aktiviert werden.
Um DCT für eine Shellsitzung zu aktivieren, legen Sie die DOCKER_CONTENT_TRUST Umgebungsvariable auf 1. Verwenden Sie z. B. in der Bash-Shell diesen Code:
# Enable DCT for a shell session
export DOCKER_CONTENT_TRUST=1
Wenn Sie DCT für einen einzelnen Befehl aktivieren oder deaktivieren möchten, unterstützen mehrere Docker-Befehle das --disable-content-trust Argument.
Verwenden Sie diesen Code, um DCT für einen einzelnen Befehl zu aktivieren:
# Enable DCT for a single command
docker build --disable-content-trust=false -t myacr.azurecr.io/myimage:v1 .
Wenn Sie DCT für Ihre Shellsitzung aktiviert haben und ihn für einen einzelnen Befehl deaktivieren möchten, verwenden Sie diesen Code:
# Disable DCT for a single command
docker build --disable-content-trust -t myacr.azurecr.io/myimage:v1 .
Gewähren von Berechtigungen zum Signieren von Images
Nur die Benutzer oder Systeme, denen Sie die Berechtigung erteilen, können vertrauenswürdige Bilder in Ihre Registrierung übertragen. Um einem Benutzer (oder einem System mithilfe eines Dienstprinzipals) diese Pushberechtigung zu erteilen, weisen Sie die AcrImageSigner Rolle der Microsoft Entra-Identität des Benutzers zu. Diese Berechtigung kommt zusätzlich zu der Rolle AcrPush (oder einer gleichwertigen), die benötigt wird, um Bilder in das Registry zu pushen. Weitere Informationen finden Sie in der Übersicht über Azure Container Registry-Berechtigungen und Rollenzuweisungen.
Wichtig
Sie können diese Pushberechtigung nicht den folgenden administrativen Konten erteilen.
- Das Administratorkonto einer Azure-Containerregistrierung
- Ein Benutzerkonto in der Microsoft Entra-ID mit der klassischen Systemadministratorrolle
Ab Juli 2021 umfasst die AcrImageSigner Rolle sowohl die Microsoft.ContainerRegistry/registries/sign/write Aktion als auch die Microsoft.ContainerRegistry/registries/trustedCollections/write Datenaktion.
Azure-Portal
So gewähren Sie die AcrImageSigner Rolle mithilfe des Azure-Portals:
Wählen Sie die Option Zugriffssteuerung (IAM) aus.
Wählen Sie "> aus, um den Bereich "Rollenzuweisung hinzufügen" zu öffnen.
Weisen Sie die folgende Rolle zu. In diesem Beispiel wird die Rolle einem einzelnen Benutzer zugewiesen. Ausführliche Schritte finden Sie unter Zuweisen von Azure-Rollen mithilfe des Azure-Portals.
Einstellung Wert Rolle AcrImageSigner Zugriff zuweisen Benutzer Mitglieder Alain
Azure-Befehlszeilenschnittstelle (Azure CLI)
Um einem Benutzer mithilfe der Azure CLI Signaturberechtigungen zu erteilen, weisen Sie dem Benutzer die AcrImageSigner Rolle zu, die auf Ihre Registrierung festgelegt ist. Das Format des Befehls lautet:
az role assignment create --scope <registry ID> --role AcrImageSigner --assignee <user name>
Um beispielsweise die Rolle einem nicht administrativen Benutzer zuzuweisen, können Sie die folgenden Befehle in einer authentifizierten Azure CLI-Sitzung ausführen. Ändern Sie den Wert von REGISTRY in den Namen Ihrer Azure-Containerregistrierung.
# Grant signing permissions to an authenticated Azure CLI user
REGISTRY=myregistry
REGISTRY_ID=$(az acr show --name $REGISTRY --query id --output tsv)
az role assignment create --scope $REGISTRY_ID --role AcrImageSigner --assignee azureuser@contoso.com
Sie können auch einem Dienstprinzipal die Rechte zur Pushübertragung von vertrauenswürdigen Images an Ihre Registrierung gewähren. Die Verwendung eines Dienstprinzipals empfiehlt sich für Buildsysteme und andere unbeaufsichtigte Systeme, die vertrauenswürdige Images per Push an Ihre Registrierung übertragen müssen. Das Format ähnelt dem Erteilen einer Benutzerberechtigung, aber Sie geben eine Dienstprinzipal-ID für den --assignee Wert an:
az role assignment create --scope $REGISTRY_ID --role AcrImageSigner --assignee <service principal ID>
Der <service principal ID>-Wert kann entweder der appId-Wert des Dienstprinzipals, dessen objectId-Wert oder einer seiner servicePrincipalNames-Werte sein. Weitere Informationen zum Arbeiten mit Dienstprinzipalen und Azure Container Registry finden Sie unter Azure Container Registry-Authentifizierung mit Dienstprinzipalen.
Wichtig
Führen Sie nach Rollenänderungen az acr login aus, um das lokale Identitätstoken für die Azure CLI zu aktualisieren, damit die neuen Rollen wirksam werden können. Informationen zum Überprüfen von Rollen für eine Identität finden Sie unter Zuweisen von Azure-Rollen mithilfe der Azure CLI und Problembehandlung bei Azure RBAC.
Pushübertragung eines vertrauenswürdigen-Images
Um ein vertrauenswürdiges Image-Tag an Ihre Containerregistrierung zu übertragen, aktivieren Sie DCT und verwenden Sie docker push. Nach Abschluss der ersten Pushübertragung mit einem signierten Tag werden Sie aufgefordert, eine Passphrase für einen Stammsignaturschlüssel und für einen Repositorysignaturschlüssel zu erstellen. Die Stamm- und die Repositoryschlüssel werden generiert und lokal auf Ihrem Computer gespeichert.
$ docker push myregistry.azurecr.io/myimage:v1
[...]
The push refers to repository [myregistry.azurecr.io/myimage]
ee83fc5847cb: Pushed
v1: digest: sha256:aca41a608e5eb015f1ec6755f490f3be26b48010b178e78c00eac21ffbe246f1 size: 524
Signing and pushing trust metadata
You are about to create a new root signing key passphrase. This passphrase
will be used to protect the most sensitive key in your signing system. Please
choose a long, complex passphrase and be careful to keep the password and the
key file itself secure and backed up. It is highly recommended that you use a
password manager to generate the passphrase and keep it safe. There will be no
way to recover this key. You can find the key in your config directory.
Enter passphrase for new root key with ID 4c6c56a:
Repeat passphrase for new root key with ID 4c6c56a:
Enter passphrase for new repository key with ID bcd6d98:
Repeat passphrase for new repository key with ID bcd6d98:
Finished initializing "myregistry.azurecr.io/myimage"
Successfully signed myregistry.azurecr.io/myimage:v1
Nach der ersten docker push Aktion mit aktiviertem DCT verwendet der Docker-Client denselben Stammschlüssel für nachfolgende Pushs. Bei jeder nachfolgenden Pushübertragung an dasselbe Repository werden Sie nur nach dem Repositoryschlüssel gefragt. Bei jeder Pushübertragung eines vertrauenswürdigen Images an ein neues Repository werden Sie zur Angabe einer Passphrase für einen neuen Repositoryschlüssel aufgefordert.
Pull-Abruf eines vertrauenswürdigen-Images
Um ein vertrauenswürdiges Image abzurufen, aktivieren Sie DCT, und führen Sie den docker pull Befehl normal aus. Für Pullvorgänge für vertrauenswürdige Images ist die Rolle AcrPull für normale Benutzer ausreichend. Es sind keine zusätzlichen Rollen (z. B. eine AcrImageSigner Rolle) erforderlich. Verbraucher, die DCT aktiviert haben, können nur Bilder mit signierten Tags abrufen. Hier ist ein Beispiel für den Pull-Abruf eines signierten Tags:
$ docker pull myregistry.azurecr.io/myimage:signed
Pull (1 of 1): myregistry.azurecr.io/myimage:signed@sha256:0800d17e37fb4f8194495b1a188f121e5b54efb52b5d93dc9e0ed97fce49564b
sha256:0800d17e37fb4f8194495b1a188f121e5b54efb52b5d93dc9e0ed97fce49564b: Pulling from myimage
8e3ba11ec2a2: Pull complete
Digest: sha256:0800d17e37fb4f8194495b1a188f121e5b54efb52b5d93dc9e0ed97fce49564b
Status: Downloaded newer image for myregistry.azurecr.io/myimage@sha256:0800d17e37fb4f8194495b1a188f121e5b54efb52b5d93dc9e0ed97fce49564b
Tagging myregistry.azurecr.io/myimage@sha256:0800d17e37fb4f8194495b1a188f121e5b54efb52b5d93dc9e0ed97fce49564b as myregistry.azurecr.io/myimage:signed
Wenn ein Client mit aktiviertem DCT versucht, ein nicht signiertes Tag abzurufen, schlägt der Vorgang mit einem Fehler wie im folgenden Beispiel fehl:
$ docker pull myregistry.azurecr.io/myimage:unsigned
Error: remote trust data does not exist
Abläufe im Hintergrund
Wenn Sie docker pull ausführen, verwendet der Docker-Client dieselbe Bibliothek wie die Notary-CLI, um die Tag-zu-SHA-256-Digestzuordnung für das Tag anzufordern, das Sie abrufen. Nachdem der Client die Signaturen für die Vertrauensdaten überprüft hat, weist er das Docker-Modul an, einen "Pull by Digest" zu erstellen. Während des Pulls verwendet das Modul die SHA-256-Prüfsumme als Inhaltsadresse, um das Imagemanifest aus der Azure-Containerregistrierung anzufordern und zu überprüfen.
Hinweis
Azure Container Registry unterstützt die Notary CLI nicht offiziell, ist aber mit der Notary Server-API kompatibel. Die Notärserver-API ist in Docker Desktop enthalten. Derzeit empfehlen wir Notary Version 0.6.0.
Verwalten von Schlüsseln
Wie in der docker push-Ausgabe angegeben ist der Stammschlüssel bei der Pushübertragung Ihres ersten vertrauenswürdigen Images der sensibelste Schlüssel. Der Docker-Client speichert Signaturschlüssel standardmäßig im folgenden Verzeichnis:
~/.docker/trust/private
Sichern Sie Ihre Stamm- und Repositoryschlüssel, indem Sie sie in einem Archiv komprimieren und das Archiv an einem sicheren Speicherort speichern. Verwenden Sie beispielsweise diesen Befehl in Bash:
umask 077; tar -zcvf docker_private_keys_backup.tar.gz ~/.docker/trust/private; umask 022
Zusammen mit den lokal erstellten Stamm- und Repositoryschlüsseln generiert und speichert Container Registry mehrere andere Schlüssel, wenn Sie ein vertrauenswürdiges Image pushen. Eine ausführliche Erläuterung der verschiedenen Schlüssel in der DCT-Implementierung, einschließlich Verwaltungsanleitungen, finden Sie unter Verwalten von Schlüsseln für die Inhaltsvertrauensstellung in der Docker-Dokumentation.
Verlorener Stammschlüssel
Wenn Sie den Zugriff auf Ihren Stammschlüssel verlieren, verlieren Sie den Zugriff auf die signierten Tags in einem Repository, dessen Tags signiert wurden. Die Containerregistrierung kann den Zugriff auf Bildtags, die mit einem verlorenen Stammschlüssel signiert sind, nicht wiederherstellen. Wenn Sie alle Vertrauensdaten (Signaturen) für Ihre Registrierung entfernen möchten, deaktivieren Sie DCT für die Registrierung, und aktivieren Sie sie dann erneut.
Warnung
Durch Deaktivieren und erneutes Aktivieren von DCT in Ihrer Registrierung werden alle Vertrauensdaten für alle signierten Tags in jedem Repository in Ihrer Registrierung gelöscht. Diese Aktion kann nicht rückgängig gemacht werden. Die Containerregistrierung kann gelöschte Vertrauensdaten nicht wiederherstellen. Durch das Deaktivieren von DCT werden die Bilder selbst nicht gelöscht.
Um DCT für Ihre Registrierung zu deaktivieren, wechseln Sie zur Registrierung im Azure-Portal. Wählen Sie unter "Richtlinien" die Option "Inhaltsvertrauensstellung" aus. Wählen Sie "Deaktiviert" und dann " Speichern" aus. Sie werden vor dem Verlust aller Signaturen in der Registrierung gewarnt. Wählen Sie OK, um alle Signaturen in Ihrer Registrierung endgültig zu löschen.
Verwandte Inhalte
- Weitere Informationen zu DCT, einschließlich
docker trustBefehlen und Vertrauenswürdigen Delegierungen, finden Sie unter Content Trust in Docker. - Ein Beispiel für die Verwendung von DCT beim Erstellen und Übertragen eines Docker-Images finden Sie in der Dokumentation zu Azure Pipelines .