Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure DevOps Services
Docker Content Trust (DCT) vous permet d’utiliser des signatures numériques pour les données envoyées et reçues à partir de registres Docker distants. Ces signatures vous permettent de vérifier l’intégrité et l’éditeur de balises d’image spécifiques côté client ou au moment de l’exécution.
Remarque
Pour signer une image, vous avez besoin d’un registre Docker avec un serveur Notary attaché (par exemple Docker Hub ou Azure Container Registry).
Signature d’images dans Azure Pipelines
Conditions préalables sur l’ordinateur de développement
- Utilisez le générateur intégré de Docker Trust ou générez manuellement la paire de clés de délégation. Si le générateur intégré est utilisé, la clé privée de délégation est importée dans le magasin de confiance Docker local. Sinon, vous devez importer manuellement la clé privée dans le magasin d’approbation Docker local. Pour plus d’informations, consultez Génération manuelle de clés .
- Utilisez la clé de délégation générée à l’étape précédente pour charger la première clé dans une délégation et lancer le référentiel.
Conseil / Astuce
Pour afficher la liste des clés de délégation locales, utilisez l’interface CLI notariée pour exécuter la commande suivante : $ notary key list.
Configurer le pipeline pour la signature d’images
Obtenez la clé privée de délégation à partir du magasin d’approbation Docker local sur votre ordinateur de développement et ajoutez-la en tant que fichier sécurisé dans Pipelines.
Autorisez ce fichier sécurisé à utiliser dans tous les pipelines.
Le principal de service associé
containerRegistryServiceConnectiondoit avoir le rôle AcrImageSigner dans le registre de conteneurs cible.Créez un pipeline basé sur l’extrait de code YAML suivant :
pool: vmImage: 'ubuntu-latest' 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) - task: Docker@2 inputs: command: push containerRegistry: $(containerRegistryServiceConnection) repository: $(imageRepository) tags: | $(tag) env: DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE: $(DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE) DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE: $(rootPassphrase)Dans l’exemple précédent, la
DOCKER_CONFIGvariable est définie par lalogincommande dans la tâche Docker. ConfigurezDOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASEetDOCKER_CONTENT_TRUST_ROOT_PASSPHRASEcomme variables secrètes pour votre pipeline.DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASEdans cet exemple fait référence à la phrase secrète de la clé privée (et non à la phrase secrète du dépôt). Nous avons uniquement besoin de la phrase secrète de la clé privée dans cet exemple, car le référentiel a déjà été lancé (prérequis).