Harbor 复制模块权限验证:项目管理员对复制规则与作业的只读权限测试解析

发布时间:2026/9/11 21:50:04
Harbor 复制模块权限验证:项目管理员对复制规则与作业的只读权限测试解析 Harbor 复制模块权限验证项目管理员对复制规则与作业的只读权限测试解析【免费下载链接】harborAn open source trusted cloud native registry project that stores, signs, and scans content.项目地址: https://gitcode.com/GitHub_Trending/ha/harbor导读本文以 Harbor 仓库测试用例 7-11-Project-admin-readonly.md 为核心说明该用例的验证目的、运行环境、执行步骤与预期结果并结合 Harbor 源码RBAC 权限资源模型、v2.0 复制 API 的系统级鉴权实现、Portal 前端按钮级权限控制剖析项目管理员Project Admin对复制规则Replication Rule和复制作业Replication Job仅拥有只读权限背后的权限设计原理。读完本文你将理解 Harbor 中复制功能为何被设计为系统级能力、项目管理员在项目内复制页签下能做什么与不能做什么以及如何通过源码与测试用例双重确认这一行为。1. 测试用例背景与验证目的复制Replication是 Harbor 实现多云、多实例间制品分发与同步的核心能力管理员配置复制规则将制品从源实例复制到目标实例并可通过手动、定时或事件驱动方式触发执行同时可查看执行作业与日志。测试用例 7-11 的Purpose非常明确To verify project admin user has read-only privilege for replication rules and jobs.即验证项目管理员用户对复制规则和复制作业仅拥有只读权限。换言之项目管理员虽然对项目内的制品、标签、成员、扫描等拥有管理能力但在复制Replication这一功能域内其角色被收敛为只能查看、不能变更这正是 Harbor 将复制定位为系统级功能的具体体现。2. 环境与前置条件用例 7-11-Project-admin-readonly.md 对环境提出了四项明确要求#前置条件说明1至少两台 Harbor 实例正在运行且可用复制是跨实例操作需要源实例与目标实例2至少创建一条复制规则作为只读验证的对象之一3该复制规则至少产生一个复制作业验证规则与作业两类对象均只读作业可通过手动触发等方式产生参见同目录 7-05-Trigger-manual.md、7-06-Trigger-immediate.md、7-07-Trigger-scheduled.md4已将一名成员以admin角色添加到该复制规则所应用的项目中该成员即项目管理员是本次测试的被测用户其中第 4 点强调admin 角色指的是项目角色中的管理员Project Admin而非 Harbor 系统管理员System Admin——后者拥有全部系统级权限不属于本用例的验证对象。3. 执行步骤与预期结果用例给出的操作路径极短只有两步使用项目管理员用户登录 Harbor UI进入Projects - Project_Name - Replication页面即项目详情下的复制页签。预期结果Expected Outcome在步骤 2 中该用户应对所有复制规则和复制作业拥有只读权限。具体到 UI 行为即项目管理员可以查看规则列表、查看作业列表、查看作业日志但不应看到新建/编辑/删除规则、手动执行Run Now等写操作入口即使通过 API 直接调用写接口也会被后端鉴权拦截。该用例标记Possible Problems: None说明在正常实现下不存在已知的边界问题。4. 源码级原理剖析只读权限从何而来上述只读行为并非前端单纯的按钮隐藏而是由后端 RBAC 权限模型与 API 层鉴权共同保证的。以下逐一梳理。4.1 RBAC 资源与动作模型Harbor 在 src/common/rbac/const.go 中定义了权限评估所需的资源Resource与动作Action常量动作L22-L38ActionCreate、ActionRead、ActionUpdate、ActionDelete、ActionList等与 RESTful API 方法一一对应复制相关资源L73-L77ResourceReplication Resource(replication)复制执行/作业类资源ResourceReplicationAdapter Resource(replication-adapter)复制适配器ResourceReplicationPolicy Resource(replication-policy)复制规则策略资源。权限策略在PoliciesMapL164-L315中按作用域组织系统作用域 ScopeSystem下L177-L187明确授予了复制相关全部读写权限ResourceReplicationPolicyRead / Create / Delete / List / UpdateResourceReplicationRead / Create / ListResourceReplicationAdapterList。项目作用域 ScopeProject下L236-L313完全没有任何 replication 相关条目——项目作用域只覆盖日志、项目配置、仓库、制品、扫描、标签、配额、保留策略、不可变标签等。这是第一个关键证据复制权限只存在于系统作用域与项目作用域无关。4.2 项目角色权限映射projectAdmin 不包含复制写权限项目内成员角色在 src/common/rbac/project/rbac_role.go 的rolePoliciesMapL23中定义共四类projectAdmin、maintainer、developer、guest。其中projectAdmin角色L25-L120拥有项目内最广泛的权限包括成员管理member、元数据metadata、日志查看log、标签label、仓库repository 的 create/read/update/delete/pull/push、标签保留策略tag-retention、不可变标签immutable-tag、机器人账户robot、通知策略notification-policy、扫描scan、制品artifact、标签tag、P2P 预热策略preheat-policy、CVE 导出export-cve等。但通读projectAdmin的完整策略列表可以发现其中没有任何一条ResourceReplicationPolicy或ResourceReplication条目。这意味着即便在项目命名空间内评估项目管理员的权限复制规则与复制作业也不在其授权范围内。4.3 replication API 全部走系统级鉴权第二层保障来自 API 层。v2.0 的复制功能由 src/server/v2.0/handler/replication.go 中的replicationAPI实现其中每一个复制相关接口都通过RequireSystemAccess进行鉴权API 方法鉴权调用源码位置CreateReplicationPolicy新建规则RequireSystemAccess(ctx, ActionCreate, ResourceReplicationPolicy)L53-L54UpdateReplicationPolicy编辑规则RequireSystemAccess(ctx, ActionUpdate, ResourceReplicationPolicy)L132-L133ListReplicationPolicies规则列表RequireSystemAccess(ctx, ActionList, ResourceReplicationPolicy)L206-L207GetReplicationPolicy规则详情RequireSystemAccess(ctx, ActionRead, ResourceReplicationPolicy)L237-L238DeleteReplicationPolicy删除规则RequireSystemAccess(ctx, ActionDelete, ResourceReplicationPolicy)L248-L249StartReplication启动复制RequireSystemAccess(ctx, ActionCreate, ResourceReplication)L258-L259StopReplication停止复制RequireSystemAccess(ctx, ActionCreate, ResourceReplication)L282-L283ListReplicationExecutions执行列表RequireSystemAccess(ctx, ActionList, ResourceReplication)L292-L293GetReplicationExecution执行详情RequireSystemAccess(ctx, ActionRead, ResourceReplication)L354-L355ListReplicationTasks任务列表RequireSystemAccess(ctx, ActionList, ResourceReplication)L365-L366GetReplicationLog作业日志RequireSystemAccess(ctx, ActionRead, ResourceReplication)L425 附近RequireSystemAccess的实现位于 src/server/v2.0/handler/base.go从安全上下文取当前用户未认证返回UnauthorizedError若无法在系统命名空间system.NewNamespace()内满足指定动作与资源的权限则返回ForbiddenError。因此可以确认复制规则与复制作业的所有读写接口都是系统级资源接口。项目管理员不是系统管理员在系统命名空间内没有复制资源的任何授权故其对规则的创建、编辑、删除以及复制的启动、停止都会被拒绝而项目作用域内本就没有复制资源策略RequireProjectAccess路径同样无法放行写操作。这正是用例所验证的只读的硬性保障——即使绕过 UI 直接调用 API 也无法越权。4.4 前端按钮级权限控制Portal 侧同样做了权限收敛。复制组件hbr-replicationreplication.component.ts通过四个布尔输入控制操作能力Input() hasCreateReplicationPermission: boolean; Input() hasUpdateReplicationPermission: boolean; Input() hasDeleteReplicationPermission: boolean; Input() hasExecuteReplicationPermission: boolean;这些标志被透传给规则列表组件 list-replication-rule.component.ts并驱动模板 list-replication-rule.component.html 中新建执行等按钮的显隐if (hasCreateReplicationPermission)、if (hasExecuteReplicationPermission)。系统级复制管理页面total-replication-page.component.html为系统管理员视图将四个权限标志全部硬编码为true。而项目详情下的 Replication 页签复用同一组件从代码结构可以推断项目级页面传入的权限标志根据当前用户在复制资源上的实际授权计算得出由于项目管理员在项目作用域内不拥有任何复制资源策略这些标志均为false从而在 UI 上表现为只读——仅能查看规则、作业与日志。前端隐藏按钮 后端RequireSystemAccess拒绝的双重机制保证了只读语义无法被绕过。5. 用例在复制测试矩阵中的位置本用例是 Harbor 复制功能测试矩阵tests/testcases/Group7-Replication的一员该目录下共 16 个用例覆盖复制功能的完整行为面规则生命周期7-01 添加规则、7-02 编辑规则、7-03 删除规则、7-04 规则过滤触发方式7-05 手动触发、7-06 立即触发、7-07 定时触发作业与过滤7-08 作业过滤、7-09 作业日志查看、7-10 过滤权限边界本文的 7-11 项目管理员只读远端仓库Endpoint/Registry管理7-12 添加端点、7-13 编辑端点、7-14 删除端点、7-15 端点过滤、7-16 按端点 CA 证书管理。7-11 与 7-127-16 共同勾勒出复制的权限边界规则、作业、远端仓库的增删改均属系统级操作项目管理员仅可查看。6. 验证要点与结论结合用例步骤与源码证据执行本用例时可从三个层面确认只读行为UI 层面以项目管理员登录后进入Projects - 项目名 - Replication规则列表与作业列表可见、作业日志可查看但新建/编辑/删除规则、手动执行等入口不可见API 层面用项目管理员的会话直接调用POST /api/v2.0/replication/policies等写接口应收到 403Forbiddensrc/server/v2.0/handler/replication.go证明只读由后端强制保证权限模型层面复制资源仅存在于系统作用域src/common/rbac/const.go项目管理员角色策略中无任何复制条目src/common/rbac/project/rbac_role.go。结论Harbor 将复制规则与复制作业定位为系统级资源项目管理员对它们天然只有查看权限。该设计避免了项目级成员误改影响全局的复制配置是多实例同步场景下重要的权限安全边界。理解这一模型有助于在规划 Harbor 权限体系时正确区分系统管理员与项目管理员的职责范围并为自动化测试或二次开发中的权限断言提供依据。相关仓库路径速查测试用例tests/testcases/Group7-Replication/7-11-Project-admin-readonly.mdRBAC 资源与策略定义src/common/rbac/const.go项目角色权限映射src/common/rbac/project/rbac_role.go复制 API 鉴权实现src/server/v2.0/handler/replication.go系统级鉴权工具src/server/v2.0/handler/base.go前端权限按钮控制list-replication-rule.component.ts、total-replication-page.component.html【免费下载链接】harborAn open source trusted cloud native registry project that stores, signs, and scans content.项目地址: https://gitcode.com/GitHub_Trending/ha/harbor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考