Sdílet prostřednictvím


Důvěryhodnost obsahu Dockeru

Azure DevOps Services

Docker Content Trust (DCT) umožňuje používat digitální podpisy pro data odesílaná do vzdálených registrů Dockeru a přijatá ze vzdálených registrů Dockeru. Tyto podpisy umožňují ověření integrity a vydavatele konkrétních značek image na straně klienta nebo za běhu.

Poznámka

Předpokladem pro podepsání image je registr Dockeru s připojeným serverem notáře (mezi příklady patří Docker Hub nebo Azure Container Registry).

Podepisování imagí v Azure Pipelines

Požadavky na počítač pro vývoj

  1. Použijte integrovaný generátor důvěryhodnosti Dockeru nebo ručně vygenerujte pár klíčů pro delegování. Pokud se použije integrovaný generátor , privátní klíč delegování se naimportuje do místního úložiště důvěryhodnosti Dockeru. V opačném případě bude potřeba privátní klíč ručně importovat do místního úložiště důvěryhodnosti Dockeru. Podrobnosti najdete v tématu Ruční generování klíčů .
  2. Pomocí klíče delegování vygenerovaného v předchozím kroku nahrajte první klíč do delegování a spusťte úložiště.

Tip

Pokud chcete zobrazit seznam místních klíčů delegování, pomocí rozhraní příkazového řádku Notary spusťte následující příkaz: $ notary key list.

Nastavení kanálu pro podepisování imagí

  1. Vezměte privátní klíč delegování, který je v místním úložišti důvěryhodnosti Dockeru vašeho vývojového počítače, který jste použili dříve, a přidejte stejný soubor jako zabezpečený soubor v Pipelines.

  2. Autorizujte tento zabezpečený soubor pro použití ve všech kanálech.

  3. Instanční objekt přidružený k containerRegistryServiceConnection musí mít roli AcrImageSigner v cílovém registru kontejneru.

  4. Vytvořte kanál založený na následujícím fragmentu kódu YAML:

    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)
    

    V předchozím příkladu je proměnná DOCKER_CONFIG nastavená příkazem login v úloze Dockeru. Doporučujeme nastavit DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE jako tajnou proměnnou pro váš kanál. Alternativní přístup k použití proměnné kanálu v YAML zveřejňuje přístupové heslo ve formátu prostého textu. DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE v tomto příkladu odkazuje na heslo privátního klíče (ne na heslo úložiště). V tomto příkladu potřebujeme jenom heslo privátního klíče, protože úložiště už bylo inicializováno (požadavky).