Confiança de Conteúdo do Docker
Azure DevOps Services
O Docker Content Trust (DCT) permite-lhe utilizar assinaturas digitais para dados enviados e recebidos de registos remotos do Docker. Estas assinaturas permitem a verificação do lado do cliente ou do runtime da integridade e do publicador de etiquetas de imagem específicas.
Nota
Um pré-requisito para assinar uma imagem é um Registo do Docker com um servidor notário anexado (os exemplos incluem Docker Hub ou Azure Container Registry)
Assinar imagens nos Pipelines do Azure
Pré-requisitos no computador de desenvolvimento
- Utilize o gerador incorporado do Docker Trust ou gere manualmente o par de chaves de delegação. Se o gerador incorporado for utilizado, a chave privada de delegação é importada para o arquivo de fidedignidade do Docker local. Caso contrário, a chave privada terá de ser importada manualmente para o arquivo de fidedignidade do Docker local. Veja Manualmente Gerar Chaves para obter detalhes.
- Com a chave de delegação gerada a partir do passo acima, carregue a primeira chave para uma delegação e inicie o repositório
Dica
Para ver a lista de chaves de Delegação local, utilize a CLI do Notary para executar o seguinte comando: $ notary key list
.
Configurar o pipeline para assinar imagens
Pegue na chave privada de delegação, que se encontra no arquivo de confiança local do Docker do seu computador de desenvolvimento utilizado anteriormente, e adicione o mesmo que um ficheiro seguro em Pipelines.
Autorize este ficheiro seguro para utilização em todos os pipelines.
O principal de serviço associado
containerRegistryServiceConnection
tem de ter a função AcrImageSigner no registo de contentor de destino.Crie um pipeline com base no seguinte fragmento 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)
No exemplo anterior, a
DOCKER_CONFIG
variável é definida pelologin
comando na tarefa do Docker. Recomendamos que configureDOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE
como uma variável secreta para o pipeline. A abordagem alternativa da utilização de uma variável de pipeline no YAML expõe a frase de acesso em texto simples.DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE
neste exemplo, refere-se à frase de acesso da chave privada (não à frase de acesso do repositório). Neste exemplo, só precisamos da frase de acesso da chave privada porque o repositório já foi iniciado (pré-requisitos).