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 Roles和Manage 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权限分配很重要,对于开发人员,最好是提供一个接口,供其调用,后面会讲到。