Jenkins - 安全
Jenkins - 安全配置
Section titled “Jenkins - 安全配置”保护你的 Jenkins 实例安全至关重要,这样才能保护你的构建流程、源码访问、凭据和部署流水线。默认情况下,全新的 Jenkins 安装可能允许匿名用户拥有完全控制权,这是非常不安全的。
步骤 1: 启用安全
Section titled “步骤 1: 启用安全”-
导航到 Manage Jenkins → Security。
-
勾选 ‘Enable security’(启用安全)复选框。
启用后,你必须配置一个安全领域 (Security Realm)(身份验证)和一个授权策略 (Authorization Strategy)。
步骤 2: 配置安全领域 (身份验证 - 你是谁?)
Section titled “步骤 2: 配置安全领域 (身份验证 - 你是谁?)”这决定了 Jenkins 如何验证用户身份。
- Jenkins 自己的用户数据库 (Jenkins’ own user database):(启用安全后的默认设置)Jenkins 维护自己的用户和密码列表。适用于小型设置。确保 ‘Allow users to sign up’(允许用户注册)未勾选,以更好地控制用户。你通过 Manage Jenkins → Users 管理用户。
- LDAP / Active Directory: 集成你组织现有的目录服务。用户使用其标准公司凭据登录。需要 ‘LDAP Plugin’ 或 ‘Active Directory Plugin’。配置涉及指定服务器详情、域名以及用户/组搜索基准。
- Unix 用户/组数据库 (Unix user/group database): 使用底层操作系统的用户账户(对于 Web UI 访问较少使用)。
- 委托给 Servlet 容器 (Delegate to servlet container): 如果 Jenkins 运行在 Tomcat/Jetty 中,身份验证可由容器处理。
- OAuth / SAML: 使用相关的插件(例如 ‘GitHub Authentication’、‘SAML’、‘OpenID Connect Authentication’),与外部身份提供者 (IdPs) 集成,如 GitHub、Google、Okta、Azure AD。
选择最适合你环境的安全领域。LDAP/AD 或 SSO (SAML/OAuth) 在企业环境中很常见。
步骤 3: 配置授权策略 (权限 - 你能做什么?)
Section titled “步骤 3: 配置授权策略 (权限 - 你能做什么?)”这定义了经过身份验证的用户(或匿名用户,如果允许的话)可以执行哪些操作。
- 任何人都可以做任何事 (Anyone can do anything):(高度不安全 - 避免使用!)授予所有用户(包括匿名用户)完全控制权。
- 已登录用户可以做任何事 (Logged-in users can do anything): 授予所有经过身份验证的用户完全控制权。比上一个好,但仍然缺乏精细的控制。
- 遗留模式 (Legacy mode): 模拟旧版本 Jenkins 的行为(通常不推荐)。
- 基于矩阵的安全 (Matrix-based security): 提供一个网格,用于全局向单个用户或组授予特定权限(Read, Build, Configure, Administer 等)。
- 基于项目的矩阵授权策略 (Project-based Matrix Authorization Strategy): 扩展基于矩阵的安全,允许你除了全局权限外,还可以定义每个项目(作业/文件夹)的权限。提供了更精细的控制。
- 基于角色的授权策略 (Role-based Authorization Strategy):(需要安装 ‘Role-based Authorization Strategy’ 插件)定义角色(例如 ‘developer’, ‘tester’, ‘admin’),为角色分配权限,然后将用户/组分配给角色。与矩阵策略相比,管理大量用户/作业的权限通常更容易。
建议: 启用安全后,最初先选择 ‘Logged-in users can do anything’,以避免将自己锁定在系统外。然后,立即配置 ‘Matrix-based security’(首先添加你的管理用户并授予完整的 ‘Administer’ 权限),或者安装并配置 ‘Role-based Strategy’ 插件以实现更稳健的控制。
使用基于矩阵或基于角色的策略时,务必确保至少为一个管理用户或组授予 ‘Overall/Administer’ 权限。
步骤 4: 管理用户 (如果使用 Jenkins 数据库)
Section titled “步骤 4: 管理用户 (如果使用 Jenkins 数据库)”如果选择 ‘Jenkins 自己的用户数据库’ 作为安全领域:
- 导航到 Manage Jenkins → Users。
- 点击 ‘Create User’。
- 填写用户名 (username)、密码 (password)、全名 (full name) 和电子邮件 (email)。
- 点击 ‘Create User’。
- 对所有必要用户重复此操作。
- 返回 ‘Configure Global Security’,在授权矩阵/角色中为这些用户分配权限。
其他安全注意事项
Section titled “其他安全注意事项”- 代理安全 (Agent Security): 保护控制器和代理之间的连接。尽可能使用 SSH 代理。对于 JNLP 代理,启用 ‘Agent → Controller Access Control’ 以限制代理在控制器上能做的事情。
- CSRF 防护 (CSRF Protection): 保持 ‘Prevent Cross Site Request Forgery exploits’(防止跨站请求伪造攻击)启用(默认)。
- 标记格式化程序 (Markup Formatter): 设置为 ‘Safe HTML’ 或 ‘Plain text’,以防止通过作业描述或构建输出可能发生的 XSS 攻击。
- 凭据管理 (Credentials Management): 使用 Jenkins 凭据系统 (Manage Jenkins → Credentials) 管理所有秘密信息(密码、令牌、密钥)。切勿在作业配置或 Jenkinsfile 中硬编码秘密信息。
- 定期更新 (Regular Updates): 保持 Jenkins 核心和插件更新,以获取安全补丁。
配置安全设置后,点击 ‘Save’。你可能会被注销,需要使用基于新配置拥有适当权限的用户的凭据重新登录。