8.7. 使用私钥和 Rekor ,用 sigstore 签名签名容器镜像
从 Podman 版本 4.4 开始,您可以将容器签名的 sigstore 格式与 Rekor 服务器一起使用。您还可以将公共签名上传到公共 rekor.sigstore.dev 服务器,这会增加与 Cosign 的互操作性。然后,您可以使用 cosign verify
命令验证您的签名,而无需明确禁用 Rekor。
先决条件
-
container-tools
模块已安装。
流程
生成 sigstore 公钥/私钥对:
skopeo generate-sigstore-key --output-prefix myKey
$ skopeo generate-sigstore-key --output-prefix myKey
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
生成公钥和私钥
myKey.pub
和myKey.private
。
-
生成公钥和私钥
在
/etc/containers/registries.conf.d/default.yaml
文件中添加以下内容:docker: <registry>: use-sigstore-attachments: true
docker: <registry>: use-sigstore-attachments: true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过设置
use-sigstore-attachments
选项,Podman 和 Skopeo 可以将容器 sigstore 签名与镜像一起读写,并将它们保存在与签名镜像相同的存储库中。注意您可以编辑
/etc/containers/registries.d
目录中任何 YAML 文件中的 registry 或 repository 配置部分。单个范围 (default-docker、注册中心或命名空间) 只能存在于/etc/containers/registries.d
目录中的一个文件中。您还可以在/etc/containers/registries.d/default.yaml
文件中编辑系统范围的 registry 配置。请注意,所有 YAML 文件都是可读的,文件名是任意的。
使用
Containerfile
在当前目录中构建容器镜像:podman build -t <registry>/<namespace>/<image>
$ podman build -t <registry>/<namespace>/<image>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
file.yml
文件:privateKeyFile: "/home/user/sigstore/myKey.private" privateKeyPassphraseFile: "/mnt/user/sigstore-myKey-passphrase" rekorURL: "https://<your-rekor-server>"
privateKeyFile: "/home/user/sigstore/myKey.private" privateKeyPassphraseFile: "/mnt/user/sigstore-myKey-passphrase" rekorURL: "https://<your-rekor-server>"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
file.yml
是 sigstore 签名参数 YAML 文件,其用于存储创建 sigstore 签名所需的选项。
-
为镜像签名并将其推送到注册中心:
podman push --sign-by-sigstore=file.yml <registry>/<namespace>/<image>
$ podman push --sign-by-sigstore=file.yml <registry>/<namespace>/<image>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
您还可以使用带有类似
--sign-by-sigstore
选项的skopeo copy
命令来为现有镜像签名,同时将它们在多个容器注册中心之间移动。
-
您还可以使用带有类似
请注意,您对公共服务器的提交包括有关公钥的数据和有关签名的元数据。
验证
使用以下方法之一验证容器镜像是否被正确签名:
使用
cosign verify
命令:cosign verify <registry>/<namespace>/<image> --key myKey.pub
$ cosign verify <registry>/<namespace>/<image> --key myKey.pub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用
podman pull
命令:在
/etc/containers/policy.json
文件中添加rekorPublicKeyPath
或rekorPublicKeyData
字段:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 拉取镜像:
podman pull <registry>/<namespace>/<image>
$ podman pull <registry>/<namespace>/<image>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
podman pull
命令会强制签名存在,而无需额外的选项。
-