Docker-Inhaltsvertrauensstellung
Azure DevOps Services
Mit Docker Content Trust (DCT) können Sie digitale Signaturen für Daten verwenden, die an Docker-Remoteregistrierungen gesendet und von diesen empfangen werden. Diese Signaturen ermöglichen eine clientseitige oder Laufzeitüberprüfung der Integrität und des Herausgebers bestimmter Imagetags.
Hinweis
Voraussetzung für das Signieren eines Images ist eine Docker-Registrierung mit angefügtem Notarserver (Beispiele sind Docker Hub oder Azure Container Registry).
Signieren von Images in Azure Pipelines
Voraussetzungen auf dem Entwicklungscomputer
- Verwenden Sie den integrierten Generator der Docker-Vertrauensstellung, oder generieren Sie das Delegierungsschlüsselpaar manuell. Wenn der integrierte Generator verwendet wird, wird der private Delegierungsschlüssel in den lokalen Docker-Vertrauensspeicher importiert. Andernfalls muss der private Schlüssel manuell in den lokalen Docker-Vertrauensspeicher importiert werden. Weitere Informationen finden Sie unter Manuelles Generieren von Schlüsseln .
- Laden Sie mithilfe des aus dem obigen Schritt generierten Delegierungsschlüssels den ersten Schlüssel in eine Delegierung hoch, und initiieren Sie das Repository.
Tipp
Um die Liste der lokalen Delegierungsschlüssel anzuzeigen, verwenden Sie die Notar CLI, um den folgenden Befehl auszuführen: $ notary key list
.
Einrichten der Pipeline zum Signieren von Images
Greifen Sie den privaten Delegierungsschlüssel ab, der sich im lokalen Docker-Vertrauensspeicher Ihres Entwicklungscomputers befindet, und fügen Sie denselben wie eine sichere Datei in Pipelines hinzu.
Autorisieren Sie diese sichere Datei für die Verwendung in allen Pipelines.
Der zugeordnete
containerRegistryServiceConnection
Dienstprinzipal muss über die Rolle AcrImageSigner in der Zielcontainerregistrierung verfügen.Erstellen Sie eine Pipeline basierend auf dem folgenden YAML-Codeausschnitt:
pool: vmImage: 'Ubuntu 16.04' variables: system.debug: true containerRegistryServiceConnection: serviceConnectionName imageRepository: foobar/content-trust tag: test steps: - task: Docker@2 inputs: command: login containerRegistry: $(containerRegistryServiceConnection) - task: DownloadSecureFile@1 name: privateKey inputs: secureFile: cc8f3c6f998bee63fefaaabc5a2202eab06867b83f491813326481f56a95466f.key - script: | mkdir -p $(DOCKER_CONFIG)/trust/private cp $(privateKey.secureFilePath) $(DOCKER_CONFIG)/trust/private - task: Docker@2 inputs: command: build Dockerfile: '**/Dockerfile' containerRegistry: $(containerRegistryServiceConnection) repository: $(imageRepository) tags: | $(tag) arguments: '--disable-content-trust=false' - task: Docker@2 inputs: command: push containerRegistry: $(containerRegistryServiceConnection) repository: $(imageRepository) tags: | $(tag) arguments: '--disable-content-trust=false' env: DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE: $(DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE)
Im vorherigen Beispiel wird die
DOCKER_CONFIG
Variable durch denlogin
Befehl im Docker-Task festgelegt. Es wird empfohlen, alsDOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE
geheime Variable für Ihre Pipeline einzurichten. Der alternative Ansatz der Verwendung einer Pipelinevariablen in YAML macht die Passphrase in Nur-Text verfügbar.DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE
in diesem Beispiel bezieht sich auf die Passphrase des privaten Schlüssels (nicht auf die Repositorypassphrase). In diesem Beispiel benötigen wir nur die Passphrase des privaten Schlüssels, da das Repository bereits initiiert wurde (Voraussetzungen).