具有内容信任的自动化

预计阅读时间:3分钟

将Docker Content Trust内置到现有的自动化系统中是很常见的。为了允许工具包装Docker并推送受信任的内容,有一些环境变量可以传递给客户端。

本指南遵循此处描述的步骤, 因此请仔细阅读并了解其先决条件。

直接与Notary客户端一起使用时,它使用自己的一组环境变量

添加委托私钥

要自动将委托私钥导入本地Docker信任库,我们需要为新密钥传递密码。每次代表团签署标签时都需要此密码短语。

$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="mypassphrase123"

$ docker trust key load delegation.key --name jeff
Loading key from "delegation.key"...
Successfully imported key from delegation.key

添加委派公钥

如果在添加委派公钥的同时初始化存储库,则将需要使用本地公证人规范根密钥的密码来创建存储库信任数据。如果存储库已经启动,则只需要存储库密码。

# Export the Local Root Key Passphrase if required.
$ export DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE="rootpassphrase123"

# Export the Repository Passphrase
$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="repopassphrase123"

# Initialise Repo and Push Delegation
$ docker trust signer add --key delegation.crt jeff registry.example.com/admin/demo
Adding signer "jeff" to registry.example.com/admin/demo...
Initializing signed repository for registry.example.com/admin/demo...
Successfully initialized "registry.example.com/admin/demo"
Successfully added signer: registry.example.com/admin/demo

签名图像

最后,在对图像进行签名时,我们将需要导出签名密钥的密码短语。使用密钥将密钥加载到本地Docker信任库中时创建$ docker trust key load

$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="mypassphrase123"

$ docker trust sign registry.example.com/admin/demo:1
Signing and pushing trust data for local image registry.example.com/admin/demo:1, may overwrite remote trust data
The push refers to repository [registry.example.com/admin/demo]
428c97da766c: Layer already exists
2: digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812 size: 524
Signing and pushing trust metadata
Successfully signed registry.example.com/admin/demo:1

建立内容信任

您还可以通过内容信任来构建。在运行docker build命令之前,您应该DOCKER_CONTENT_TRUST手动或以脚本方式设置环境变量。考虑下面的简单Dockerfile。

# syntax=docker/dockerfile:1
FROM docker/trusttest:latest
RUN echo

FROM标签被拉动签署图像。您无法建立映像,该映像 FROM在本地不存在或未签名。鉴于该标签存在内容信任数据latest,以下构建应会成功:

$  docker build -t docker/trusttest:testing .
Using default tag: latest
latest: Pulling from docker/trusttest

b3dbab3810fc: Pull complete
a9539b34a6ab: Pull complete
Digest: sha256:d149ab53f871

如果启用了内容信任,则从依赖于标签的Dockerfile(不包含信任数据)进行构建会导致build命令失败:

$  docker build -t docker/trusttest:testing .
unable to process Dockerfile: No trust data for notrust
信任安全码头工人文档自动化