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。

流程

  1. 运行以下命令,下载相关的公钥并将其保存为 /etc/containers/RedHat_ReleaseKey3.pub

    $ sudo curl -sL https://access.redhat.com/security/data/63405576.txt -o /etc/containers/RedHat_ReleaseKey3.pub
    Copy to Clipboard Toggle word wrap
  2. 要将容器运行时配置为验证来自红帽源的镜像,请编辑 /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"
                    }
                }]
            }
        }
    }
    Copy to Clipboard Toggle word wrap

  3. 通过编辑 /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
    Copy to Clipboard Toggle word wrap
  4. 通过编辑 /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
    Copy to Clipboard Toggle word wrap
  5. 如果您的用例需要这些镜像源的签名验证,请创建特定于用户的 registry 配置文件。您可以使用此处的示例开始并添加您自己的要求。

后续步骤

  1. 如果您使用镜像 registry,请启用 sigstore attachments。
  2. 否则,继续清理本地容器存储。

10.4.2.1. 为镜像 registry 启用 sigstore 附加

如果使用镜像 registry,您必须应用额外的配置来启用 sigstore 附加功能,并通过摘要进行镜像(mirror)。

先决条件

  • 有对 MicroShift 主机的 admin 访问权限。
  • 您已使用 sigstore 完成"验证容器签名"中的步骤。

流程

  1. 通过创建 /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
    Copy to Clipboard Toggle word wrap
    1
    在镜像 registry URL 后命名 < mirror.registry.local.yaml > 文件。
  2. 通过创建包含以下内容的 /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
    Copy to Clipboard Toggle word wrap

后续步骤

  1. 清除本地容器存储清理。

10.4.2.2. 擦除本地容器存储清理

将配置应用到现有系统时,您必须清理本地容器存储。清理容器存储可确保正确下载带有签名的容器镜像。

先决条件

  • 有对 MicroShift 主机的管理员访问权限。
  • 您在镜像 registry 上启用了 sigstore。

流程

  1. 运行以下命令停止 CRI-O 容器运行时服务和 MicroShift:

    $ sudo systemctl stop crio microshift
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令擦除 CRI-O 容器运行时存储清理:

    $ sudo crio wipe --force
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令重启 CRI-O 容器运行时服务和 MicroShift:

    $ sudo systemctl start crio microshift
    Copy to Clipboard Toggle word wrap

验证

输入以下命令验证所有 pod 是否都处于健康状态:

$ oc get pods -A
Copy to Clipboard Toggle word wrap

输出示例

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
Copy to Clipboard Toggle word wrap

注意

这个示例输出显示基本的 MicroShift 安装。如果安装了可选的 RPM,则输出中也会期望运行这些服务的 pod 的状态。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat