Nexus 用户与角色管理最佳实践笔记
·
一、 核心理念:最小权限原则
在进行任何权限管理时,都应遵循最小权限原则 (Principle of Least Privilege)。这意味着任何用户或自动化系统,只应被授予完成其任务所必需的、最少的权限。
为什么绝对不能在CI/CD中使用 admin 账户?
- 权限过大:
admin拥有管理整个 Nexus 的权限,远超CI/CD“上传/下载构件”的需求。 - 安全风险极高:一旦
admin凭证在CI/CD环境中泄露,攻击者可以控制整个私服,造成灾难性后果。 - 操作风险巨大:一个错误的脚本可能意外删除所有仓库或用户。
- 无法审计:无法追溯具体是哪个项目或任务执行了某个操作。
二、 策略选择:如何为CI/CD配置用户
我们有三种策略,推荐后两种。
| 策略 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
| 1. 每个项目一个专用用户 | 最安全,权限完全隔离,风险最小化。 | 稍显繁琐,每个新项目都需要在 Nexus 配置。 | ⭐⭐⭐⭐⭐ (最高推荐) |
| 2. 创建一个通用部署用户 | 方便与安全的最佳平衡,一次配置,所有项目通用。 | 凭证泄露会影响所有项目仓库的读写权限。 | ⭐⭐⭐⭐ (非常推荐) |
3. 使用 admin 用户 | 方便 | 极度危险 | ❌ 严厉禁止 |
三、 操作指南:三步完成配置
无论您选择策略1还是策略2,操作流程都是固定的三步:创建角色 -> 创建用户 -> 分配角色。
第1步:创建角色 (Role) - 定义“能做什么”
角色是权限的集合。我们先定义好权限,再把它赋予用户。
- 路径:登录 Nexus -> 左侧菜单 Security -> Roles -> Create role -> Nexus role。
【场景A:为单个项目 dajd 创建专用角色】
- Role ID:
dajd-deploy-role - Name:
DAJD Project Deploy Role - Privileges (权限): 在 “Available” 列表中搜索并添加以下权限到 “Given” 列表:
nx-repository-view-maven2-dajd-maven-releases-readnx-repository-view-maven2-dajd-maven-releases-addnx-repository-view-maven2-dajd-maven-releases-editnx-repository-view-maven2-dajd-maven-snapshots-readnx-repository-view-maven2-dajd-maven-snapshots-addnx-repository-view-maven2-dajd-maven-snapshots-edit
【场景B:创建一个所有项目通用的部署角色】
- Role ID:
global-deploy-role - Name:
Global CI/CD Deploy Role - Privileges (权限): 使用通配符 (
*) 来匹配所有 Maven 仓库。在 “Available” 搜索并添加:nx-repository-view-maven2-*-read(允许从所有maven仓库读取)nx-repository-view-maven2-*-add(允许向所有maven仓库上传)nx-repository-view-maven2-*-edit(允许修改所有maven仓库中的构件)nx-repository-view-maven2-*-browse(允许浏览所有maven仓库)
第2步:创建用户 (User) - 定义“谁来操作”
- 路径:登录 Nexus -> 左侧菜单 Security -> Users -> Create user。
- ID:
dajd-deployer(场景A) 或cicd-deployer(场景B) - First Name / Last Name: 任意有意义的名称
- Email: 您的邮箱
- Password: 创建一个强密码,并妥善保管。
- Status: Active
- Roles: 暂时留空,下一步再分配。
- 点击 Create user。
第3步:分配角色给用户 - 建立关联
- 路径:回到 Security -> Users 列表,点击刚刚创建的用户。
- 找到 Roles 管理区域。
- 从左侧 “Available” 列表中,找到您在第1步中创建的角色(如
dajd-deploy-role或global-deploy-role)。 - 将它移动到右侧 “Granted” 列表。
- 点击 Save 保存。
至此,您已经成功创建了一个权限受控的、可用于CI/CD的部署账户。
四、 最终连接:如何在 Maven settings.xml 中使用
Nexus 中的配置最终要在 settings.xml 文件中体现出来,才能被 Maven 工具使用。
<!-- 在 settings.xml 文件中 -->
<servers>
<!--
| 这是一个配置块,Maven通过 <id> 标签进行匹配。
| 这个 <id> 必须和您项目 pom.xml <distributionManagement> 下的 <id> 完全一致。
-->
<server>
<id>dajd-releases</id>
<!-- 使用您在 Nexus 中创建的用户名 -->
<username>cicd-deployer</username>
<!-- 使用您为该用户设置的密码 -->
<password>abc@1234</password>
</server>
<server>
<id>dajd-snapshots</id>
<username>cicd-deployer</username>
<password>abc@1234</password>
</server>
<!-- 如果有其他项目,可以继续添加 server 块,都使用同一个通用账户 -->
<server>
<id>other-project-releases</id>
<username>cicd-deployer</username>
<password>abc@1234</password>
</server>
</servers>
核心工作流:mvn deploy -> 读取 pom.xml 的 distributionManagement 找到 <id> -> 根据 <id> 在 settings.xml 的 <servers> 中查找匹配的 <server> -> 使用找到的 username 和 password 登录 Nexus 进行上传。
更多推荐

所有评论(0)