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

  1. 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 .
  2. 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

  1. 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.

  2. Autorizzare questo file sicuro per l'uso in tutte le pipeline.

  3. L'entità servizio associata a containerRegistryServiceConnection deve avere il ruolo AcrImageSigner nel Registro contenitori di destinazione.

  4. 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 la DOCKER_CONFIG variabile viene impostata dal comando nell'attività Docker. È consigliabile configurare DOCKER_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).