10.4. 验证容器签名以进行供应链安全
您可以使用 sigstore 签名方法增强供应链安全性。
sigstore 支持只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅以下链接:
10.4.1. 了解如何使用 sigstore 验证容器签名 复制链接链接已复制到粘贴板!
您可以使用 sigstore 签名方法配置容器运行时以验证镜像的完整性。配置 MicroShift 容器运行时可启用镜像完整性的验证。通过 sigstore 项目,开发人员可以数字签名其构建的内容,创建将软件追踪回源的安全链。然后管理员可以大规模验证签名和监控工作流。通过使用 sigstore,您可以在与构建镜像相同的 registry 中存储签名。
- 对于特定于用户的镜像,您必须更新配置文件以指向适当的公钥,或者禁用这些镜像源的签名验证。
对于断开连接或离线配置,您必须将公钥内容嵌入到操作系统镜像中。
10.4.2. 使用 sigstore 验证容器签名 复制链接链接已复制到粘贴板!
通过将容器运行时配置为使用 sigstore 来验证 MicroShift 的容器日志。在对镜像进行签名时,容器签名验证使用来自红帽密钥对的公钥。要使用 sigstore,请编辑作为容器运行时软件包的一部分安装的默认 /etc/containers/policy.json 文件。
您可以通过以下链接访问红帽公钥:
您必须使用发行版本密钥 3 来验证 MicroShift 容器签名。
先决条件
- 有对 MicroShift 主机的 admin 访问权限。
- 已安装 MicroShift。
流程
运行以下命令,下载相关的公钥并将其保存为
/etc/containers/RedHat_ReleaseKey3.pub:$ sudo curl -sL https://access.redhat.com/security/data/63405576.txt -o /etc/containers/RedHat_ReleaseKey3.pub要将容器运行时配置为验证来自红帽源的镜像,请编辑
/etc/containers/policy.json文件使其包含以下配置:策略 JSON 文件示例
{ "default": [ { "type": "reject" } ], "transports": { "docker": { "quay.io/openshift-release-dev": [{ "type": "sigstoreSigned", "keyPath": "/etc/containers/RedHat_ReleaseKey3.pub", "signedIdentity": { "type": "matchRepoDigestOrExact" } }], "registry.redhat.io": [{ "type": "sigstoreSigned", "keyPath": "/etc/containers/RedHat_ReleaseKey3.pub", "signedIdentity": { "type": "matchRepoDigestOrExact" } }] } } }通过编辑
/etc/containers/registries.d/registry.redhat.io.yaml文件来在拉取镜像到本地存储时使用 sigstore attachments,使其包含以下配置:$ cat /etc/containers/registries.d/registry.redhat.io.yaml docker: registry.redhat.io: use-sigstore-attachments: true通过编辑
/etc/containers/registries.d/registry.quay.io.yaml文件来在拉取镜像到本地存储时使用 sigstore 附加功能,使其包含以下配置:$ cat /etc/containers/registries.d/quay.io.yaml docker: quay.io/openshift-release-dev: use-sigstore-attachments: true- 如果您的用例需要这些镜像源的签名验证,请创建特定于用户的 registry 配置文件。您可以使用此处的示例开始并添加您自己的要求。
后续步骤
- 如果您使用镜像 registry,请启用 sigstore attachments。
- 否则,继续清理本地容器存储。
10.4.2.1. 为镜像 registry 启用 sigstore 附加 复制链接链接已复制到粘贴板!
如果使用镜像 registry,您必须应用额外的配置来启用 sigstore 附加功能,并通过摘要进行镜像(mirror)。
先决条件
- 有对 MicroShift 主机的 admin 访问权限。
- 您已使用 sigstore 完成"验证容器签名"中的步骤。
流程
通过创建
/etc/containers/registries.d/mirror.registry.local.yaml文件来启用 sigstore 附加。$ cat /etc/containers/registries.d/<mirror.registry.local.yaml>1 docker: mirror.registry.local: use-sigstore-attachments: true- 1
- 在镜像 registry URL 后命名 <
mirror.registry.local.yaml> 文件。
通过创建包含以下内容的
/etc/containers/registries.conf.d/999-microshift-mirror.conf来启用镜像:$ cat /etc/containers/registries.conf.d/999-microshift-mirror.conf [[registry]] prefix = "quay.io/openshift-release-dev" location = "mirror.registry.local" mirror-by-digest-only = true [[registry]] prefix = "registry.redhat.io" location = "mirror.registry.local" mirror-by-digest-only = true
后续步骤
- 清除本地容器存储清理。
10.4.2.2. 擦除本地容器存储清理 复制链接链接已复制到粘贴板!
将配置应用到现有系统时,您必须清理本地容器存储。清理容器存储可确保正确下载带有签名的容器镜像。
先决条件
- 有对 MicroShift 主机的管理员访问权限。
- 您在镜像 registry 上启用了 sigstore。
流程
运行以下命令停止 CRI-O 容器运行时服务和 MicroShift:
$ sudo systemctl stop crio microshift运行以下命令擦除 CRI-O 容器运行时存储清理:
$ sudo crio wipe --force运行以下命令重启 CRI-O 容器运行时服务和 MicroShift:
$ sudo systemctl start crio microshift
验证
输入以下命令验证所有 pod 是否都处于健康状态:
$ oc get pods -A
输出示例
NAMESPACE NAME READY STATUS RESTARTS AGE
default i-06166fbb376f14a8bus-west-2computeinternal-debug-qtwcr 1/1 Running 0 46m
kube-system csi-snapshot-controller-5c6586d546-lprv4 1/1 Running 0 51m
openshift-dns dns-default-45jl7 2/2 Running 0 50m
openshift-dns node-resolver-7wmzf 1/1 Running 0 51m
openshift-ingress router-default-78b86fbf9d-qvj9s 1/1 Running 0 51m
openshift-ovn-kubernetes ovnkube-master-5rfhh 4/4 Running 0 51m
openshift-ovn-kubernetes ovnkube-node-gcnt6 1/1 Running 0 51m
openshift-service-ca service-ca-bf5b7c9f8-pn6rk 1/1 Running 0 51m
openshift-storage topolvm-controller-549f7fbdd5-7vrmv 5/5 Running 0 51m
openshift-storage topolvm-node-rht2m 3/3 Running 0 50m
这个示例输出显示基本的 MicroShift 安装。如果安装了可选的 RPM,则输出中也会期望运行这些服务的 pod 的状态。