用户、权限和短期凭据

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。

SSO(Single Sign-On)是单点登录;OIDC(OpenID Connect)是身份认证协议;RBAC(Role-Based Access Control)是基于角色的访问控制。目标:开发者能看日志和发起测试,发布经理能批准生产,平台管理员才能改全局安全配置。

1. 建立角色和身份#

先在隔离实例安装企业批准的 OIDC 或 SAML(Security Assertion Markup Language)插件,配置 issuer/回调地址/客户端秘密/组声明。管理员组必须使用身份系统实际返回的稳定组名;别把所有已登录用户授为管理员。

使用 Matrix Authorization(矩阵授权)或 Role Strategy(二选一):

身份 授权范围
platform-admins 全局管理、插件、Agent、共享库与安全配置
developers 自己 Folder 的 Read、Build、Cancel、日志/报告读取
release-managers 生产审批;是否可手动触发发布按组织策略决定
automation 限定 Job 的 API 调用,独立账号与短期/可轮换 token

生产 Job 的 Configure、Replay、凭据管理和可信库写入权限只给受信维护者;能修改将获得生产身份的脚本,本质上就能使用该身份。input submitter 限定审批人,但 Jenkins 管理员仍具有管理权限,不能宣称实现了对管理员的强隔离。

操作顺序:先保留已验证管理员会话,在 Manage Jenkins → Security 选择授权策略;给三个真实组授予必要的 Overall/Read,只有 platform-admins 获得 Overall/Administer。使用项目矩阵授权时,在对应 Folder 开启项目授权,按表分配 Job/Read、Job/Build、Job/Cancel;核对继承策略,避免从父级继承宽权限。release-managers 需能读取发布任务,审批允许组在 Jenkinsfile 单独配置。每改一组立即用该组测试账号重新登录验证,确认无误再退出管理员会话。

验收:用开发者账号尝试修改发布 Job、读取其他 Folder、访问 Script Console,均应拒绝;发布经理可以批准但不能随意修改流水线。确认企业身份故障后的应急流程,再移除 bootstrap 本地身份配置。Jenkins 安全

2. 凭据作用域与绑定#

凭据放在最小 Folder/用途范围;只给单一步骤绑定,不设成整个流水线的全局环境变量。示例在独立测试账号上执行:

withCredentials([string(credentialsId: 'staging-api-token', variable: 'API_TOKEN')]) {
  sh '''#!/usr/bin/env bash
set -euo pipefail
set +x
# Token goes through stdin, not command-line arguments.
printf 'header = "Authorization: Bearer %s"\n' "$API_TOKEN" |
  curl --config - --fail --silent --show-error https://api.staging.example.com/healthz
'''
}

避免 Groovy 双引号插值秘密,不打印环境变量或开启 shell tracing。日志遮罩只能减少意外泄漏,恶意代码仍能编码/外传秘密;有秘密的 Agent 不与其他信任域共享进程、工作目录或缓存。凭据说明

3. 云 API 优先短期身份#

AWS:构建节点使用 EC2 instance profile,或 EKS 的 Pod Identity/IRSA(IAM Roles for Service Accounts);必要时 AssumeRole 进入限定发布角色。GCP:使用附加的服务账号或工作负载身份联合。Jenkins 不会自动像 GitHub Actions 一样为每个 Job 提供可信 OIDC token,身份联合要有受支持的签发者、明确 audience 和声明约束。

综合项目将构建、预生产、生产身份分到独立节点。每个 Agent 只一个执行器;生产节点不运行 PR 代码。云权限至少拆分为推送指定镜像仓库、描述指定集群、限定命名空间的发布访问。参考 EKS 身份、GCP 身份联合。

演练:撤销测试凭据后任务应失败;轮换后无需修改源码恢复;日志、归档和镜像中无秘密。发现泄漏先撤销/轮换,再处理日志、制品与 Git 历史,单纯遮罩旧输出不使凭据失效。

4. 按真实 Job 验收身份隔离#

在预生产复制同一套 Folder、Agent 和云角色配置,测试资源只含合成数据;不拿生产凭据验证不可信代码。审批角色、能改脚本的角色、实际执行 Job 的云身份分别记录。

测试路径 预期结果
开发者运行普通构建 只能使用构建身份,不能选生产 Agent 或获得生产凭据
开发者修改生产 Job、Replay 或可信库 拒绝;检查继承权限和间接仓库写权限
构建身份访问其他应用仓库/秘密 云端权限拒绝;日志不输出秘密正文
获批生产 Job 云审计显示独立发布角色,运行时应用仍使用另一身份
撤销测试角色资源授权,再用原 Agent 会话访问 传播完成后拒绝;若 Agent 自动换取凭据,还要核对会话来源
轮换测试外部凭据 新连接通过,旧凭据在实际签发方失效,源码不需改动

AWS 在实际 Agent 的受控步骤执行 aws sts get-caller-identity,对照预期账号/角色,再运行该资源允许与拒绝测试;身份查询成功不能作为撤权失败的证据。GCP 联合身份按 身份验收与撤权 检查调用者及资源授权。

撤销 Jenkins 登录/API token 只关闭该入口,不一定停止已运行 Job 或清除 Agent 已拿到的云会话。事件处理中同时停止受影响任务、隔离 Agent、处理云会话与实际资源权限;清理工作目录或日志遮罩不能代替凭据撤销。AWS 会话边界。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭