主题
一、Jenkins 基于角色的权限控制插件使用手册
1.1 插件简介
Role-Based Strategy 插件是 Jenkins 中最常用的权限管理插件,它通过基于角色的访问控制(RBAC)模型,实现对 Jenkins 资源的精细化权限管理。该插件允许管理员创建不同的角色,为每个角色分配特定权限,然后将用户或用户组分配到这些角色中。
- 支持三种类型的角色:全局角色、项目角色和节点角色,实现多维度权限控制
- 支持基于正则表达式的项目匹配,灵活管理多项目权限
- 支持权限继承和组合,简化权限管理流程
1.2 插件安装
- 官方地址: https://plugins.jenkins.io/role-strategy/
- 安装方式: 系统管理 -> 管理插件 -> 可选插件 ->
Role-Based Strategy
-> 直接安装
1.3 配置方式
1.3.1 启用基于角色的权限策略
安装完插件后,需要先启用基于角色的权限策略:
- 进入 系统管理 -> 安全 -> 授权策略
- 选择 "Role-Based Strategy"
- 点击保存
1.3.2 角色管理
启用策略后,在系统管理菜单中会出现"Manage and Assign Roles"选项,点击进入角色管理界面:
在角色管理界面中,有三个选项卡:
- Manage Roles:创建和配置角色及其权限
- Assign Roles:将用户或组分配到角色
- Role Strategy Macros:管理宏定义(高级功能)
1.3.3 创建角色
在 "Manage Roles" 选项卡中,可以创建三种类型的角色:
1.3.3.1 全局角色(Global Roles)
全局角色用于控制 Jenkins 系统级别的权限,如系统配置、插件管理等。
- 在 "Global roles" 部分,输入角色名称(如 "sre"、"qa"、"dev")
- 点击 "Add" 按钮添加角色
- 为角色勾选相应的权限【⚠️ 一定要有全局Read 的权限,Permission:Role:dev】
- 点击 "Save" 保存设置
常见的全局角色配置:
- 管理员角色:拥有所有权限
- QA,SRE 角色:继承管理员权限,拥有所有权限
- 开发角色:拥有查看系统信息、查看 Job构建信息,状态,视图等权限,但无系统管理权限
1.3.3.2 项目角色(Project Roles)
项目角色用于控制对特定项目或项目组的访问权限。
- 在 "Project roles" 部分,输入角色名称(如 "project-developer")
- 输入项目匹配模式(Pattern),支持正则表达式(如 "." 匹配所有项目,"pipeline-." 匹配所有以 "pipeline-" 开头的项目)
- 点击 "Add" 按钮添加角色
- 为角色勾选相应的项目权限
- 点击 "Save" 保存设置
常见的项目角色配置:
- 项目管理员:拥有项目的所有权限
- 项目开发者:拥有构建、配置项目的权限
- 项目查看者:仅拥有查看项目的权限
项目匹配模式示例
.*
- 匹配所有项目(pipeline-4|pipeline-5)
- 仅匹配 "pipeline-1" 和 "pipeline-2" 项目
1.3.3.3 节点角色(Node Roles)
节点角色用于控制对 Jenkins 构建节点(agent)的访问权限。
- 在 "Node roles" 部分,输入角色名称(如 "node-admin")
- 输入节点匹配模式(Pattern),支持正则表达式
- 点击 "Add" 按钮添加角色
- 为角色勾选相应的节点权限
- 点击 "Save" 保存设置
1.3.4 分配角色
在创建完角色后,需要将用户或组分配到这些角色中。在 "Assign Roles" 选项卡中:
- 在相应的角色类型部分(全局、项目或节点),输入用户或组的名称
- 点击 "Add" 按钮添加用户或组
⚠️
在启用了 role-based strategy 插件后,一定要把 admin 用户也加入到 admin 的 roles 里,不然就无法登录上了!!!切记
- 勾选要分配给该用户或组的角色
- 点击 "Save" 保存设置
- 验证是否成功分配角色
1.4 最佳实践
1.4.1 角色设计原则
- 最小权限原则:为用户分配完成其工作所需的最小权限集
- 职责分离:将管理职责分配给不同的角色,避免权限过度集中
- 角色分层:创建层次化的角色结构,便于权限管理和继承
1.4.2 常见角色配置方案
基础三层角色模型
管理员角色
- 全局角色:拥有所有系统权限
- 项目角色:对所有项目拥有完全控制权
- 节点角色:对所有节点拥有完全控制权
开发者角色
- 全局角色:拥有查看系统信息权限
- 项目角色:对指定项目拥有构建、配置权限
- 节点角色:对指定节点拥有构建权限
查看者角色
- 全局角色:仅拥有整体查看权限
- 项目角色:对指定项目拥有只读权限
- 节点角色:对指定节点拥有只读权限
项目团队分离模型
为不同的项目团队创建独立的角色,每个团队只能访问和管理自己的项目:
- 团队A管理员:对 "team-a-.*" 项目拥有管理权限
- 团队A开发者:对 "team-a-.*" 项目拥有构建权限
- 团队B管理员:对 "team-b-.*" 项目拥有管理权限
- 团队B开发者:对 "team-b-.*" 项目拥有构建权限
1.4.3 权限审计与维护
定期审查角色和权限分配,确保:
- 移除离职人员的权限
- 调整角色权限以适应组织变化
- 检查是否存在权限过度分配的情况
⚠️
请确保至少保留一个具有管理员权限的用户,否则可能会导致无法管理 Jenkins 系统。
1.5 常见问题与解决方案
1.5.1 权限生效问题
问题:修改权限后没有立即生效
解决方案:
- 确保用户重新登录 Jenkins
- 检查是否正确保存了角色配置
- 验证用户名是否与 Jenkins 认证系统中的用户名完全匹配
1.5.2 正则表达式匹配问题
问题:项目匹配模式不按预期工作
解决方案:
- 使用 Jenkins 内置的正则表达式测试工具验证匹配模式
- 确保正则表达式语法正确
- 从简单模式开始,逐步增加复杂度
1.5.3 权限继承问题
问题:用户拥有未明确分配的权限
解决方案:
- 检查用户是否属于多个角色,权限可能来自其他角色
- 验证全局角色和项目角色之间的权限继承关系
- 检查是否启用了其他授权策略插件