Jenkins 中基于角色的权限管理
文章目录
!版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。
系统环境:
- Jenkins 版本:2.213
一、简介
Jenkins 一般应用于项目构建与持续集成中,会提供给各个项目组使用,所以权限控制一般都是我们需要考虑的问题。在 Jnekins 中需要控制不同的项目组拥有不同的权限,每个项目组的用户只能看见自己组的项目,其中 Jenkins 提供了很多权限控制插件,比较推荐的就是 Role Authorization 插件 可以使用角色与矩阵式方式灵活控制权限。
Jenkins Role Authorization 插件 可以通过通配符方式给用户分配角色,即特定的用户只能看到特定前缀的 View 和 Job,所以一般来说创建的 Jenkins View 与 Job 命名都要带上跟项目相关的前缀。
例如,要在 Jenkins 中创建 alibaba-xxx 与 weixin-xxx 两个项目组,并且 Jenkins 中存在两个用户 xiao-ming 与 xiao-li,其中 xiao-ming 只能看到 alibaba-xxx 的 View 与 Job,xiao-li 只能看见 weixin-xxx 的 View 和 Job。
二、测试环境
为了后续方便测试权限,所以提前创建测试环境,创建 xiao-ming(小明)、xiao-li(小里) 两个用户:
在 Jenkins 中创建两个视图 weixin-xxx、alibaba-xxx 并且在两个视图中创建相应的任务:
- 视图 weixin-xxx: weixin-job-1、weixin-job-2
- 视图 alibaba-xxxx: alibaba-job-1、alibaba-job-2
三、安装 Role-based 插件
Role-based-Authorization 是 Jenkins 权限管理插件,我们需要提前安装此插件,进入 系统管理->插件管理->可选插件 搜索 Role-based,然后进行安装操作:
四、全局安全配置
接下来,我们需要将 Jenkins 的安全模式改成设置基于 Role Based Strategy 模式,这样会开启上面安装的插件。
进入 系统管理->全局安全配置 中将 访问控制 里 授权策略 配置为 Role-Based Strategy:
五、创建角色
下面将进入角色管理模块,这里角色分为 全局角色 与 组角色,全局角色权限包含整个 Jenkins API 权限,能操作系统、视图、插件等等配置。而组角色则只能操作跟 Job 相关的控制权限,是通过通配符方式与相关 Job 进行关联,用户拥有组角色就能操作通配符匹配的 Job。
下面将创建一个拥有全局可读权限的全局角色来保证全部用户拥有全部可读权限,然后再创建组角色,利用通配符方式匹配对应项目前缀,这样用户拥有“全局可读”+“匹配项目读写”权限。
1、进入角色管理
进入 系统管理->Manage and Assign Roles 可以看到 角色管理 与 角色分配:
点击 Manage Roles 进入 角色管理:
2、增加全局角色
增加一个跟项目组角色 group_project ,并且设置该角色 全局可读 权限:
3、增加组角色
在 Item roles 一栏添加组角色 group_weixin、group_alibaba 两个角色,并且设置:
- 角色 group_weixin 只能看见以 weixin- 开头的视图与项目。
- 角色 group_alibaba 只能看见以 alibaba- 开头的视图与项目。
设置完成后再设置两个角色都勾选全部权限,确保两个角色拥有该组的全部权限。
注意:Pattern 里面输入通配符,一般是项目前缀,经常以 “xxxx.*” 命名,“xxxx” 为前缀,“.*”为匹配任意名称。
配置完成后,点击保存,然后进行下一步 角色分配。
六、分配角色
点击 Assign Roles 进入 角色分配:
在 Global roles 中添加 xiao-ming、xiao-li 两个用户,然后再给予其 group_project 角色,让两个用户拥有全局可读权限:
然后在 Item roles 中也添加 xiao-ming、xiao-li 两个用户,然后分:
- 分配给 xiao-ming 角色给 group_alibaba 用户。
- 分配给 xiao-li 角色给 group_weixin 用户。
七、进行测试
分别用 xiao-ming 与 xiao-li 两个账号登录 Jenkins:
1、xiao-ming 进行登录测试
可以看到小明只能看到 weixin 组的项目:
2、xiao-li 进行登录测试
可以看到小明只能看到 alibaba 组的项目:
由这两个用户登录测试可知,确实能够通过这种基于角色与通配符方式控制 Jenkins 中的项目权限。
---END---
!版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。