Jenkins是一个基于MIT License协议的开源软件项目,是基于Java开发的一种持续集成(CI)工具,用于监控持续重复的工作,它可以集成各种插件完成持续编译、部署、测试,并将Job运行结果通过邮件发送给相关人员或者展示相关数据报告。

为保证Jenkins 环境的安全性,从Jenkins 2.0开始,Jenkins默认情况下启用诸多的安全选项,来保证诸如身份验证和角色授权等安全性。启用Jenkins安全性可以增强Jenkins的访

问控制,确保在访问Jenkins时对用户进行身份验证并授权其操作,保护Jenkins免受外部威胁。

启用安全性

选中“启用安全性”复选框后,是Jenkins 2.0以上的默认设置,用户可以使用用户名和密码登录,以执行匿名用户不能执行的操作。 用户在Jenkins中可以做什么操作取决于用户的授权策略及其配置。 默认情况下,匿名用户没有任何权限,而登录用户具有完全控制权限。 对于任何非本地Jenkins环境,应始终启用此复选框。

Jenkins管理员可以在Web UI中启用,配置或禁用“启用安全性”。

安全领域(Security Realm, 也称为身份认证,表示Jenkins如何以及从何处提取用户(或身份)信息

授权配置(Authorizaition, 定义Jenkins哪些用户和用户组可以访问Jenkins的哪些方面以及访问的程度

此外,插件(基于角色的授权策略插件)可以扩展Jenkins的访问控制功能,以支持更加细力度的认证和授权方案。

身份认证

默认情况下,Jenkins支持如下的身份认证方法:

  • 委托给Servlet容器

委派身份验证,依赖于运行Jenkins服务的Servlet容器(例如Jetty)。 如果使用此选项,查阅Servlet容器的身份验证文档

  • Jenkins用户数据库

使用Jenkins内置的用户数据存储进行身份验证,而不是委派给外部系统。 在Jenkins 2.0或更高版本的安装中,默认情况下启用此功能,适用于较小的环境

  • LDAP

将身份验证委托给已配置的LDAP服务器,包括用户和组。 对已经配置了外部身份提供程序(例如LDAP)的组织,此选项比较常见, 如下图所示:

  • Unix用户/组数据库

将身份验证委托给Jenkins主服务器上的Unix OS级用户数据库。 此模式还允许重新使用Unix组进行授权。 例如,可以将Jenkins配置为“开发人员组中的每个人都具有管理员访问权限”。注意,Unix允许用户和组具有相同的名称。 为了消除歧义,使用@前缀强制将名称解释为一个组。 例如,@ dev表示开发人员组,而不是dev用户

身份授权

指示用户在Jenkins中访问什么样的内容。 默认情况下,Jenkins支持如下不同的授权选项:

任何用户可做任何事(Anyone can do anything)

任何用户都可以完全控制Jenkins,包括尚未登录的匿名用户。除了本地测试Jenkins时,请勿使用该设置

版模式(Legancy Mode)

行为与Jenkins 1.164 版本完全相同。 如用户具有“admin”角色,则授予用户对系统的完全控制权,否则(包括匿名用户)将仅具有读取访问权限。 除了本地测试Jenkins时,请勿使用该设置

登录用户可以做任何事情 (Logged in users can do anything)

每个登录用户都可以完全控制Jenkins。 取决于高级选项的设置,匿名用户可获得对Jenkins的读取访问权限,或没有任何访问权限。 此模式可用于强制用户在执行操作之前登录,以便对用户的操作进行审核

基于矩阵的安全性(Matrix-based security)

该授权方案允许在Jenkins中对哪些用户和组能够执行哪些操作进行细粒度控制.

上表中的每一行代表一个用户或组(也称为“角色”), 包括名为“匿名”(anonymous)和“已认证”(authenticated)的条目。 “匿名”条目表示授予访问Jenkins中的所有未经身份验证的用户的权限。 而“已认证”可用于向访问该环境的所有已认证用户授予权限。

矩阵中授予的权限是可以累加的, 例如,如果用户“ kohsuke”属于“开发人员”和“管理员”组,则授予“ kohsuke”的权限将是授予“ kohsuke”,“开发人员”,“管理员”的所有权限的并集 ,

基于项目的矩阵授权策略(Project-based Matrix Authorization Strategy

此授权方案是基于矩阵的安全性的扩展,允许在“项目配置”中分别为每个项目定义其访问控制列表(ACL)。 允许仅授予特定用户或组访问指定项目的权限,而不授予Jenkins中所有项目的访问权限。

基于矩阵的安全性和基于项目的矩阵授权策略由矩阵授权策略插件提供,需要安装在Jenkins上

基于角色的授权策略

Jenkins使用Role Strategy插件来添加基于角色的授权机制来管理更加细粒度的用户的权限。 支持的功能如下:

  • 创建全局角色,例如管理员,作业创建者,匿名角色等,从而可以设置各种权限,如Overall,Slave, 作业,Run,查看和SCM权限
  • 创建基于项目(Project)角色,仅允许基于项目设置作业和运行权限
  • 创建基于Agent角色,允许设置与节点相关的权限
  • 将角色分配给用户和用户组

安装并启用插件

可以使用“插件管理器”屏幕从连接到Internet的任何Jenkins安装中安装“Role-based Authorization Strategy

”插件。 通过使用标准的“管理Jenkins”>“管理全局安全性”屏幕来激活基于角色的策略:

安装后,可以使用Manage Jenkins的“管理和分配角色”来配置插件:

配置角色

使用“管理角色”来定义角色。 可以定义全局角色和基于项目/Agent的角色

全局角色:

适用于Jenkins中的任何项目,会覆盖“项目角色” (Project Role) 中定义的权限。 也就是说,当授予角色“全局角色”中的 ( Job-Read)“作业读取”权限时,无论在“项目角色”中指定何种权限,都允许该角色读取所有作业。

基于项目和Agent的角色

可以为匹配的项目设置正则表达式模式, 旨在匹配相应的正则表达式

例如,如果将模式字段设置为Roger-.*,则该角色将匹配名称以Roger-开头的所有作业;

模式区分大小写。 要执行不区分大小写的匹配,使用(?i)表示法:大写,Roger-.*与小写,roger-.*与不区分大小写的(?i)roger-.*

可以使用诸如^ foo / bar.* 之类的表达式来匹配文件夹

分配角色

使用“分配角色”为用户和用户组分配角色

  • 用户组代表安全领域 (Security Realm )提供的相应的用户和用户组(例如LDAP插件提供用户和组)
  • 注意,两个内置组:authenticated的组,(即已登录的用户)和匿名anonymous(任何用户,包括尚未登录的用户)

如需了解更加详细信息,请参见 https://ke.qq.com/course/468003?tuin=9239b190



关注微信服务号,手机看文章
关注微信服务号,手机看文章