Skip to content

Artifact Attestation 配置

Artifact Attestation 是 GitHub 提供的软件供应链安全功能,可以为构建产物生成加密签名的来源证明。

使用 attest-build-provenance Action

yaml
- name: Attest Build Provenance
  uses: actions/attest-build-provenance@v2
  with:
    subject-path: 'dist/*'

参数详解

参数说明示例
subject-path需要签名的文件路径(必需)dist/app.exe, dist/*
subject-name可选,自定义名称my-app
push-to-registry是否推送到容器注册表true/false

文件路径模式

单个文件

yaml
- uses: actions/attest-build-provenance@v2
  with:
    subject-path: 'dist/app.exe'

使用通配符

yaml
- uses: actions/attest-build-provenance@v2
  with:
    subject-path: 'dist/*'

多个文件(多行指定)

yaml
- uses: actions/attest-build-provenance@v2
  with:
    subject-path: |
      dist/app-windows.exe
      dist/app-macos
      dist/app-linux

递归匹配

yaml
- uses: actions/attest-build-provenance@v2
  with:
    subject-path: 'dist/**/*.zip'

SLSA 安全级别

SLSA(Supply-chain Levels for Software Artifacts)是一个安全框架,定义了软件供应链的安全级别。

级别配置方式安全性适用场景
Level 2直接使用 attest-build-provenance基础保护内部工具、一般项目
Level 3使用 reusable workflow更高安全性公开发布、安全敏感项目

Level 2 配置(推荐)

对于大多数内部工具,Level 2 已经足够:

yaml
jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: write
      attestations: write
    steps:
      - uses: actions/checkout@v4
      - run: npm run build
      - uses: actions/attest-build-provenance@v2
        with:
          subject-path: 'dist/*'

Level 3 配置

如需更高安全性,使用 reusable workflow 隔离构建环境:

yaml
# .github/workflows/release.yml
jobs:
  build:
    uses: ./.github/workflows/build-reusable.yml
    permissions:
      id-token: write
      contents: write
      attestations: write

详细配置请参考 GitHub 官方 SLSA Level 3 指南

Attestation 存储

生成的 Attestation 会自动存储在 GitHub 的 Attestation 存储服务中,可通过以下方式访问:

  1. Release 页面 - 显示 "Verified" 标记
  2. gh CLI - 使用 gh attestation verify 命令
  3. API - 通过 GitHub REST API 查询

常见问题

Q: Attestation 生成失败

检查以下配置:

  • permissions 是否包含所有三个必需权限
  • Action 版本是否为最新(推荐 v2)
  • 文件路径是否正确

Q: 如何为已有 Release 补充 Attestation?

需要重新触发构建流程。建议创建新的 patch 版本(如 v1.0.1)。

软件安全标准文档