Attendibilità del contenuto Docker
Azure DevOps Services
Docker Content Trust (DCT) consente di usare firme digitali per i dati inviati a e ricevuti dai registri Docker remoti. Queste firme consentono la verifica lato client o runtime dell'integrità e dell'editore di tag di immagine specifici.
Nota
Un prerequisito per la firma di un'immagine è un Registro Docker con un server notario collegato (esempi includono Docker Hub o Registro Azure Container)
Firma delle immagini in Azure Pipelines
Prerequisiti nel computer di sviluppo
- Usare il generatore predefinito di Trust Docker o generare manualmente la coppia di chiavi di delega. Se viene usato il generatore predefinito , la chiave privata della delega viene importata nell'archivio attendibilità Docker locale. In caso contrario, la chiave privata deve essere importata manualmente nell'archivio attendibilità Docker locale. Per informazioni dettagliate, vedere Generazione manuale delle chiavi .
- Usando la chiave di delega generata dal passaggio precedente, caricare la prima chiave in una delega e avviare il repository
Suggerimento
Per visualizzare l'elenco delle chiavi di delega locale, usare l'interfaccia della riga di comando notaria per eseguire il comando seguente: $ notary key list
.
Configurare la pipeline per le immagini di firma
Acquisire la chiave privata della delega, che si trova nell'archivio di attendibilità Docker locale del computer di sviluppo usato in precedenza e aggiungere lo stesso file sicuro in Pipelines.
Autorizzare questo file sicuro per l'uso in tutte le pipeline.
L'entità servizio associata a
containerRegistryServiceConnection
deve avere il ruolo AcrImageSigner nel Registro contenitori di destinazione.Creare una pipeline basata sul frammento YAML seguente:
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)
Nell'esempio
login
precedente laDOCKER_CONFIG
variabile viene impostata dal comando nell'attività Docker. È consigliabile configurareDOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE
come variabile privata per la pipeline. L'approccio alternativo di usare una variabile di pipeline in YAML espone la passphrase in testo normale.DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE
in questo esempio si riferisce alla passphrase della chiave privata (non alla passphrase del repository). In questo esempio è necessaria solo la passphrase della chiave privata perché il repository è già stato avviato (prerequisiti).