Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Azure DevOps Services
A DCT (Confiança de Conteúdo do Docker) permite que você use assinaturas digitais para dados enviados e recebidos de registros remotos do Docker. Essas assinaturas permitem verificar a integridade e o publicador de marcas de imagem específicas no lado do cliente ou em tempo de execução.
Observação
Para assinar uma imagem, você precisa de um Registro do Docker com um servidor notário anexado (exemplos incluem o Hub do Docker ou o Registro de Contêiner do Azure).
Assinatura de imagens no Azure Pipelines
Pré-requisitos no computador de desenvolvimento
- Use o gerador interno do Docker Trust 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, você precisará importar manualmente a chave privada para o repositório de confiança local do Docker. Consulte Manualmente Gerando Chaves para obter detalhes.
- Use a chave de delegação gerada na etapa anterior para carregar a primeira chave em uma delegação e iniciar o repositório.
Dica
Para exibir a lista de chaves de delegação local, use a CLI do Notário para executar o seguinte comando: $ notary key list.
Configurar o pipeline para assinatura de imagens
Obtenha a chave privada de delegação do repositório de confiança local do Docker em seu computador de desenvolvimento 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
containerRegistryServiceConnectiondeve ter a função AcrImageSigner no registro de contêiner de destino.Crie um fluxo de trabalho com base no seguinte trecho YAML:
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)No exemplo anterior, a
DOCKER_CONFIGvariável é definida pelologincomando na tarefa docker. ConfigureDOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASEeDOCKER_CONTENT_TRUST_ROOT_PASSPHRASEcomo variáveis secretas para sua pipeline.DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASEneste exemplo, refere-se à frase secreta da chave privada (não à frase secreta do repositório). Só precisamos da frase secreta da chave privada neste exemplo porque o repositório já foi iniciado (pré-requisitos).