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 9.2 中提供。否则,您必须使用上游 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 签名将上传到远程注册中心。
如果您需要在容器 registry 间移动现有镜像时为现有镜像签名,您可以使用 skopeo copy
命令。
验证
- 如需了解更多详细信息,请参阅 使用公钥验证 sigstore 镜像签名。
其他资源
-
您系统上的
podman-push
手册页 -
podman-build
手册页 - Sigstore:对软件供应链信任和安全的公开回答