GitHub Actions 正式支持工作流锁定文件功能,Python 核心开发者 Hugo van Kemenade 撰文介绍了这一供应链安全防护新方案。此前,由于 GitHub Actions 依赖从 Git 仓库获取,标签可被篡改,攻击者可将原本安全的标签指向恶意代码,形成供应链攻击,因此社区普遍建议在 workflow 中固定完整的 commit SHA,但这种方式牺牲了可读性和维护体验。新的 gh-actions-lock 是 gh CLI 的官方扩展工具,在仓库中运行后可自动将 workflow 中的动作改回 vX.Y.Z 版本标签,同时在 .github/workflows/actions.lock 生成锁定文件,记录每个依赖对应的 commit 哈希、仓库所有者 ID 和仓库 ID 等验证信息,兼顾可读性与可校验性。依赖管理工具 Renovate 和 Dependabot 均已支持锁定文件,周期性依赖更新时会同步更新锁定内容。GitHub 还建议在 CI 中独立运行验证任务,确保锁定文件与 workflow 保持同步且未被篡改,作者演示了在轻量级 ubuntu-slow 运行器上执行 gh actions-lock –verify 的做法。安全检查工具 zizmor 从 v1.32.0 起支持锁定文件,替代了此前建议的哈希固定检查方式。目前 CPython、Pillow、python/release-tools 等知名 Python 基础设施项目已通过 PR 率先采用该方案,生态落地速度较快。
事件分析
工作流锁定文件解决了长期存在的两难困境:哈希固定安全但不可读,版本标签可读但易被劫持。将哈希与仓库归属信息移入独立锁定文件后,校验逻辑还能覆盖依赖被转移仓库等此前难以防范的场景。这一改进的背景是近年开源供应链攻击频发,从 npm 恶意包浪潮到 tj-actions 漏洞事件,构建依赖的完整性验证已成为行业刚需,GitHub 选择在工具链层面给出标准化答案。CPython、Pillow 等核心项目迅速跟进,表明头部生态的接受度较高,后续大概率会成为开源项目安全审计的基线要求。值得关注的是,锁定文件由扩展工具而非平台原生提供,其长期维护和版本锁定策略仍需自动化补齐;GitLab CI、Gitea Actions 等其他 CI 平台是否会跟进类似机制,也将决定这一模式能否成为跨平台通行标准。
核心观点:锁定文件将供应链安全从开发者的个人纪律升级为机器可校验的工程规范,可读性与安全性首次兼得。
原文链接:Hacker News