首页/开发/CI/CD 与发布速查/CI 凭据最小权限
环境与配置管理60 条

CI 凭据最小权限

流水线令牌按作业需要发放:默认只读、写权限逐项声明、发布凭据只在发布作业可见,降低单点被利用的波及面。

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

CI 凭据最小权限是什么

流水线里的长期凭据(云密钥、仓库令牌、部署密钥)按「谁的作业、什么时候、能干什么」收窄:默认只读起步、写权限逐项声明、发布凭据只在发布作业可见。和单纯的令牌权限不同,这里管的是凭据的完整生命周期:放哪、给谁、能不能轮换、泄了怎么办。三种常用隔离手段:环境或受保护变量限定可见范围、按作业绑定替代全局注入、发布与构建分离到不同凭据。

基本信息

GitHubpermissions 显式声明(默认收紧到只读);环境密钥仅在对应 environment 作业可见
GitLab受保护变量仅保护分支或标签可见;作业令牌范围有限
Jenkins凭据按文件夹或作业授权,避免全局可用
分层长期凭据越少越好:能换 OIDC 短时凭据的就不发静态密钥
审计导出平台日志记录令牌与密钥的使用动作,定期复核

典型使用场景

  • 新项目起步:默认只读,写权限随需求逐条评审加入
  • 发布隔离:发布凭据仅绑定发布作业,构建作业拿不到
  • 审计收窄:定期列出作业实际使用的权限与凭据,比对声明逐项削减
  • 泄露处置:凭据集中登记,出事时快速定位影响面并轮换
  • 多团队共享 Runner:凭据按项目或文件夹隔离,杜绝跨项目互读
  • 新增凭据评审:用途、可见范围、轮换周期三要素齐全才放行

GitHub 收紧默认

GitHub 收紧默认
permissions:
  contents: read

jobs:
  release:
    permissions:
      contents: write
      id-token: write
审计方式:列出每个作业实际用到的权限,与声明比对,缩小到刚好够用。
凭据按环境区分:开发、预发、生产各用独立凭据集,一套通吃等于把生产钥匙放在测试桌上。
短期凭据优先:OIDC 换取的临时凭据带过期时间,泄露窗口远小于静态密钥;云侧信任配置支持时应优先改造。

易错点

  • 全仓默认写权限:任意第三方步骤可改仓库,改成默认只读加按作业放开
  • 发布令牌供所有作业使用:构建阶段被入侵即失守,按阶段隔离
  • 一套凭据跨环境复用:测试环境泄露殃及生产,环境凭据独立
  • 凭据无登记无轮换:离职与轮岗后旧凭据仍有效,纳入台账定期轮换
  • OIDC 信任配置过宽:未限定仓库、分支与环境的信任策略等于谁都能换取云凭据,逐项收窄条件

数据来源与参考

  • GitHub Docs《Security hardening for GitHub Actions》
  • GitLab Docs《Protected variables》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌