Docker-innehållsförtroende
Azure DevOps Services
Med Docker Content Trust (DCT) kan du använda digitala signaturer för data som skickas till och tas emot från fjärranslutna Docker-register. Dessa signaturer tillåter verifiering på klientsidan eller körning av integriteten och utgivaren av specifika avbildningstaggar.
Anteckning
En förutsättning för att signera en avbildning är ett Docker-register med en notarieserver ansluten (exempel är Docker Hub eller Azure Container Registry)
Signera avbildningar i Azure Pipelines
Förutsättningar för utvecklingsdatorn
- Använd Docker Trusts inbyggda generator eller generera delegeringsnyckelpar manuellt. Om den inbyggda generatorn används importeras den privata delegeringsnyckeln till det lokala Docker-förtroendearkivet. Annars måste den privata nyckeln importeras manuellt till det lokala Docker-förtroendearkivet. Mer information finns i Generera nycklar manuellt .
- Med hjälp av delegeringsnyckeln som genererades från steget ovan laddar du upp den första nyckeln till en delegering och initierar lagringsplatsen
Tips
Om du vill visa listan över lokala delegeringsnycklar använder du Notary CLI för att köra följande kommando: $ notary key list
.
Konfigurera pipeline för signering av avbildningar
Hämta den privata delegeringsnyckeln, som finns i det lokala Docker-förtroendearkivet för utvecklingsdatorn som användes tidigare, och lägg till samma som en säker fil i Pipelines.
Auktorisera den här säkra filen för användning i alla pipelines.
Tjänstens huvudnamn som är associerat med
containerRegistryServiceConnection
måste ha rollen AcrImageSigner i målcontainerregistret.Skapa en pipeline baserat på följande YAML-kodfragment:
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)
I föregående exempel anges variabeln
DOCKER_CONFIG
avlogin
kommandot i Docker-aktiviteten. Vi rekommenderar att du konfigurerarDOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE
som en hemlig variabel för din pipeline. Den alternativa metoden för att använda en pipelinevariabel i YAML exponerar lösenfrasen i oformaterad text.DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE
i det här exemplet refererar till den privata nyckelns lösenfras (inte lagringsplatsens lösenfras). Vi behöver bara den privata nyckelns lösenfras i det här exemplet eftersom lagringsplatsen redan har initierats (förutsättningar).