3.5. 使用 policy.json 文件进行容器签名验证


您可以通过修改 policy.json 文件将 RHEL 配置为验证容器镜像签名。这样可确保 podmanbuildahskopeo 等工具仅从可信且未修改的源拉取镜像。

对于系统范围的配置,您可以修改 /etc/containers/policy.json 文件。对于无根用户,您可以在 $HOME/.config/containers/policy.json 文件中应用这些规则。

基于transportregistrynamespace 的策略范围限定

policy.json 文件结构验证规则分层,以确定哪些它们应用到特定的镜像。您可以使用以下元素对这些策略进行范围限定:

  • default :default 数组指定了回退策略,该策略适用于镜像不匹配任何已定义作用域的情况。
  • transport :您可以在 transports 对象中定义自定义策略。对于容器注册表,您可以在 docker 传输下定义自定义策略。
  • registrynamespace :您可以使用 transport 部分在不同的机构级别配置信任策略。您以以下任一方式对策略进行范围限定:

    • 将策略应用到整个注册表,例如,用于单一公司专用注册表的<registry>
    • 将策略缩小到特定命名空间或存储库,例如用于公共注册表的 <registry>/<namespace>
指定签名证书

您可以在注册表或命名空间块中定义签名要求,以强制相应的密钥或证书必须验证特定范围内的镜像。您可以配置以下键值对:

  • type:signedBy:指定容器工具仅接受具有有效签名的镜像。
  • keyType:指定您使用的密钥的格式,例如 GPGKeys
  • keyPath:指定用于验证的本地公钥或证书文件的绝对路径,例如 testdata/sequoia-key.pgp

您可以配置默认规则来接受所有内容。但是,您可以在 docker 传输中限制特定范围的命名空间,如 localhost:5003/simple-sq-signed-centos,来严格要求有效的签名。例如:

{
  "default": [
    {
      "type": "insecureAcceptAnything"
    }
  ],
  "transports": {
    "docker": {
      "localhost:5003/simple-sq-signed-centos": [
        {
          "type": "signedBy",
          "keyType": "GPGKeys",
          "keyPath": "testdata/sequoia-key.pgp"
        }
      ]
    }
  }
}
注意

配置处于活跃状态后,您必须运行 podman pull <registry>/<namespace>/<image> 命令。Podman 会按照您在 policy.json 文件中配置的策略,自动强制要求镜像必须存在签名。如果您试图从配置的注册表中拉取未签名或使用错误密钥的镜像,命令会失败。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部