工作流权限声明是什么
为工作流显式声明最小权限: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:任一第三方动作被入侵,影响面直接放大到全仓库。