Skip to content

一、Jenkins 基于角色的权限控制插件使用手册

1.1 插件简介

Role-Based Strategy 插件是 Jenkins 中最常用的权限管理插件,它通过基于角色的访问控制(RBAC)模型,实现对 Jenkins 资源的精细化权限管理。该插件允许管理员创建不同的角色,为每个角色分配特定权限,然后将用户或用户组分配到这些角色中。

  • 支持三种类型的角色:全局角色、项目角色和节点角色,实现多维度权限控制
  • 支持基于正则表达式的项目匹配,灵活管理多项目权限
  • 支持权限继承和组合,简化权限管理流程

1.2 插件安装

1.3 配置方式

1.3.1 启用基于角色的权限策略

安装完插件后,需要先启用基于角色的权限策略:

  1. 进入 系统管理 -> 安全 -> 授权策略
  2. 选择 "Role-Based Strategy"
  3. 点击保存

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 系统级别的权限,如系统配置、插件管理等。

  1. 在 "Global roles" 部分,输入角色名称(如 "sre"、"qa"、"dev")
  2. 点击 "Add" 按钮添加角色
  3. 为角色勾选相应的权限【⚠️ 一定要有全局Read 的权限,Permission:Role:dev】
  4. 点击 "Save" 保存设置

常见的全局角色配置:

  • 管理员角色:拥有所有权限
  • QA,SRE 角色:继承管理员权限,拥有所有权限
  • 开发角色:拥有查看系统信息、查看 Job构建信息,状态,视图等权限,但无系统管理权限

1.3.3.2 项目角色(Project Roles)

项目角色用于控制对特定项目或项目组的访问权限。

  1. 在 "Project roles" 部分,输入角色名称(如 "project-developer")
  2. 输入项目匹配模式(Pattern),支持正则表达式(如 "." 匹配所有项目,"pipeline-." 匹配所有以 "pipeline-" 开头的项目)
  3. 点击 "Add" 按钮添加角色
  4. 为角色勾选相应的项目权限
  5. 点击 "Save" 保存设置

常见的项目角色配置:

  • 项目管理员:拥有项目的所有权限
  • 项目开发者:拥有构建、配置项目的权限
  • 项目查看者:仅拥有查看项目的权限

项目匹配模式示例

  • .* - 匹配所有项目
  • (pipeline-4|pipeline-5) - 仅匹配 "pipeline-1" 和 "pipeline-2" 项目

1.3.3.3 节点角色(Node Roles)

节点角色用于控制对 Jenkins 构建节点(agent)的访问权限。

  1. 在 "Node roles" 部分,输入角色名称(如 "node-admin")
  2. 输入节点匹配模式(Pattern),支持正则表达式
  3. 点击 "Add" 按钮添加角色
  4. 为角色勾选相应的节点权限
  5. 点击 "Save" 保存设置

1.3.4 分配角色

在创建完角色后,需要将用户或组分配到这些角色中。在 "Assign Roles" 选项卡中:

  1. 在相应的角色类型部分(全局、项目或节点),输入用户或组的名称
  2. 点击 "Add" 按钮添加用户或组

⚠️

在启用了 role-based strategy 插件后,一定要把 admin 用户也加入到 admin 的 roles 里,不然就无法登录上了!!!切记

  1. 勾选要分配给该用户或组的角色
  2. 点击 "Save" 保存设置

  1. 验证是否成功分配角色

1.4 最佳实践

1.4.1 角色设计原则

  • 最小权限原则:为用户分配完成其工作所需的最小权限集
  • 职责分离:将管理职责分配给不同的角色,避免权限过度集中
  • 角色分层:创建层次化的角色结构,便于权限管理和继承

1.4.2 常见角色配置方案

基础三层角色模型

  1. 管理员角色

    • 全局角色:拥有所有系统权限
    • 项目角色:对所有项目拥有完全控制权
    • 节点角色:对所有节点拥有完全控制权
  2. 开发者角色

    • 全局角色:拥有查看系统信息权限
    • 项目角色:对指定项目拥有构建、配置权限
    • 节点角色:对指定节点拥有构建权限
  3. 查看者角色

    • 全局角色:仅拥有整体查看权限
    • 项目角色:对指定项目拥有只读权限
    • 节点角色:对指定节点拥有只读权限

项目团队分离模型

为不同的项目团队创建独立的角色,每个团队只能访问和管理自己的项目:

  1. 团队A管理员:对 "team-a-.*" 项目拥有管理权限
  2. 团队A开发者:对 "team-a-.*" 项目拥有构建权限
  3. 团队B管理员:对 "team-b-.*" 项目拥有管理权限
  4. 团队B开发者:对 "team-b-.*" 项目拥有构建权限

1.4.3 权限审计与维护

定期审查角色和权限分配,确保:

  1. 移除离职人员的权限
  2. 调整角色权限以适应组织变化
  3. 检查是否存在权限过度分配的情况

⚠️

请确保至少保留一个具有管理员权限的用户,否则可能会导致无法管理 Jenkins 系统。

1.5 常见问题与解决方案

1.5.1 权限生效问题

问题:修改权限后没有立即生效

解决方案

  • 确保用户重新登录 Jenkins
  • 检查是否正确保存了角色配置
  • 验证用户名是否与 Jenkins 认证系统中的用户名完全匹配

1.5.2 正则表达式匹配问题

问题:项目匹配模式不按预期工作

解决方案

  • 使用 Jenkins 内置的正则表达式测试工具验证匹配模式
  • 确保正则表达式语法正确
  • 从简单模式开始,逐步增加复杂度

1.5.3 权限继承问题

问题:用户拥有未明确分配的权限

解决方案

  • 检查用户是否属于多个角色,权限可能来自其他角色
  • 验证全局角色和项目角色之间的权限继承关系
  • 检查是否启用了其他授权策略插件
最近更新

采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 运维小弟