7.4. 验证容器签名以进行供应链安全


您可以使用 sigstore 签名方法增强供应链安全性。

重要

sigstore 支持只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

7.4.1. 了解如何使用 sigstore 验证容器签名

您可以使用 sigstore 签名方法配置容器运行时以验证镜像的完整性。配置 MicroShift 容器运行时可启用镜像完整性的验证。通过 sigstore 项目,开发人员可以数字签名其构建的内容,创建将软件追踪回源的安全链。然后管理员可以大规模验证签名和监控工作流。通过使用 sigstore,您可以在与构建镜像相同的 registry 中存储签名。

  • 对于特定于用户的镜像,您必须更新配置文件以指向适当的公钥,或者禁用这些镜像源的签名验证。
重要

对于断开连接或离线配置,您必须将公钥内容嵌入到操作系统镜像中。

7.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. 否则,继续清理本地容器存储。

7.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. 清除本地容器存储清理。

7.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