8.3. 使用私钥和 Rekor ,用 sigstore 签名签名容器镜像
您可以使用带有私钥和 Rekor 的 sigstore 在 Red Hat Enterprise Linux 中签署容器镜像,以确保软件供应链中的镜像的完整性。
先决条件
-
container-tools元数据包已安装。
流程
生成 sigstore 公钥或私钥对:
$ skopeo generate-sigstore-key --output-prefix myKey.private生成公钥和私钥
myKey.pub和myKey.private。将以下内容添加到
/etc/containers/registries.conf.d/default.yaml文件中:docker: <registry>: use-sigstore-attachments: true通过设置
use-sigstore-attachments选项,Podman 和 Skopeo 可以将容器 sigstore 签名与镜像一起读写,并将它们保存在与签名镜像相同的存储库中。注意您可以编辑
/etc/containers/registries.d/目录中任何 YAML 文件中的 registry 或存储库配置部分。在/etc/containers/registries.d/目录里,每个作用域(default-docker、registry 或 namespace)只能出现在一个文件中。您还可以在/etc/containers/registries.d/default.yaml文件中编辑系统范围的 registry 配置。请注意,该目录中的所有 YAML 文件都会被读取,因此文件名可以任意命名。使用当前目录中的
Containerfile构建容器镜像:$ podman build -t <registry>/<namespace>/<image>创建
/etc/containers/registries.d/file.yml文件:privateKeyFile: "/home/user/sigstore/myKey.private" privateKeyPassphraseFile: "/mnt/user/sigstore-myKey.private-passphrase" rekorURL: "https://<your-rekor-server>"file.yml是 sigstore 签名参数 YAML 文件,其用于存储创建 sigstore 签名所需的选项。为镜像签名并将其推送到注册中心:
$ podman push --sign-by-sigstore=file.yml <registry>/<namespace>/<image>您还可以使用带有类似
--sign-by-sigstore选项的skopeo copy命令来为现有镜像签名,同时将它们在多个容器注册中心之间移动。警告请注意,您对公共服务器的提交包括有关公钥的数据和有关签名的元数据。
验证
拉取镜像:
$ podman pull <registry>/<namespace>/<image>您需要运行
podman pull命令,以确保按照我们的配置要求强制镜像签名。如果您尝试从配置的 registry 中拉取未签名或使用错误密钥签名的镜像,命令将失败。如需更多信息,请参阅系统中的
podman-push (1)、podman-build (1)和container-registries.d手册页。