3. GitLab 权限模型基础

在评审 CI/CD 模板目录的权限边界之前,必须透彻理解 GitLab 的权限模型。该模型决定了谁可以读取、写入、审批或管理模板仓库中的文件与配置。本章从三个核心维度展开:用户角色、组权限继承与项目权限覆盖规则。

3.1 用户角色体系

GitLab 定义了五个内置角色,权限从低到高依次为:Guest、Reporter、Developer、Maintainer、Owner。每个角色在项目与组级别拥有不同的操作能力。

角色 权限等级 核心能力(项目级别) 对 CI/CD 模板的影响
Guest 0 仅可查看公开项目的问题、讨论、里程碑 无法查看模板仓库代码,不能触发流水线
Reporter 10 查看代码、合并请求、流水线状态、下载制品 可浏览模板内容,但无法提交修改或触发 CI
Developer 20 推送分支、创建合并请求、触发流水线、查看日志 可修改模板文件、提交 MR、触发 CI 作业
Maintainer 30 合并 MR、管理 CI/CD 变量、配置保护分支、管理 Runner 可合并模板变更、修改 CI 配置、管理模板目录权限
Owner 50 删除项目、转移项目、修改可见性、管理所有设置 拥有模板仓库的完全控制权,可撤销任何权限
关键边界:在模板目录权限评审中,Developer 角色是默认的“写入边界”。任何超过 Developer 权限的变更(如直接合并到主分支、修改 CI/CD 变量)必须由 Maintainer 或 Owner 执行。

3.2 组权限继承模型

GitLab 的组(Group)是组织权限的核心单元。子组与项目会自动继承父组的权限设置,形成树状继承链。继承规则遵循“就近原则”:越靠近子节点的权限设置优先级越高。

继承路径示例:
根组 acme → 子组 acme/security → 项目 acme/security/ci-templates
如果根组将 Developer 角色设为“允许写入”,则子组与项目默认继承该设置,除非在子组或项目级别显式覆盖。
GitLab 组权限继承树 根组 acme 权限: Developer 可写 子组 security 继承: Developer 可写 子组 platform 继承: Developer 可写 ci-templates 继承: Developer 可写 ci-templates-prod 覆盖: 仅 Maintainer 可写 shared-runners 继承: Developer 可写 继承规则说明 子组与项目默认继承父组权限;红色节点表示在项目级别显式覆盖了继承设置。 覆盖后,子节点不再受父组权限变更影响。

3.3 项目权限覆盖规则

当组级权限无法满足特定项目的安全需求时,GitLab 允许在项目级别覆盖继承的权限。覆盖规则遵循以下优先级:

  1. 项目显式设置 > 组继承设置:项目级别的角色权限配置会完全替代父组传递下来的设置。
  2. 最小权限原则:覆盖时通常降低权限(如将 Developer 降为 Reporter),而非提升权限。
  3. 继承链中断:一旦项目设置了显式权限,该项目的子模块(如容器镜像、Package 注册表)不再受父组权限变更影响。
⚠️ 常见陷阱:在模板目录评审中,如果某个模板项目被设置为“仅 Maintainer 可写”,但父组后来将 Developer 权限提升为 Maintainer,该项目的权限不会自动升级——因为项目级别的显式覆盖阻断了继承链。务必在评审清单中记录所有显式覆盖的项目。

3.4 权限模型在模板目录中的应用

结合上述模型,在 CI/CD 模板目录的权限边界评审中,需要重点关注以下场景:

场景 推荐角色 评审要点
模板仓库只读访问 Reporter 确保外部团队可查看模板,但无法修改
模板贡献与 MR 提交 Developer 允许推送分支、创建 MR,但禁止直接合并到主分支
模板合并与发布 Maintainer 控制合并权限,管理版本标签与 CI/CD 变量
模板仓库全局管理 Owner 仅限平台管理员,负责权限审计与仓库删除
项目权限覆盖决策流程 开始:权限继承 项目有显式 权限设置? 是 → 使用项目设置 否 → 继承父组设置 最终权限 = 项目设置 OR 组继承 继承链在显式设置处中断 评审时需逐一检查每个模板项目是否设置了显式权限,并记录其与父组权限的差异。 显式设置的项目应作为高优先级审计对象。

3.5 权限边界评审清单

基于上述模型,在模板目录权限边界评审中,应逐项检查以下内容:

  • 角色映射:确认每个模板仓库的成员角色是否符合最小权限原则。
  • 继承链完整性:从根组到项目,逐层验证权限继承是否按预期生效。
  • 显式覆盖记录:标记所有在项目级别覆盖了组权限的仓库,并评估其合理性。
  • CI/CD 变量权限:检查哪些角色可以查看或修改模板仓库的 CI/CD 变量(通常仅限 Maintainer)。
  • 保护分支规则:确认主分支是否设置为“仅 Maintainer 可合并”,防止 Developer 绕过 MR 直接推送。
实践建议:在评审报告中,使用“权限矩阵表”列出每个模板仓库的组继承权限、项目显式权限、实际生效权限,以及对应的风险等级。这有助于快速定位权限过宽或过严的边界点。