一、 核心理念:最小权限原则

在进行任何权限管理时,都应遵循最小权限原则 (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 创建专用角色】

  1. Role ID: dajd-deploy-role
  2. Name: DAJD Project Deploy Role
  3. Privileges (权限): 在 “Available” 列表中搜索并添加以下权限到 “Given” 列表:
    • nx-repository-view-maven2-dajd-maven-releases-read
    • nx-repository-view-maven2-dajd-maven-releases-add
    • nx-repository-view-maven2-dajd-maven-releases-edit
    • nx-repository-view-maven2-dajd-maven-snapshots-read
    • nx-repository-view-maven2-dajd-maven-snapshots-add
    • nx-repository-view-maven2-dajd-maven-snapshots-edit

【场景B:创建一个所有项目通用的部署角色】

  1. Role ID: global-deploy-role
  2. Name: Global CI/CD Deploy Role
  3. 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。
  1. ID: dajd-deployer (场景A) 或 cicd-deployer (场景B)
  2. First Name / Last Name: 任意有意义的名称
  3. Email: 您的邮箱
  4. Password: 创建一个强密码,并妥善保管。
  5. Status: Active
  6. Roles: 暂时留空,下一步再分配。
  7. 点击 Create user。
第3步:分配角色给用户 - 建立关联
  • 路径:回到 Security -> Users 列表,点击刚刚创建的用户。
  1. 找到 Roles 管理区域。
  2. 从左侧 “Available” 列表中,找到您在第1步中创建的角色(如 dajd-deploy-role 或 global-deploy-role)。
  3. 将它移动到右侧 “Granted” 列表。
  4. 点击 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 进行上传。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐