Jenkins 作为一个开放的、可定制的平台,即使在默认状态下也提供了不错的安全性。但是鉴于 Jenkins 连接了许多行业工具,因此也存在一定安全隐患。本篇文章将会介绍一些方法和工具,来确保 Jenkins 实例的安全和可靠,同时也给使用 Jenkins 的用户提供安全保障。
软件漏洞随时可能暴露,因此软件供应商需要不断更新他们的应用程序来修复问题或者添加新功能,同时也消除安全漏洞。Jenkins 有一个自带的安全建议页面,可以让用户了解平台上的漏洞。总之,保持更新(包括插件)是一个避免安全风险的不错选择。
要检查 Jenkins 中的更新可以进行以下步骤:
-
-
Manage Jenkins 页面将在顶部提示是否有新版本可用。单击 Or Upgrade Automatically 按钮立即升级。如果不想自动升级,也可以只下载最新版本,并且任何自定时间进行升级即可。如果对升级后不满意,只需要单击 Downgrade 即可
-
-
-
确保在 Updates 选项上,勾选要安装的更新并单击 Download now and install after restart
-
Jenkins 在安装时启用其大部分安全功能来尽可能保障使用安全。鉴于每个用户使用 Jenkins 的习惯和方式不同,因此需要根据使用实例来进行配置。Jenkins 提供了有关用户可以查看的重要功能的详细文档,请参阅 Jenkins 官方文档(见参考链接)获取安全建议。需要注意的是,任何安全配置需要在仔细考虑后更改,如果有条件的话可以与网络安全专业技术人员交流后再进行配置。
Jenkins 提供了一个内置节点,方便用户可以尽快运行测试看看它是否适合。但是在单个实例上运行的构建可以访问用户操作系统的文件系统。出于这个原因,Jenkins 建议用户在“代理”上运行作业(在可扩展的设置也是类似的操作,使用动态构建代理在 Jenkins 中自动扩展)。代理是替代控制器用来运行虚拟的 Jenkins 实例,在使用代理时,用户可以有效阻止控制器运行构建从而限制对可能造成伤害的文件的访问。
-
-
单击 Manage Nodes and Clouds
-
-
-
如果不想在控制器上构建,请将 Number of executors 更改为0 。
-
如果想在需要时在控制器上构建,请从 Usage 下拉列表中选择 Only build jobs with label expressions matching this node
除了避免外在的安全威胁,也需要从内部保护 Jenkins 的使用环境。如果出现以下情况,安全威胁将大大增加:
-
使用单个管理员帐户运行 Jenkins
-
每个人都可以访问所有内容
-
为了避免上述情况引起的安全风险,以下是管理用户访问权限的一些建议。
为了帮助跟踪用户在做什么,请为使用 Jenkins 实例的任何人创建个人用户帐户。通过这种方式,可以查看所有活动以及谁做了什么。要创建额外用户,可以执行以下步骤:
-
-
-
-
建议使用矩阵授权策略插件在更精细的级别上管理用户对 Jenkins 的访问。通过使用此插件可以:
-
限制用户的访问权限,以便他们只能查看和管理他们所属项目的构建
-
-
-
-
单击 Available 选项并开始输入 Matrix Authorization
-
勾选插件左侧的框然后单击 Install without restart
-
-
-
Matrix-based security——允许用户管理全局用户和组权限。
Project-based Matrix Authorization Strategy——允许用户在项目级别管理用户和组权限。
-
完成选择后,使用按钮添加用户或组,并使用表中的复选框选择他们的访问级别。完成后单击保存。
如果用户正在使用其他系统进行访问管理,也许可以使用这些系统对其 Jenkins 用户进行身份验证。例如微软的 Active Directory 和 OpenID 都有插件,可以使用户免于在多个位置管理访问。
此外,还建议关注文件夹插件和基于文件夹的授权策略插件(Folder-based Authorization Strategy plugin)。文件夹插件允许在可嵌套文件夹中根据需要对任务进行分组,此插件可让用户对共享安全需求的作业进行分组,从而帮助对访问行为密切关注。而基于文件夹的授权策略插件通过让用户使用角色设置文件夹访问权限,从而来扩展和提高文件夹的安全性。
凭据绑定插件是加密和安全存储连接 Jenkins 与其他服务的凭据的最佳选择。Jenkins 官方在用户第一次安装 Jenkins 时也建议安装此插件。该插件允许用户存储和重复使用所有类型的身份验证方法,例如:
-
用户名和密码
-
SSH 用户名和私钥
-
机密文件
-
机密文本
-
证书
参考链接
https://www.jenkins.io/doc/book/security/