当前位置:首页 > 文章列表 > 科技周边 > 业界新闻 > OCI 镜像签名怎样接入供应链发布流程

OCI 镜像签名怎样接入供应链发布流程

来源:17golang原创 2026-11-14 04:47:59 0浏览 收藏

OCI 镜像签名接入发布流程,关键是固定镜像摘要、保存可验证的签名材料,并在独立的发布或部署节点按预期身份执行验证。签名任务显示成功,只说明签名动作完成,不能代替“这个制品符合本次发布策略”的判断。

OCI 在 2024 年发布 Image 与 Distribution 1.1 时,将关联制品的表达和发现纳入规范:subject、artifactType 与 referrers API 为签名、证明等元数据提供共同的关联方式。这是已有规范背景,不是本文宣称的新发布事件。对交付团队而言,真正要落地的是镜像、关联材料和验证策略能够一起进入发布链路。

OCI 官方地址:https://opencontainers.org/

Sigstore 官方文档:https://docs.sigstore.dev/

为什么镜像已经签名,发布仍然不能放行

设想构建流水线签了一个 release 标签,部署侧稍后再按同名标签拉取。若标签指向的对象发生变化,两边看到的就不一定是同一个制品。另一个常见问题是只确认“存在签名”,却没有限制谁有资格签名。

先沿三个问题定位:待验证对象是哪一个摘要,关联材料能否读取,签名身份是否符合策略。不要从关闭检查开始排错。签名能证明的内容取决于签名对象和信任配置;它本身不证明镜像没有漏洞,也不能证明构建过程满足所有组织要求。

固定摘要与签名材料

构建并推送镜像后,从构建工具或注册表结果取得实际摘要,将完整的 仓库地址@sha256:摘要 写入发布记录。后续签名、验证和部署都引用它。摘要是内容标识;标签可以保留作为人类可读名称,但不应让各节点分别再次解析一个可变标签。

使用 keyless 签名时,需要考虑 OIDC 身份、证书、信任根和预期签发者。使用自管密钥时,则需要可信公钥来源和密钥使用权限。两种方式都不能把“签名者自己临时提供的任意信任材料”直接当成组织信任策略。

原创结构图展示镜像摘要关联签名与身份信任配置
原创结构说明图:摘要标识待发布对象,签名材料与身份约束分别提供验证输入。

签名、SBOM 和构建来源证明也要区分:签名负责把对象和签名者关联;SBOM 描述组成;来源证明描述特定构建信息。保存了某种附件,不等于已经验证其内容或满足业务要求。若策略要求后两者,应给它们单独的类型与验证规则。

把签名和放行放在不同节点

构建侧生成制品,签名任务对确定摘要生成签名;发布记录保存摘要和相关定位信息;独立验证器读取策略配置并验证,部署引用再使用被放行的摘要。这里的独立是职责和权限分离,不一定要求另一套平台。

验证器应知道预期的仓库、工作流或签名身份以及对应的 OIDC 签发者,而不是从待验证材料中复制一个身份再当作期望值。否则任何能完成某种签名的人,都可能被当成合法发布者。

原创说明图展示签名任务独立验证器发布记录与部署引用边界
原创结构说明图:发布记录、验证策略与部署引用都围绕同一个摘要,签名成功不自动等于放行。

以下是 keyless 方式的命令形状。变量必须来自当前流水线配置与真实构建输出;本文不提供可直接指向生产环境的值,也没有执行签名或验证。

# 镜像引用必须是已取得的实际仓库地址与摘要,不要重新解析可变标签
: "${IMAGE_REF:?请提供镜像摘要引用}"
cosign sign "$IMAGE_REF"

# 在独立验证节点中使用受控策略值,身份与签发者必须精确匹配
: "${EXPECTED_IDENTITY:?请提供预期签名身份}"
: "${EXPECTED_ISSUER:?请提供预期OIDC签发者}"
if ! cosign verify "$IMAGE_REF" \
  --certificate-identity "$EXPECTED_IDENTITY" \
  --certificate-oidc-issuer "$EXPECTED_ISSUER"; then
  printf '%s\n' '签名验证未通过,停止发布' >&2
  exit 1
fi

签名节点需要自己的授权机制和注册表写权限;验证节点需要读取镜像及关联材料,并使用受信任的工具和信任配置。CI 的 OIDC 签发者应以实际平台为准,不能把交互登录的身份提供方地址套到工作流身份上。代码中的停止行为只是门禁示例,完整发布步骤还应把验证成功与后续部署条件正确连接。

注册表复制后,为什么又找不到签名

跨注册表提升镜像时,仅复制镜像内容可能遗漏关联材料。应确认复制工具是否支持所用附件形式、目标注册表能否保存和发现这些材料,以及消费者使用的 Cosign 版本与格式是否兼容。当前 Cosign 文档描述使用 OCI 1.1 referrers 关联签名;历史工具链可能有不同存储约定,不能只看注册表里镜像标签存在就推断迁移完成。

在目标环境验证实际部署引用。如果迁移或重新打包改变了摘要,应按新的制品对象处理,不能把旧摘要的成功记录直接搬过去。多平台镜像还应写清策略签的是镜像索引还是平台子清单;不要把对子对象的验证自动解释为整个发布集合都已验证。

失败、回滚与记录如何收尾

现象优先定位
没有发现关联签名对象摘要、注册表权限、复制与附件发现能力
身份不匹配真实签名工作流与受控策略是否一致
签名存在但对象不匹配是否验证了另一个标签解析出的摘要
旧版本回滚无法通过旧摘要材料保留和当前信任策略的兼容边界

发布记录宜包含镜像摘要、签名方式、期望身份或公钥标识、策略版本、验证工具版本和判定结果。记录不得包含私钥或身份令牌。保留这些字段,是为了以后解释“当时依据什么放行”,而不是让一条成功日志永久替代部署时的策略。

回滚应回到明确的旧摘要,并按当前流程处理相关材料,不是简单把标签指回去就跳过验证。若依赖服务不可达,区分验证失败与无法完成验证;发布流程应采用事先确定的处置规则,不能在故障时临时取消身份约束。

有签名是否意味着镜像安全

不能这样推断。签名验证回答对象与身份的关联,漏洞、恶意行为和配置风险需要相应的其他控制。

能否只在 CI 验一次

取决于部署链路能否保证对象和放行记录不被替换。多团队、多注册表或动态部署环境通常需要在更接近实际使用的位置核对摘要和策略。

参考:OCI 1.1 关联制品规范背景;Cosign 容器签名;Cosign 签名验证。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
OpenTelemetry 日志与指标关联为什么需要统一上下文OpenTelemetry 日志与指标关联为什么需要统一上下文
上一篇
OpenTelemetry 日志与指标关联为什么需要统一上下文
Kubernetes Gateway API 与 Ingress 的职责边界有什么变化
下一篇
Kubernetes Gateway API 与 Ingress 的职责边界有什么变化
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    1018次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    1020次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    1155次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    1121次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    962次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码