Condividi tramite


Attendibilità del contenuto Docker

Servizi di Azure DevOps

Docker Content Trust (DCT) consente di usare firme digitali per i dati inviati e ricevuti da registri Docker remoti. Queste firme consentono di verificare l'integrità e l'autore di tag di immagine specifici sul lato client o in fase di esecuzione.

Annotazioni

Per firmare un'immagine, è necessario un Registro Docker con un server notario collegato (ad esempio Docker Hub o Registro Azure Container).

Firma di immagini in Azure Pipelines

Prerequisiti nel computer di sviluppo

  1. Usare il generatore predefinito di Docker trust o generare manualmente la coppia di chiavi di delega. Se viene usato il generatore predefinito , la chiave privata di delega viene importata nell'archivio trust Docker locale. In caso contrario, è necessario importare manualmente la chiave privata nell'archivio trust Docker locale. Per informazioni dettagliate, vedere Generazione manuale delle chiavi .
  2. Utilizzare la chiave di delega generata nel passaggio precedente per caricare la prima chiave per 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 la firma delle immagini

  1. Ottenere la chiave privata di delega dall'archivio trust Docker locale nel computer di sviluppo e aggiungerla come file sicuro in Pipelines.

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

  3. L'entità principale del 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-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)
    

    Nell'esempio precedente la DOCKER_CONFIG variabile viene impostata dal login comando nell'attività Docker. Configurare DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE e DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE come variabili segrete per la pipeline.

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