4. 权限模型设计

在 Agent 操作执行权限控制中,权限模型决定了“谁在什么条件下能做什么”。三个主流模型——基于角色的访问控制(RBAC)、基于属性的访问控制(ABAC)、基于关系的访问控制(ReBAC)——在粒度、动态性、管理复杂度上截然不同。本章从架构视角拆解三者的模块边界、系统分层、组件职责、数据流/控制流/信任链路,并给出选型权衡、风险点、落地步骤及验收标准。

4.1 模块边界与系统分层

无论采用哪种模型,权限控制逻辑在系统中都落在 策略执行点(PEP)、策略决策点(PDP)、策略信息点(PIP)、策略管理点(PAP) 四个模块之内。其边界如下表所示:

模块职责跨模型差异
PEP(策略执行点)拦截 Agent 操作请求,调用 PDP 做决策,并根据决策结果允许/拒绝PEP 接口统一,不依赖模型
PDP(策略决策点)获取策略与上下文,计算并返回 Permit/Deny/NotApplicableRBAC 查角色权限表;ABAC 评估属性规则;ReBAC 遍历关系图
PIP(策略信息点)收集请求上下文:主体属性、资源属性、环境属性RBAC 只需要主体角色;ABAC/ReBAC 需要更丰富的动态属性
PAP(策略管理点)维护策略存储,提供策略配置/更新接口RBAC 维护角色-权限映射;ABAC 维护属性规则;ReBAC 维护关系图定义

系统分层上,自底向上分为:身份层(用户/Agent 身份)、策略存储层(角色表/属性规则/关系图)、决策层(PDP 引擎)、执行层(PEP 拦截 & 操作执行)。整个链路通过信任锚(Token / 签名)保证请求不可抵赖。

4.2 组件职责与信任链路

三种模型对应的核心组件及信任链路如下:

  • RBAC:PDP 从 PAP 加载“角色-权限”二元关系;PIP 只需提供请求者角色(通常来自 JWT 中的 role 声明)。信任链依赖角色分配的管理后台和 JWT 签发。
  • ABAC:PDP 解析 XACML / OPA Regolike 策略;PIP 需要从请求、资源上下文、环境(时间、IP 等)抽取属性。信任链需要属性提供方(如 LDAP、外部元数据服务)的签名验证。
  • ReBAC:PDP 在关系图上执行逐跳遍历(如 Google Zanzibar 风格);PIP 维护对象之间的 relation 边。信任链依赖图数据的一致性和变更日志。

下图展示了统一架构中三种模型的组件差异与数据流向:

权限模型架构对比(RBAC / ABAC / ReBAC) Agent Operation Request PEP (Policy Enforcement Point) PDP (Policy Decision Point) RBAC: Role-Permission Table 静态角色绑定 ABAC: Attribute Rules (XACML) 动态属性策略 ReBAC: Relation Graph 关系遍历引擎 PIP (Policy Information Point) 说明:RBAC 依赖角色映射,ABAC 依赖属性规则引擎,ReBAC 依赖关系遍历图;PIP 负责收集上下文供 PDP 使用。

4.3 数据流 / 控制流 / 信任链路

以 ABAC 为例的完整授权流程(RBAC/ReBAC 仅 PDP 决策逻辑不同):

  1. Agent 发起请求(含 Token 或身份凭证)→ PEP 拦截。
  2. PEP 构造授权请求上下文(主体 ID、资源 ID、动作、环境元数据)→ 发往 PDP。
  3. PDP 请求 PIP 填充动态属性(如用户部门、资源敏感等级、当前时间)。
  4. PDP 从 PAP 加载对应策略(RBAC 查角色表,ABAC 评估规则集,ReBAC 执行图查询)。
  5. PDP 计算决策(Permit/Deny)→ 返回 PEP。
  6. PEP 执行决策结果,允许或拒绝操作。

信任链路关键点:

  • Agent Token 必须由可信的 Identity Provider 签发(OIDC/JWT)。
  • PDP 与 PIP 之间的通信需要 mTLS,防止上下文被篡改。
  • PAP 的写操作必须经过审计和版本控制。

4.4 选型权衡

维度RBACABACReBAC
粒度粗(角色级)细(属性级)极细(关系路径级)
动态性低(角色变更需管理后台)高(运行时属性可驱动)中(关系变更影响遍历)
性能高(O(1) 查表)中(规则评估递归)低(图遍历,需索引)
管理复杂度低(角色少时)高(属性规则易爆炸)中(关系定义需一致)
适用场景企业后台、静态权限多云、零信任、动态条件社交/协作、资源社群隔离
决策建议:
- 如果 Agent 角色固定且操作种类有限 → RBAC(最经济)。
- 如果需要根据时间、地点、资源标签等动态条件控制 → ABAC。
- 如果权限取决于资源之间的“拥有/成员/管理员”关系链(如跨团队项目访问)→ ReBAC。

4.5 风险点

  • 角色爆炸(RBAC):角色数量随资源维度增长,陷入细粒度陷阱。缓解:引入属性补充或分层角色。
  • 策略冲突(ABAC):多条规则可能同时匹配且结果相反,需定义冲突解决算法(Deny-overrides / Permit-overrides)。
  • 关系泄露(ReBAC):遍历关系图时可能暴露未授权的资源存在性,需设计隐私保护查询(如元组掩盖)。
  • PDP 性能退化:ABAC/ReBAC 在高并发下评估耗时长,需引入策略缓存(带 TTL 失效)和异步 PDP。

4.6 落地步骤

  1. 业务场景分析:梳理 Agent 操作所需的最小权限集,识别动态条件与关系依赖。
  2. 模型选型:根据 权衡表 选择主模型(可混用,如 RBAC 做基础,ABAC 做异常覆盖)。
  3. 策略存储设计:
    • RBAC:建表 agent_roles, role_permissions
    • ABAC:定义策略 DSL 并部署 OPA / AuthzForce
    • ReBAC:搭建关系图数据库(如 Neo4j 或 Spanner 模拟)并定义 Relation 模式
  4. PDP 引擎集成:将决策点作为独立服务,通过 gRPC 暴露 Decide(requestContext) → Decision 接口。
  5. PEP 植入:在 Agent 执行框架的拦截器(如 FastAPI middleware)中调用 PDP。
  6. 安全强化:启用 mTLS、策略变更审计日志、Token 绑定。
  7. 性能压测:使用工具(如 Locust)模拟高并发,调整缓存大小和决策树优化。

4.7 验收标准

验收项预期结果验证方式
RBAC 角色权限隔离同一角色的 Agent 操作一致,不同角色不可越权编写测试用例:用不同角色 Token 访问同一接口
ABAC 动态条件生效相同身份在不同时间/地点获得不同决策模拟请求上下文变化,断言决策翻转
ReBAC 关系路径正确只有显式拥有/成员关系的 Agent 才能访问对应资源创建三层关系链,验证中间节点的不可达性
PDP 单次决策延迟 < 50ms99% 请求在 50ms 内返回性能监控工具(如 Prometheus + Grafana)
策略变更热更新修改策略后 5s 内生效,无需重启 PDP实时更新策略存储,监控日志中决策结果变化
常见误区:不要盲目追求最“强大”的 ABAC 或 ReBAC。实际落地中 80% 的权限场景可以用 RBAC + 有限属性(如资源所属团队)覆盖,过度设计会导致维护成本远高于安全收益。