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 镜像签名。