Jenkins 的安全域 (Security Realm) 和授权策略 (Authorization Strategy) 是 Jenkins 安全机制的两个核心组成部分,它们协同工作来控制谁可以访问 Jenkins 以及他们可以做什么。
简单来说:
-
安全域 (Security Realm):
- 作用:决定 “你是谁”。它负责身份验证 (Authentication),即验证用户的身份和凭据(例如,用户名和密码),并确定该用户所属的组(如果有的话)。
- 类型:
- Jenkins 自身用户数据库 (Jenkins’ own user database):这是最简单的配置,Jenkins 会在内部管理用户和密码。
- LDAP/Active Directory:允许 Jenkins 与现有的企业目录服务集成,用户可以使用其现有的域凭据登录。这对于大型组织来说非常方便。
- OAuth/SSO (Single Sign-On):通过第三方身份提供商(如 Google, GitHub 等)进行身份验证。
- Unix user/group database:在 Linux 系统上,可以使用操作系统用户。
- 配置步骤(以 Jenkins 自身用户数据库为例):
- 进入 Jenkins 主界面,点击 “Manage Jenkins” (管理 Jenkins)。
- 点击 “Configure Global Security” (配置全局安全)。
- 勾选 “Enable Security” (启用安全)。
- 在 “Security Realm” (安全域) 部分,选择 “Jenkins’ own user database” (Jenkins 自身用户数据库)。
- 如果需要允许用户自行注册,可以勾选 “Allow users to sign up”。通常为了安全,这个选项会取消勾选,由管理员统一创建用户。
- 保存设置。此时,Jenkins 会要求你创建一个管理员用户。
-
授权策略 (Authorization Strategy):
- 作用:决定 “你能做什么”。它负责授权 (Authorization),即在用户身份验证成功后,根据其身份或所属的组来确定其在 Jenkins 中拥有哪些权限(例如,查看项目、构建项目、配置系统等)。
- 类型:
- Anyone can do anything (Legacy mode):任何人都可以做任何事情,包括匿名用户。非常不推荐使用,极不安全。
- Logged-in users can do anything:只要用户登录了,就可以做任何事情。如果只有受信任的用户才有账户,这可能是一个选择,但如果允许不信任的用户注册,则会带来安全风险。
- Matrix-based security (基于矩阵的安全):这是最常用和推荐的授权策略。它允许你为每个用户或用户组分配细粒度的权限,以控制他们对 Jenkins 各个方面的访问。
- Project-based Matrix Authorization Strategy (基于项目的矩阵授权策略):在矩阵安全的基础上,可以为特定的项目设置更细致的权限。
- Role-Based Authorization Strategy (基于角色的授权策略):需要安装插件。它允许你定义不同的角色(例如,管理员、开发者、测试人员),然后将这些角色分配给用户或用户组,从而实现更灵活和可扩展的权限管理。
- 配置步骤(以 Matrix-based security 为例):
- 确保你已经启用了安全并配置了安全域。
- 进入 Jenkins 主界面,点击 “Manage Jenkins”。
- 点击 “Configure Global Security”。
- 在 “Authorization” (授权) 部分,选择 “Matrix-based security” (基于矩阵的安全)。
- 会出现一个权限矩阵表格。你可以添加用户或用户组,并勾选他们对应的权限。
- “anonymous”:代表未登录用户。
- “authenticated”:代表所有已登录用户。
- 你可以添加具体的用户名或组名。
- 为不同的用户/组勾选相应的权限,例如:
- Overall: Read (整体读取权限)
- Job: Build (构建项目)
- Job: Configure (配置项目)
- Overall: Administer (整体管理权限)
- 保存设置。
总结一下它们之间的关系:
- 安全域 解决了 “谁能登录进来” 的问题。
- 授权策略 解决了 “登录进来的人能做什么” 的问题。
它们是相互独立但又相互配合的。你可以选择一种身份验证方式(安全域),然后选择一种授权策略来控制权限。例如,你可以使用 LDAP 作为安全域来管理用户,然后使用基于矩阵的安全策略来分配这些用户的权限。
建议:
- 对于非本地(测试)Jenkins 环境,始终启用安全。
- 强烈建议使用 Matrix-based security 或安装 Role-Based Authorization Strategy 插件来实现更精细的权限控制,而不是 “Anyone can do anything” 或 “Logged-in users can do anything”。
- 最小权限原则:只授予用户完成其工作所需的最小权限。