返回资讯中心
外部精选
软件工程
#开发者实时流

GitHub Actions 新增工作流锁文件支持

来源标题:Lock Your GitHub Actions

GitHub Actions 现已支持 workflow lockfiles,可将对 Action 的引用锁定,避免因标签可变带来的供应链攻击风险。此前建议把 Action 固定到完整 SHA,现在可通过 gh CLI 安装 github/gh-actions-lock 扩展并运行 gh actions-lock 生成锁文件,工作流中改用 vX.Y.Z 标签形式。该锁文件同样适用于 Renovate、Dependabot 及 zizmor 校验流程。

Hacker News 最新gslin2026/11/11 · 今天11 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

目录 安装 锁定 它们 Renovate 与 Dependabot 验证 zizmor 锁定完成! 示例 GitHub Actions 现在支持 workflow lockfile。由于 GitHub Actions 是从 Git 获取的,之前的建议是固定到完整的 SHA 而不是 tag。这是因为 tag 是可变的,容易受到供应链攻击,攻击者可以把一个原本安全的 tag 指向恶意代码。

name: Lint
on: [push, pull_request, workflow_dispatch]
permissions: {}
env:
  FORCE_COLOR: 1
  RUFF_OUTPUT_FORMAT: github
jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
        with:
          persist-credentials: false
      - uses: j178/prek-action@44924fe9ef4a6f88253c4b6b1bf11c689d3ce53d # v3.1.0

以下是我配置 lockfile 的方法。为 gh CLI 安装 gh-actions-lock 扩展:

$ gh extension install github/gh-actions-lock
✓ Installed extension github/gh-actions-lock

锁定它们 # 在你的仓库中运行:

$ gh actions-lock
✓ All 1 workflows valid

workflow 现在使用 vX.Y.Z tag,看起来像这样:

diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 946971c..3503607 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
   runs-on: ubuntu-latest
   steps:
-      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
+      - uses: actions/checkout@v7.0.1
         with:
           persist-credentials: false
-      - uses: j178/prek-action@44924fe9ef4a6f88253c4b6b1bf11c689d3ce53d # v3.1.0
+      - uses: j178/prek-action@v3.1.0

并且它会在 .github/workflows/actions.lock 生成一个 lockfile:

# This file is machine-generated by `gh actions-lock`.
# Do not edit by hand; run `gh actions-lock` to update.
# Docs: https://gh.io/actions-lockfile
version: 'v0.0.3'
workflows:
  '.github/workflows/lint.yml':
    - 'actions/checkout@v7.0.1'
    - 'j178/prek-action@v3.1.0'
dependencies:
  'actions/checkout@v7.0.1':
    ref: 'v7.0.1'
    commit: 'sha1-3d3c42e5aac5ba805825da76410c181273ba90b1'
    owner_id: 44036562
    repo_id: 197814629
  'j178/prek-action@v3.1.0':
    ref: 'v3.1.0'
    commit: 'sha1-44924fe9ef4a6f88253c4b6b1bf11c689d3ce53d'
    owner_id: 10510431
    repo_id: 1052387486

提交修改后的 workflow 和新的 lockfile。好消息是,Renovate 和 Dependabot 都已经支持 lockfile!你的定期更新也会更新 lockfile。记得使用 cooldowns。GitHub 还建议在 CI 中验证 lockfile,以确保它是最新的且没有损坏。他们建议把这份 verify-lockfile.yml 复制到你的仓库中。我决定把它放进现有的 lint workflow,但放在单独的 job 里,这样它可以独立并行运行:

name: Lint
on: [push, pull_request, workflow_dispatch]
permissions: {}
env:
  FORCE_COLOR: 1
  RUFF_OUTPUT_FORMAT: github
jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7.0.1
        with:
          persist-credentials: false
      - uses: j178/prek-action@v3.1.0
  # Fails when .github/workflows/actions.lock is out of sync with the
  # workflows or a locked pin no longer verifies upstream.
  lockfile:
    runs-on: ubuntu-slim
    env:
      GH_TOKEN: ${{ github.token }}
    steps:
      - uses: actions/checkout@v7.0.1
        with:
          persist-credentials: false
      - run: gh extension install github/gh-actions-lock --pin v0.4.1
      - run: gh actions-lock --verify

注意我在这里使用了轻量级的 ubuntu-slim runner。另外,它固定到了 v0.4.1;我们总得在某个时候更新它,或者想办法自动化。那是以后的事了。别忘了我们刚刚修改了 workflow 中的 actions,所以需要用 gh actions-lock 重新锁定。如果只是添加到 lint.yml,实际上什么都不会变,因为它已经在锁定 actions/checkout 了。但如果你创建了像 verify-lockfile.yml 这样的新文件,就需要为它重新锁定。CI 会提醒你。zizmor 是一个 GitHub Actions 的安全 linter,强烈推荐使用。如果你还没用,请务必用上。v1.32.0 之前的版本会提示你对 actions 做哈希固定,而 v1.32.0 是第一个支持 lockfile 的版本。我在 prek 中使用 zizmor,所以在 .pre-commit-config.yaml 中添加/更新 zizmor:

- repo: https://github.com/zizmorcore/zizmor-pre-commit
  rev: v1.32.0
  hooks:
    - id: zizmor

锁定完成! # 好,提交并推送!头图:Slaymaker Barry Co. Sprocket Locks,载于 The Bearings(第 XII 卷第 23 期,1896 年 1 月 2 日),现藏于 Smithsonian Libraries and Archives,无已知版权限制。

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →