Confiança de Conteúdo do Docker
Azure DevOps Services
Com o DCT (Docker Content Trust, Confiança de Conteúdo do Docker), você pode usar assinaturas digitais para dados enviados para registros remotos do Docker e recebidos deles. Com essas assinaturas, o cliente ou o runtime pode fazer a verificação da integridade e do editor de tags de imagem específicas.
Observação
Um pré-requisito para assinar uma imagem é um Registro do Docker com um servidor Notary anexado (exemplos incluem Docker Hub ou Registro de Contêiner do Azure).
Assinatura de imagens no Azure Pipelines
Pré-requisitos no computador de desenvolvimento
- Use o gerador interno de confiança do Docker ou gere manualmente o par de chaves de delegação. Se o gerador interno for usado, a chave privada de delegação será importada para o repositório de confiança local do Docker. Caso contrário, ela precisará ser importada manualmente para lá. Confira Gerando chaves manualmente para obter detalhes.
- Usando a chave de delegação gerada da etapa acima, carregue a primeira chave em uma delegação e inicie o repositório.
Dica
Para exibir a lista de chaves de delegação locais, use a CLI do Notary para executar o seguinte comando: $ notary key list
.
Configurar o pipeline para assinatura de imagens
Pegue a chave privada de delegação, que está no repositório confiável local do Docker no computador de desenvolvimento usado anteriormente, e adicione-a como um arquivo seguro em Pipelines.
Autorize esse arquivo seguro para uso em todos os pipelines.
A entidade de serviço associada a
containerRegistryServiceConnection
deve ter a função AcrImageSigner no registro do contêiner de destino.Crie um pipeline com base no seguinte snippet de código 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 variável
DOCKER_CONFIG
é definida pelo comandologin
na tarefa Docker. Recomendamos que você configureDOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE
como uma variável secreta para seu pipeline. A abordagem alternativa para uma variável de pipeline no YAML expõe a frase secreta em texto sem formatação.DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE
neste exemplo, refere-se à frase secreta da chave privada (não à frase secreta do repositório). Só precisamos da frase secreta da chave privada deste exemplo, pois o repositório já foi iniciado (pré-requisitos).