身份与凭据插件的权限边界
验证:未记录
- 适用版本
- 未记录
- 验证范围
- 尚未登记验证记录。
本篇聚焦 Matrix Authorization Strategy 与 Credentials Binding。SSO 插件的具体选择取决于企业身份提供方,但无论使用 OIDC 还是 SAML,都要先验证组映射和紧急管理入口,再切换生产身份域。完整角色设计与绑定示例见用户、权限和凭据。
1. Matrix Authorization:理解继承和可配置权#
Matrix Authorization 可以在全局、项目和 Agent 级别授予权限。项目授权默认可能继承全局与父 Folder 的权限;给某人 Job/Configure 或 Agent/Configure 后,还要检查他能否借配置权扩大该对象上的能力。插件说明
| 身份 | 应验证的边界 |
|---|---|
| 普通开发者 | 只读/构建自己的测试 Folder,不能配置发布 Job 或生产 Agent |
| 发布审批人 | 能看到待审批任务并按策略批准,不能修改发布脚本或凭据 |
| 平台管理员 | 管理全局权限、插件和恢复入口;人数与操作审计受控 |
在预生产用各组的真实测试账号逐项验证:能否读其他 Folder、配置发布 Job、Replay、使用 Script Console、修改 Agent、访问凭据。修改父 Folder 后再跑一次,因为继承变化可能影响所有子项。不要只看权限矩阵截图;测试实际 HTTP/UI 与构建行为。
现有初始化 JCasC 样本只给 bootstrap 管理员授权。接入企业身份后,可在隔离实例用下面的片段替换 authorizationStrategy;组名必须是身份提供方实际返回的稳定组名,不能照抄示例。这里故意只给开发组全局读取,Folder 中的构建权由受控配置单独授予;不要在全局给 Job/Configure。
jenkins:
authorizationStrategy:
globalMatrix:
entries:
- group:
name: platform-admins
permissions:
- Overall/Administer
- group:
name: developers
permissions:
- Overall/Read
- group:
name: release-managers
permissions:
- Overall/Read重新加载前保留已验证的管理员会话及应急恢复入口;用三个测试账号实际登录。随后在测试 Folder 授 developers 的 Job/Read、Job/Build,在发布 Folder 只授需要的读取与审批路径。若使用项目矩阵,核对父 Folder 权限继承;Job/Configure 用户可以改变 Job 行为,不能把它当普通编辑权。Matrix Authorization 插件说明
2. Credentials Binding:绑定范围不等于安全边界#
Credentials Binding 的 withCredentials 在步骤执行期间把秘密提供给环境变量或临时文件。绑定范围应尽量短,并限定在可信 Job 与专用 Agent;日志遮罩只防意外显示,恶意脚本仍可编码或向外发送秘密。插件说明
可信发布 Job 中仅在调用外部服务的步骤绑定凭据,示例中的 shell 使用单引号避免 Groovy 先插值,关闭命令回显,且不把变量传给整个流水线:
withCredentials([string(credentialsId: 'staging-api-token', variable: 'API_TOKEN')]) {
sh '''#!/usr/bin/env bash
set -euo pipefail
set +x
printf 'header = "Authorization: Bearer %s"\n' "$API_TOKEN" |
curl --config - --fail --silent --show-error https://api.staging.example.com/healthz
'''
}审查一个使用凭据的 Job 时,沿着以下路径追踪:谁能修改 Jenkinsfile/共享库/Job 配置 → Job 能读取哪个 Folder 的凭据 → 实际落在哪台 Agent → Agent 能访问哪些网络和云身份。只要其中一段由不可信提交者控制,就不能把生产秘密绑定给该 Job。凭据文件绑定也要检查临时文件的位置与 workspace 可见性;不要把秘密文件归档为构建制品。
验收:普通 PR 修改 Jenkinsfile 试图调用生产凭据 ID,应在权限或任务隔离处失败;运行成功的受信 Job 日志、制品和工作目录不能留下明文秘密。轮换测试凭据后,新值生效且旧值在签发方失效。已有 Agent 云会话须另行撤销;撤销 Jenkins 登录令牌不会自动终止它。
3. 选择和升级时的停止点#
授权插件切换、SSO 插件切换和凭据存储迁移都可能锁死管理员或让旧权限意外继承。先在隔离恢复副本用真实组声明与测试凭据演练,保留已验证的应急管理通道;没有完成拒绝测试时不要把候选配置晋级生产。插件版本与 JCasC 字段按插件生命周期一起验证。