第 8 章 签名容器镜像
您可以使用 GNU Privacy Guard (GPG) 签名或 sigstore 签名来签署容器镜像。两种签名技术均与任何 OCI 兼容容器 registry 兼容。在将镜像推送至远程注册中心并配置消费者之前,您可以使用 Podman 来签署镜像,以便拒绝任何未签名镜像。签名容器镜像有助于防止供应链攻击。
使用 GPG 密钥进行签名需要部署单独的查找服务器来分发签名。外观服务器可以是任何 HTTP 服务器。从 Podman 版本 4.2 开始,您可以使用容器签名的 sigstore 格式。与 GPG 密钥相比,不需要单独的查找服务器,因为 sigstore 签名存储在容器注册中心中。
8.1. 使用 GPG 签名对容器镜像进行签名
您可以使用 GNU Privacy Guard (GPG) 密钥为镜像签名。
先决条件
-
container-tools
元数据包已安装。 - 已安装 GPG 工具。
设置查找 Web 服务器,您可以发布它上的文件。
您可以在
/etc/containers/registries.d/default.yaml
文件中检查系统范围的 registry 配置。lookaside-staging
选项引用签名写入的文件路径,通常在主机发布签名中设置。# cat /etc/containers/registries.d/default.yaml docker: <registry>: lookaside: https://registry-lookaside.example.com lookaside-staging: file:///var/lib/containers/sigstore ...
流程
生成 GPG 密钥:
# gpg --full-gen-key
导出公钥:
# gpg --output <path>/key.gpg --armor --export <username@domain.com>
使用
Containerfile
在当前目录中构建容器镜像:$ podman build -t <registry>/<namespace>/<image>
将
<registry>
,<namespace>
, and<image>
替换为容器进行的标识符。如需了解更多详细信息,请参阅 容器注册中心。为镜像签名并将其推送到注册中心:
$ podman push \ --sign-by <username@domain.com> \ <registry>/<namespace>/<image>
注意如果您需要在容器 registry 间移动现有镜像时为现有镜像签名,您可以使用
skopeo copy
命令。可选:显示新镜像签名:
# (cd /var/lib/containers/sigstore/; find . -type f) ./<image>@sha256=<digest>/signature-1
将本地签名复制到 lookaside web 服务器中:
# rsync -a /var/lib/containers/sigstore <user@registry-lookaside.example.com>:/registry-lookaside/webroot/sigstore
签名存储在 lookaside-staging
选项决定的位置,本例中为 /var/lib/containers/sigstore
目录。
验证
- 如需了解更多详细信息,请参阅 验证 GPG 镜像签名。
其他资源
-
podman-image-trust
手册页 -
podman-push
man page -
podman-build
man page - 如何生成 GPG 密钥对