Jenkins(三): Jenkins安全

 

 


 

Jenkins安全之安全矩阵和项目矩阵

 

Jenkins默认安全权限:登录用户可以做任何事情

如图:Dashboard"系统管理"------>"全局安全配置"

 

 

 

即默认是登录用户(所有用户)可以做任何事,即默认拥有所有权限。

若不修改默认配置,就无法做到:控制用户对某些项目授予只读权限,有风险。  

密码复杂度一定要高。

 

Jenkins的安全矩阵设置

作用:可针对用户配置只读权限
缺点:只针对用户,无法做到:控制某个项目只读

设置安全矩阵:"系统管理"------>"全局安全配置",如图,修改为安全矩阵,然后点击"Add user or group",对Admin和gk用户做不同的授权策略,Admin拥有所有权限,gk用户只有read权限,和任务的read权限。设置后点击保存。

 

 

 此时查看用户界面

Admin用户的界面:

 

 

 

gk普通用户的界面

 

 

 同时,gk用户只有只读权限,不能构建。

但是该安全矩阵,点击任务read的话,默认是所有项目都可read。这是一个缺点,由此引出项目矩阵授权。

 

 

 

Jenkins的项目矩阵授权策略

作用:安全权限可细化到每个项目

关于项目矩阵授权策略的描述:

这个授权模型扩展自"安全矩阵",允许把下面的ACL(访问控制列表)矩阵附加到每个项目定义中(在Job配置页面).
这允许你宣布类似这样的声明"约翰能够访问A,B和C,但是不能访问D." 查看"安全矩阵"的帮助文档来了解安全矩阵.

ACL配置是追加的,就是说下面的访问控制会追加到所有的项目配置中。

第一步:在"系统管理"------>"全局安全配置"中,选择项目矩阵授权策略。

添加Admin用户和gk用户,给与Admin所有权限,给与gk用户Read权限。然后保存。

 

 

 此时的Admin用户界面依旧如上,但是gk用户的界面此刻已经看不到任何项目。

 

 

 

第二步,使用Admin用户在项目中单独配置;点击项目,进入后选择"配置",然后在"General栏"选择"启用项目安全":

添加gk用户,并授予其所有权限。然后点击保存,那么gk用户就拥有该项目的所有权限,如图:

 

 

 然后切换用户,使用gk用户登录后的界面:有个gk_testShell项目,

 

 

 点击该项目进入后,拥有该项目的所有权限,如图

 

 

 

由上可知缺点:在管理方面,不好管理。

上面只是配置了一个项目,若有很多项目,那么就得每个项目去配置,太麻烦。不能针对某一类项目统一配置。即每搞一个项目就要配置一个,不能批量管理。

 

优化:Jenkins安全之基于角色的权限管理

 


 

Jenkins安全之基于角色的权限管理

 

基于角色的管理
  ①权限控制可以细化到项目
  ②而且能批量设置项目权限

 

管理角色前操作

一、基于角色的权限管理需要安装插件:Role-based

安装:Jenkins网页的"系统管理"------》"插件管理"-----》"可选插件"

 在下面寻找"Role-based Authorization Strategy"插件,如图

 然后点击安装。之后安装界面如图,然后点击返回首页

 划"√"后,页面会跳转到重启界面

 过一会后,会进入重新登录界面,然后输入Admin用户和密码,进入。

 二、启动Jenkins的角色管理

"系统管理"----》"全局安全配置"

选择该策略后,默认权限:admin拥有所有权限,其它用户无权限。

"系统管理"------>安全"Manage  and  Assign Roles",如图

在上图授权中,Admin用户默认是拥有所有权限的。

而在下图中,开启该插件功能后,在未进行任何配置的情况下,使用gk用户登录:如图此时是没有任何权限的。Admin还是默认拥有所有权限。

 

 

然后开始进行角色配置

关于Manage RolesManage Roles的简单描述:

       Manage Roles:管理角色----》类似群组设置,在里面创建管理的用户群,和项目群,并对其设置权限。

  Manage Roles:分配角色----》类似用户、项目设置,即在里面添加用户/项目,然后对用户/项目选择已创建的群组。都应用保存后,那么该用户,就拥有个群组中的用户群组权限,和项目群组中的对应的项目权限。

 

①基于角色的权限管理 "Manage Roles"(群组设置)

Global roles添加一个read组,即下图中的Global roles 全局角色,可以理解为群组,即admin群组,read群组只给与read只读权限。

项目角色添加:role:test,Pattern:gk.*

即设置Role角色可以包含的项目。

关于pattern:该模式用于匹配项目名称(作业、节点、从属项等)。这意味着您分配给此角色的权限将仅对名称与此模式匹配的项有效。即会匹配到:

 然后给项目授予权限:

此时,有两个Item Roles,即test和GK_shell。

 

②给用户分配全局角色、项目角色(角色/用户设置)

 进来如图,其中的read即为Manage roles中的Global Roles设置的群组。 

 如图,将User用户gk,添加到read群组中,而read群组的权限为read。应用后刷新gk用户登录页面,如图,只有读权限,显示不了项目权限,然后再接着配置下面的Item roles。

 配置Item Roles,如图

 然后点击应用,再次刷新gk用户界面,则可看到项目

然后点击该gk_remote项目,进入后可看到拥有该项目的读写权限。

 

 

 

总结:

Manage Roles:管理角色----》类似群组设置,在里面创建管理的用户群,和项目群,并对其设置权限。

Assign Roles:分配角色----》类似用户、项目设置,即在里面添加用户/项目,然后对用户/项目选择已创建的群组。都应用保存后,那么该用户,就拥有个群组中的用户群组权限,和项目群组中的对应的项目权限。

 

 新版的role-base有点bug,每个分配完权限,Manage Roles得应用一下才能生效。

Jenkins权限分配很重要,对于开发人员,最好是提供一个接口,供其调用,后面会讲到。

 

 

posted @ 2021-12-02 16:40  浮~生  阅读(1297)  评论(0编辑  收藏  举报