GitHub Actions artifact attestations 怎样在工作流中生成 SBOM 证明
如果工作流已经能构建出二进制或容器,还想把依赖清单一起交给发布链路,推荐使用 GitHub 当前的 actions/attest@v4。它把指定产物和 SPDX 或 CycloneDX JSON 格式的 SBOM 绑定起来,生成带签名的 SBOM 证明;证明生成后,消费方仍需使用 GitHub CLI 或自己的治理流程进行验证。
官方地址:https://github.com/actions/attest
subject-path指向要证明的构建产物,sbom-path指向 SPDX 或 CycloneDX JSON。- 最小权限通常是
id-token: write与attestations: write;关联 linked artifacts page 时再考虑artifact-metadata: write。 - 旧的
actions/attest-sbom已进入弃用迁移路径,新工作流优先写actions/attest@v4。
SBOM 证明到底绑定了哪些对象
这里容易把三件事混成一件事:构建产物是被描述的对象,SBOM 是对依赖组成的声明,attestation 则是把二者关联起来并附带签名的证明记录。actions/attest 不负责替你生成完整 SBOM,工作流要先通过现有工具得到 SPDX 或 CycloneDX JSON,再把文件路径传给 sbom-path。

因此,SBOM 文件存在并不等于它已经被证明;只有它和明确的 subject 绑定后,消费方才有机会核对“这份依赖清单描述的是哪个产物”。
权限和输入参数要成对配置
| 配置 | 作用 | 常见遗漏 |
|---|---|---|
id-token: write | 让动作获取用于签名的 OIDC 身份凭据 | 只给 contents 权限,导致签名阶段失败 |
attestations: write | 把证明写入 GitHub Attestations API | 动作执行了,但没有权限持久化证明 |
subject-path | 指定被证明的文件或匹配路径 | 路径指向构建前目录或文件名不一致 |
sbom-path | 指定 SPDX/CycloneDX JSON 文件 | 把文本报告或非 JSON 文件当作 SBOM |
可把最小片段放在“构建产物”和“生成 SBOM”之后。示例中的路径只是工作流约定,需替换成仓库实际输出位置:
permissions:
# 允许动作用 OIDC 身份申请短期签名凭据
id-token: write
# 允许把 attestation 写入 GitHub 的证明存储
attestations: write
contents: read
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 构建产物
run: make release
- name: 生成 SPDX SBOM
run: syft . -o spdx-json > sbom.spdx.json
- name: 生成 SBOM 证明
uses: actions/attest@v4
with:
# subject-path 必须指向已经生成的真实产物
subject-path: ./dist/my-app
# sbom-path 必须是 SPDX 或 CycloneDX JSON
sbom-path: ./sbom.spdx.json

支持范围与旧 action 的迁移边界
当前写法优先使用 actions/attest@v4。它根据输入进入 SBOM 模式;不提供 sbom-path 时,动作可以处理默认的构建来源证明。旧的 actions/attest-sbom 并不是另一个长期演进的实现,而是兼容包装层,官方仓库已经提示迁移到 actions/attest。
仓库可见性也会影响可用范围:公开仓库可使用 artifact attestations;私有或内部仓库要按当前 GitHub 计划和文档确认支持条件,GitHub Enterprise Server 不在该 action 的支持范围内。不要只因为 YAML 能解析,就把证明能力当作所有仓库都可用。
如果还希望把资产写入 linked artifacts page,需要单独考虑 artifact-metadata: write,并按官方说明配置 push-to-registry 与 subject 标识。这个开关不是生成普通 SBOM 证明的必选项,最好不要为了“看起来完整”而默认打开。
生成之后,消费方还要做验证
证明生成成功只说明工作流创建了一个签名关联记录,不代表部署系统已经拒绝未证明的构建,也不代表 SBOM 内容自动经过人工审查。发布团队应把验证动作放在消费侧,例如用 GitHub CLI 的 attestation 命令核对产物与 SBOM 的关联,再把结果接入发布门禁。
排查时按三层看:先确认 subject-path 在证明步骤之前已经产生,再确认 sbom-path 是可读的 SPDX/CycloneDX JSON,最后确认权限和仓库计划允许写入证明。这样能把“文件没生成”“输入不是 SBOM”和“API 没权限”分开处理。
相关问题
只上传 SBOM 文件,能替代 SBOM attestation 吗?
不能完全替代。上传文件解决的是分发,attestation 解决的是把 SBOM 与指定 subject 建立可验证关联;两者可以同时存在。
actions/attest-sbom 还能不能继续用?
它目前仍可作为兼容包装层工作,但官方已建议迁移到 actions/attest。新工作流直接采用新 action,后续升级成本更低。
生成证明后就能阻止未签名镜像部署吗?
不能自动得到这个结果。还需要在消费方执行验证,并把验证结果接入发布或集群准入策略。
Kubernetes Gateway API 怎样用 HTTPRoute 按请求头分流
- 上一篇
- Kubernetes Gateway API 怎样用 HTTPRoute 按请求头分流
- 下一篇
- Node.js Permission Model 怎样限制运行时文件访问
-
- 科技周边 · 业界新闻 | 25分钟前 |
- Docker Buildx 怎样把多平台镜像一次推送到仓库
- 123浏览 收藏
-
- 科技周边 · 业界新闻 | 28分钟前 | Kafka · Apache Kafka KRaft 集群元数据 controller quorum
- Apache Kafka KRaft 模式怎样管理集群元数据
- 125浏览 收藏
-
- 科技周边 · 业界新闻 | 30分钟前 |
- PostgreSQL 逻辑复制怎样按表选择发布内容
- 170浏览 收藏
-
- 科技周边 · 业界新闻 | 30分钟前 |
- Sigstore Cosign 怎样验证容器镜像签名
- 331浏览 收藏
-
- 科技周边 · 业界新闻 | 35分钟前 |
- Rust 2024 Edition 怎样准备项目迁移
- 307浏览 收藏
-
- 科技周边 · 业界新闻 | 35分钟前 | 云原生 · 软件供应链 CNCF TAG App Delivery 云原生应用交付
- CNCF TAG App Delivery 怎样理解供应链交付边界
- 161浏览 收藏
-
- 科技周边 · 业界新闻 | 41分钟前 | 可观测性 · 内存限制 OpenTelemetry Collector memory_limiter
- OpenTelemetry Collector memory_limiter 限制内存峰值的配置方法
- 344浏览 收藏
-
- 科技周边 · 业界新闻 | 47分钟前 |
- Go 1.25 testing/synctest 正式可用后怎么测试并发
- 130浏览 收藏
-
- 科技周边 · 业界新闻 | 49分钟前 |
- Python 3.14 新增解释器优化如何影响部署
- 416浏览 收藏
-
- 科技周边 · 业界新闻 | 50分钟前 | Node.js · 文件系统 · Node.js 文件访问 Permission Model 运行时权限
- Node.js Permission Model 怎样限制运行时文件访问
- 257浏览 收藏
-
- 科技周边 · 业界新闻 | 55分钟前 | kubernetes · 业界新闻 · Kubernetes Gateway API HTTPRoute 请求头分流
- Kubernetes Gateway API 怎样用 HTTPRoute 按请求头分流
- 284浏览 收藏
-
- 科技周边 · 业界新闻 | 16小时前 |
- GitHub 移动端处理紧急修复的权限边界
- 123浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 764次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 760次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 842次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 813次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 641次使用
-
- 蒙面演唱引争议,旺仔小乔被平台封禁
- 2025-08-08 501浏览
-
- openGauss向量驱动升级,RAC多写突破内核
- 2025-07-30 501浏览
-
- 安普瑞斯工厂放假,电芯供应受影响
- 2025-07-04 501浏览
-
- 农产品APP开发优势与功能全解析
- 2025-04-30 501浏览
-
- 开店省钱妙招,外卖系统同城配送运营攻略
- 2025-04-26 501浏览

