当开始使用Jenkins后,即会提示启用安全配置。
插件推荐
插件名 | 作用 |
---|---|
Role-based Authorization Strategy | 基于角色的授权策略(能够为不同角色不同项目分配不同权限) |
安全域
即用户管理,我在实际使用过程中,选择了Jenkins专有用户数据库(不允许用户注册)
当安全配置出现问题,导致登录失败时,解决方法是:
打开config文件,将<useSecurity>true</useSecurity>改为false,删除<authorizationStrategy>和<securityRealm>内容
授权策略
Jenkins默认提供了如下几种授权方式:
- 任何用户可以做任何事(没有任何限制)
- 安全矩阵:用户可以操作所授权的动作,但是所有项目一视同仁
- 登录用户可以做任何事
- 遗留模式
- 项目矩阵授权策略:扩展自"安全矩阵",可以进入每个项目中配置安全矩阵
在我们实际使用的场景中,有多个项目接入到Jenkins进行持续部署的工作,我们希望不同项目的人员是互不可见的,同时有些人员只可以查看构建情况,有些人员能够手动触发构建并有权限修改pipeline脚本。只有项目矩阵授权策略
符合我们的需求,但是这种策略需要每个项目、每个用户都进行配置,非常繁琐。最终使用了插件Role-based Authorization Strategy
,实现基于角色的授权策略。
Role-based Authorization Strategy:
(1)在全局安全配置
的授权策略
中选择Role-Based Strategy
(2)进入系统管理
——Manage and Assign Roles
,进入角色权限配置页面,页面中有3个配置选择Manage Roles(管理角色权限),Assign Roles(将角色分配给用户),Role Strategy Macros(通常不需要使用)
(3)Manage Roles:
角色分为3种,全局角色(Global roles)、项目角色(Project roles)、节点角色(Slave roles),这里主要考虑全局角色和项目角色。
注:全局角色会覆盖掉项目角色,如在全局中有读权限,则该角色被允许读所有项目(不管项目角色里面的设置)
1.当我们需要限制用户读/写权限都局限在项目的级别,可以为该角色提供一些有限的权限(如overall read)
2.添加Project roles时,需要提供项目的pattern,这样该角色的权限在匹配上的项目中都生效。pattern是一个正则表达式,且大小写敏感,例如Roger-.\*
能够匹配所有项目名以"Roger-"开头的项目。
配置的情况如下图:
(4)Assign Roles
进入assign roles界面,可以将user/group同时添加到global roles和item roles中,为用户添加相应的角色,从而进行角色的授权控制。
例如,我们有一个用户test,我们为其添加了全局的normal角色和项目的roger角色,如下图:
因此,test角色有全局overall的读权限(能够看到基本的页面),有凭证的读权限(能够看到所有凭证),有项目Roger-.*的运行、删除、编辑的权限,但是没有删除/编辑构建历史的权限。如下为使用test角色登录后只能查看Roger-test项目,不能进行系统配置、不能添加项目等等:
角色权限解释
Overall
Administer | Read |
---|---|
管理员,能够进行系统级的配置修改(会赋予角色所有的权限) | 读Jenkins的基本页面 |
Credentials(凭证)
Create | Delete | ManageDomains | Update | View |
---|---|---|---|---|
添加 | 删除 | 管理凭证的域 | 更新 | 查看(凭证管理页面) |
Agent(节点)
Build | Configure | Connect | Create | Delete | Disconnect | Provision |
---|---|---|---|---|---|---|
运行在节点上的job | 管理节点 | 连接 | 新建 | 删除 | 断开连接 | ? |
Job(任务)
Build | Cancel | Configure | Create | Delete | Discover | Move | Read | Workspace |
---|---|---|---|---|---|---|---|---|
构建 | 取消/中止构建 | 配置 | 新建(只有全局角色起效) | 删除任务 | 通过url访问时不报404错误(比Read的权限低,如果没有配置read权限,仍不能查看到项目的详细信息) | 移动任务所在文件夹(?) | 查看job的基本信息 | 查看job的工作目录 |
Run(job的构建历史)
Delete | Replay | Update |
---|---|---|
删除构建历史 | 回放历史构建(不起效?) | 为历史构建编辑一些备注信息 |
View(视图,只能在视图中查看有权限的项目)
Configure | Create | Delete | Read |
---|---|---|---|
编辑 | 新建 | 删除 | 查看 |
注:如果用户只有部分项目有权限但却有视图的编辑权限,可能会导致视图配置的出现问题
SCM
Tag |
---|
为源代码打tag(?) |