当前位置:首页 > 文章列表 > 科技周边 > 业界新闻 > GitHub Actions artifact attestations 怎样在工作流中生成 SBOM 证明

GitHub Actions artifact attestations 怎样在工作流中生成 SBOM 证明

来源:17golang原创 2026-10-29 02:16:20 0浏览 收藏

如果工作流已经能构建出二进制或容器,还想把依赖清单一起交给发布链路,推荐使用 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。

GitHub Actions artifact attestations 中构建产物、SPDX 或 CycloneDX SBOM、actions/attest、OIDC 签名和证明存储的关系说明图
图1:SBOM 证明的对象关系说明图,展示产物、SBOM 与签名证明的绑定边界。

因此,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
GitHub Actions 工作流中权限、subject-path、sbom-path、actions/attest@v4 和证明输出的关系说明图
图2:工作流输入输出示意图,帮助定位权限、路径和证明产物各自承担的职责。

支持范围与旧 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,后续升级成本更低。

生成证明后就能阻止未签名镜像部署吗?

不能自动得到这个结果。还需要在消费方执行验证,并把验证结果接入发布或集群准入策略。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Kubernetes Gateway API 怎样用 HTTPRoute 按请求头分流Kubernetes Gateway API 怎样用 HTTPRoute 按请求头分流
上一篇
Kubernetes Gateway API 怎样用 HTTPRoute 按请求头分流
Node.js Permission Model 怎样限制运行时文件访问
下一篇
Node.js Permission Model 怎样限制运行时文件访问
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之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模型性能。
    764次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    760次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    842次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    813次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    641次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码