Azure DevOps Services
Docker 内容信任(DCT)允许对发送到远程 Docker 注册表和从远程 Docker 注册表接收的数据使用数字签名。 通过这些签名,可以在客户端或运行时验证特定映像标记的完整性和发布者。
注释
若要对映像进行签名,需要使用附加的公证服务器(示例包括 Docker 中心 或 Azure 容器注册表)的 Docker 注册表。
在 Azure Pipelines 中对镜像进行签名
开发计算机上的先决条件
- 使用 Docker 信任的内置生成器或手动生成委派密钥对。 如果使用 内置生成器 ,则委托私钥将导入本地 Docker 信任存储中。 否则,需要手动将私钥导入本地 Docker 信任存储。 有关详细信息,请参阅 手动生成密钥 。
- 使用在上一步骤中生成的委托密钥将第一个密钥上传到委托并初始化存储库。
小窍门
若要查看本地委派密钥的列表,请使用 Notary CLI 运行以下命令: $ notary key list
设置用于签名映像的管道
从开发计算机上的本地 Docker 信任存储中获取委派私钥,并将其添加为管道中的 安全文件 。
授权此安全文件 在所有管道中使用。
与关联的
containerRegistryServiceConnection服务主体必须在目标容器注册表中具有 AcrImageSigner 角色。基于以下 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)在前面的示例中,变量
DOCKER_CONFIG由loginDocker 任务中的命令设置。 为你的管道将DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE和DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE设置为 机密变量。DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE在此示例中,引用私钥的通行短语(而不是存储库通行短语)。 此示例中只需要私钥的通行短语,因为存储库已启动(先决条件)。