CI 凭据最小权限是什么
流水线里的长期凭据(云密钥、仓库令牌、部署密钥)按「谁的作业、什么时候、能干什么」收窄:默认只读起步、写权限逐项声明、发布凭据只在发布作业可见。和单纯的令牌权限不同,这里管的是凭据的完整生命周期:放哪、给谁、能不能轮换、泄了怎么办。三种常用隔离手段:环境或受保护变量限定可见范围、按作业绑定替代全局注入、发布与构建分离到不同凭据。
基本信息
| GitHub | permissions 显式声明(默认收紧到只读);环境密钥仅在对应 environment 作业可见 |
|---|---|
| GitLab | 受保护变量仅保护分支或标签可见;作业令牌范围有限 |
| Jenkins | 凭据按文件夹或作业授权,避免全局可用 |
| 分层 | 长期凭据越少越好:能换 OIDC 短时凭据的就不发静态密钥 |
| 审计 | 导出平台日志记录令牌与密钥的使用动作,定期复核 |
典型使用场景
- 新项目起步:默认只读,写权限随需求逐条评审加入
- 发布隔离:发布凭据仅绑定发布作业,构建作业拿不到
- 审计收窄:定期列出作业实际使用的权限与凭据,比对声明逐项削减
- 泄露处置:凭据集中登记,出事时快速定位影响面并轮换
- 多团队共享 Runner:凭据按项目或文件夹隔离,杜绝跨项目互读
- 新增凭据评审:用途、可见范围、轮换周期三要素齐全才放行
GitHub 收紧默认
GitHub 收紧默认
permissions:
contents: read
jobs:
release:
permissions:
contents: write
id-token: write审计方式:列出每个作业实际用到的权限,与声明比对,缩小到刚好够用。
凭据按环境区分:开发、预发、生产各用独立凭据集,一套通吃等于把生产钥匙放在测试桌上。
短期凭据优先:OIDC 换取的临时凭据带过期时间,泄露窗口远小于静态密钥;云侧信任配置支持时应优先改造。