8.3. 使用私钥,用 sigstore 签名签名容器镜像
从 Podman 版本 4.2 开始,您可以使用容器签名的 sigstore 格式。
先决条件
-
container-tools
模块已安装。
流程
生成 sigstore 公钥/私钥对:
$ skopeo generate-sigstore-key --output-prefix myKey
生成公钥和私钥
myKey.pub
和myKey.private
。注意skopeo generate-sigstore-key
命令可从 RHEL 8.8 中提供。否则,您必须使用上游 Cosign 项目来生成公钥/私钥对:安装 cosign 工具:
$ git clone -b v2.0.0 https://github.com/sigstore/cosign $ cd cosign $ make ./cosign
生成公钥/私钥对:
$ ./cosign generate-key-pair ... Private key written to cosign.key Public key written to cosign.pub
在
/etc/containers/registries.d/default.yaml
文件中添加以下内容:docker: <registry>: use-sigstore-attachments: true
通过设置
use-sigstore-attachments
选项,Podman 和 Skopeo 可以将容器 sigstore 签名与镜像一起读写,并将它们保存在与签名镜像相同的存储库中。注意您可以在
/etc/containers/registries.d/default.yaml
文件中编辑系统范围的注册中心配置。您还可以编辑/etc/containers/registries.d
目录中的注册中心或任何 YAML 文件中的注册中心配置部分。所有 YAML 文件都可读,文件名可以是任意的。单个范围(default-docker、注册中心或命名空间)只能存在于/etc/containers/registries.d
目录中的一个文件中。使用
Containerfile
在当前目录中构建容器镜像:$ podman build -t <registry>/<namespace>/<image>
为镜像签名并将其推送到注册中心:
$ podman push --sign-by-sigstore-private-key ./myKey.private <registry>/<namespace>/image>
podman push
命令将<registry>/<namespace>/<image>
本地镜像推送到远程注册中心,来作为<registry>/<namespace>/<image>
。--sign-by-sigstore-private-key
选项使用myKey.private
私钥将 sigstore 签名添加到<registry>/<namespace>/<image>
镜像。镜像和 sigstore 签名被上传到远程注册中心。
如果您需要在容器注册中心间移动现有镜像时为现有镜像签名,您可以使用 skopeo copy
命令。
验证
- 如需了解更多详细信息,请参阅 使用公钥验证 sigstore 镜像签名。
其它资源
-
您系统上的
podman-push
手册页 -
podman-build
手册页 - sigstore:对软件供应链信任和安全的公开回答