首页/开发/CI/CD 与发布速查/GitHub Actions 权限声明
工具链要点63 条

GitHub Actions 权限声明

为工作流显式声明最小权限:permissions 可全局或按作业设置;OIDC 等能力需要单独开启(如 id-token: write)。

CI/CD 与发布速查开发更新于 2026-10-13

工作流权限声明是什么

为工作流显式声明最小权限:permissions 可以在工作流级设置默认,也可按作业级覆盖;默认收敛为只读,按需提升具体权限项。OIDC 等能力需要单独开启(id-token: write)。令牌权限越大,第三方动作被入侵时可造成的破坏越大,因此最小权限是工作流安全的第一道闸。

基本信息

写法工作流级声明权限对象
作业级jobs 下的 permissions 覆盖工作流级
方向默认收敛为只读,按需提升
OIDC需要 id-token: write
范围令牌仅对当前仓库与工作流生效
继承未声明时沿用仓库默认设置
审计权限变更随代码评审留痕

常用权限项

权限读用途写用途
contents检出代码、读文件推送提交、创建发布
packages拉取镜像包推送镜像包
id-token不可读换取云上短期凭据
pull-requests读取变更评论与更新合并请求
statuses读取提交状态写入提交状态
checks读取检查结果更新检查结论

最小权限与 OIDC

最小权限与 OIDC
# 工作流级:只读打底
permissions:
  contents: read
jobs:
  deploy:
    # 作业级:按需提升 OIDC
    permissions:
      contents: read
      id-token: write
    runs-on: ubuntu-latest
    steps:
      - run: echo "oidc ready"

典型使用场景

  • 部署作业上云:仅该作业开启身份令牌权限,其他作业保持只读
  • 三方动作收紧:把默认令牌权限压到只读,降低供应链风险
  • 发布作业:需要推送制品时按需提升对应权限项
  • 评审与检查:PR 检查类作业只读运行,不接触写操作
  • 权限审计:把 permissions 写进模板,评审时可直接核对
  • 多环境差异:生产部署作业权限最小化,与非生产分开定义
  • 模板统一:组织级工作流模板内置权限声明,避免逐仓库配置遗漏
  • 故障排查:权限不足时对照报错定位缺失项,而不是整体提权
默认权限受组织与仓库设置影响:不要依赖默认值,显式声明最稳妥。权限按作业拆分后更易审计:评审时对比变更前后的权限差异即可。
不要使用 write-all:任一第三方动作被入侵,影响面直接放大到全仓库。

易错点

  • 忘记 id-token: write:OIDC 获取令牌失败且报错含糊
  • 给 write-all:第三方动作被入侵时影响面扩大
  • 权限声明只在工作流级:所有作业共享高权限,偏离最小权限
  • 细粒度权限项名写错:工作流直接报错,调整时需对照官方清单

数据来源与参考

  • GitHub Docs《Security hardening for GitHub Actions》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌