这是悟空的第 195 篇原创文章
官网:www.passjava.cn
你好,我是悟空。
本文目录如下:
Jenkins 对权限的支持是比较弱的,存在以下不足:
针对上面的不足,Jenkins 可以通过 RBAC 插件的方式来实现对权限的管控。RBAC 是常见的权限控制方案。
RBAC(Role-Based Access Control)
:基于角色的权限控制。通过角色关联用户,角色关联权限的方式间接赋予用户权限。
如下图所示,三个用户对应了三种角色,每个角色关联了不同的部署任务,通过这种关联方式间接赋予了用户权限。
目前发现这个角色权限插件是比较好用的,推荐给大家使用。
插件名:Role-based Authorization Strategy。可以到插件管理那里进行安装,如下图所示:
角色权限策略插件
Jenkins 自带了多种授权策略,如下图所示,在全局安全设置中可以选择授权策略。
对应的访问路径如下:
Dashboard->Manage Jenkins->Configure Global Security
当我们安装好 Role-based Authorization Strategy
插件后,就会出现一个 Role-Base Strategy
授权策略。
Jenkins 授权策略
下面开始演示如何基于这个授权策略来分配多个流水线的部署权限。
为了更好的演示角色权限管理功能,我创建了 3 个用户以及 4 个流水线任务。
创建用户的路径为:
http://<你的jenkins地址>:8080/securityRealm/
我在 jenkins 后台创建了几个用户:
如下图所示:
我创建了 4 个部署流水线任务,分别对应项目一和项目二的测试和生产环境。如下图所示:
项目一和项目二的测试和生产环境
然后还创建了两个分组:正式环境分组和测试环境分组。
正式环境分组:demo-prod-env
测试环境分组:demo-test-env
分组的好处是可以归类以及可以按组分配权限。
创建角色的路径如下图所示:
创建角色的页面路径
页面地址:
http://<你的jenkins服务ip>:8080/manage/role-strategy/
访问路径:
Dashboard->Manage Jenkins->Manage and Assign Roles->Manage Roles
这个插件可以创建三种角色:
全局角色适用于 Jenkins 中的任何任务,并覆盖你在任务角色中指定的任何内容。也就是说,当你在全局角色中授予角色权限 Job/Read
,无论你在任务角色中指定什么,都允许该角色读取所有任务。
所以为了分配不同任务权限给不同角色,这里对于全局角色勾选一个 Overall Read
权限即可。如下图所示:
我创建了一个全局角色:passjava
,如下图所示。
创建全局角色 passjava
后续将上面创建的三个用户加到这个 Global 角色中即可。
注意:如果这三个用户不加入到 passjava 角色中的话,后续这三个用户登录会提示报错,如下图所示:
我创建了三种任务角色:
如下图所示:
项目角色
下面解释下上面的权限配置:
passjava-prod.*
,则该角色将匹配名称以 passjava-prod
开头的所有任务,更多匹配规则可到该插件的官网上查看。点击蓝色的 passjava-prod.*
,则能看到匹配成功的任务:passjava-prod-project1
任务 和 passjava-prod-project2
任务,如下图所示:正则表达式匹配成功 项目
创建好全局角色和任务角色,我们就可以将用户加入到对应的任务角色中,用户和角色是多对多的关系。比如用户张三可以具有角色 A 和角色 B 的权限,角色 A 的权限也可以给用户张三和李四。
通过 Assign Roles
功能将三个用户都加入到 passjava 角色中。
开发组长查看项目列表
而是组长查看项目列表
可以从上面的结果看出用户、角色、权限分配完成,不同的用户可以部署不同的环境。
通过本篇的学习,我们了解了 RBAC 以及角色权限插件的使用。通过实战掌握了如何配置不同用户具有不同角色,不同角色具有不同任务的权限,从而可以更安全地管理用户的部署权限。
回到最开始提到的 Jenkins 的不足之处我们来看看解决方案是怎么样的: