一、概述

虽然常见的凭证选项能够处理很多用例,但有时你可能希望使用更细粒度的方法来进行安全加固和授权。

一 个示范用例将创建一组具有特定权限的新角色,并将角色分配给个人用户。

基于角色的授权策略插件(Role-based Authorization Strategy plugin) 是为了提供这种功能而设计的

插件允许定义如下 三种角色。

全局角色(Global roles)

能跨越具有权限的项目(如任务、运行和源码管理)的角色。

项目角色(Item roles)

针对任务或者运行类别中的 一个项目的角色。

从节点角色(Node roles)

具有管理节点权限的角色。

二、基本操作

安装插件Role-based Authorization Strategy

在这里插入图片描述

启用Role-Based Strategy

在这里插入图片描述
在这里插入图片描述
选择Role-Based Strategy并保存
在这里插入图片描述
在管理 Jenkins 页面会增加一个Manage and Assign Roles
在这里插入图片描述
在管理和分配角色的界面上,主要功能有 三种选项:管理角色、分配角色和角色策略宏
在这里插入图片描述

三、管理角色

允许你创建 或删除角色并为它 们分配权限

在下面的矩阵中,每行是一个已定义的角色(默认为admin)、 每列是 一个指定权限的 Jenkins 对象(全部、凭证、代理等)
分类。要想给 一个角色授予权限,你只需要勾选该角色行中所需权限列上的复选框即可
在这里插入图片描述
可以通过在添加角色(Role to Add )文本框中输入想要的角色名称来创建 一个新角色。

项目和从节点部分也是这种模式。这些模式用于将 项目或从节点角色 分别关联到项目或从节点名称。

全局部分不需要模式,因为我们将特定的用户分配给那些角色, 而不是依赖匹配的用户 ID 。

模式匹配规则

角色模式是一 种正则表达式,用于根据对象的名称进行匹配一一项目名或节点名取决于角色的类型。项目的名称包括路径中所有 Jenkins 文件夹名称。

常用规则:

cpp-.*				#将匹配名称以cpp-开头的所有job

^git_.*feature_.*	#以git_开头,中间任意字符,feature_后面跟任意字符

"^upgrade_(aa|bb)_.*"		#(aa|bb)可以匹配aa或者bb

(dev.*|test.*)				#匹配dev.*或者test.*

(?!)cpp-.*					#不区分大小写

^foo/bar.*					#匹配文件夹 

全局角色示例

创建一个测试管理员(test-admin)的角色。**注意:实际使用中不建议这么做**
在这里插入图片描述
添加角色后,授予一些权限
在这里插入图片描述
根据经验,最好再创建一个只读的角色
在这里插入图片描述

项目示例

假设测试人员操作的job均以test开头,那么可以创建一个项目角色test-job,匹配模式为test.*
在这里插入图片描述
并授予对应的权限
在这里插入图片描述
优先顺序:
在这里插入图片描述

从节点角色示例

跟上述方法一致,test-slave.*可以匹配所有以test-slave开头的节点
在这里插入图片描述
在这里插入图片描述

四、分配角色

当我们建立了角色后,可以将用户或组分配给特定的角色。

我们使用分配角色(Assign Roles )界面来做这些(可以从管理和分配角色页面访问)。

对于管理角色页面上的每个角色类别, 分配角色页面上都有相应的部分。然而,后者的相应部分有更“ 髦”
的名称一一Item 角色和 Node 角色。 Item 角色对应于 Project 角色, Node角色对应于 Slave 角色。

这里的用法很简单。在每个部分(全局、项目和节点)中,行表示用户或组,列表示为类别定义的角色。请注意,匿名用户有一个默认条目。

为了允许一个用户/组具有与角色相关联的权限,只需在添加用户/组(User/group to add)文本框中输入用户/组的名字,点击添加按钮,然后勾选与你期望的角色对应的列中的复选框。

给test1用户授予read角色

在这里插入图片描述
在这里插入图片描述

给test1用户分配test-job的项目角色

在这里插入图片描述

验证角色设置

用test1用户登录,只能看到test开头的job
在这里插入图片描述

五、角色策略宏

其背后的思想是能够具有根据项目的某些特性来定义访问权限的宏,现在有以下三种
在这里插入图片描述
以BuildableJob 宏为例。
这个宏被设计用于过滤列表中的“可构建的”任务项目。
有几个原因可以解释为什么一个 Jenkins 中的项目可能是不可构建的,但在单独的任务层面上却是可构建的,最典型的就是因为
这个任务被禁用了。能最快地指示你 一个任务不可构建的就是,菜单上立即构建(BuildNow )选项的缺失。

红框中代表这些宏只适用于项目
在这里插入图片描述

示例

创建一个项目角色:@BuildableJob
在这里插入图片描述
创建一个新用户test2,给test2分配read全局角色和@BuildableJob项目角色
在这里插入图片描述

在这里插入图片描述
把test3项目禁用
在这里插入图片描述
以test1用户登录,可以看到test3项目
在这里插入图片描述
再以test2用户登录,因为它会绑定到BuildableJob角色,因此看不到被禁用掉的test3项目

在这里插入图片描述

六、参考书籍

《Jenkins2权威指南》

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐