企业级 IAM 权限中心(RBAC / ABAC)完整详解

下面我给你一份企业级 IAM 权限中心(RBAC / ABAC)完整详解,内容会从理念到底层模型、从技术架构到工程落地、从运维治理到实际企业痛点全覆盖。

风格保持你喜欢的清晰易懂 + 高度体系化


🧩 一、什么是 IAM?

IAM(Identity and Access Management,身份与访问管理)是企业统一管理“人 / 服务 / 设备”访问企业资源的基础设施。它负责:

  • “谁”(身份 Identity)
  • “能访问什么”(资源 Resource)
  • “在什么条件下”(策略 Policy)
  • “执行哪些操作”(权限 Action)
  • “在什么上下文中”(环境 Environment)

IAM 是支撑所有 SaaS、业务系统、多端应用的底层基础能力。你平台的 UMS + Passport 实际上就是 IAM 的基础构件。


🧱 二、IAM 权限模型总览

IAM 实现逻辑上分为三种主要模型:

  1. RBAC(Role-Based Access Control)基于角色的访问控制
  2. ABAC(Attribute-Based Access Control)基于属性的访问控制
  3. ReBAC(Relationship-Based Access Control)基于关系的访问控制 → 新趋势(Google Zanzibar)

你 asked for RBAC + ABAC,我们重点讲这两个。


🎭 三、RBAC 详解(角色模型)

RBAC 的核心理念: 👉 权限不是直接赋给用户,而是通过角色进行的。

用户 → 角色 → 权限

1. RBAC 核心概念

  • User:用户
  • Role:角色(一个行为合集)
  • Permission:权限(资源 + 操作)
  • Resource:资源(菜单、按钮、接口、数据…)

2. RBAC 的优点

  • 易理解
  • 易维护
  • 改动成本低
  • 企业中最常用(阿里、腾讯、字节做后台权限大多是 RBAC)

3. RBAC 的缺点

  • 无法表达复杂条件(如 “工单只能操作自己创建的”)
  • 无法表达动态场景(如 “仅限 9:00-18:00 访问”)
  • 随着业务扩大,角色爆炸(角色 200+)

🧬 四、ABAC 详解(属性模型)

ABAC 的核心理念: 👉 基于属性(Attributes)做权限判断,而不是角色。

属性来自四类:

  1. 用户属性:部门、岗位、级别、地区、标签
  2. 资源属性:数据所属部门、创建者、类型
  3. 操作属性:读、写、审批、删除
  4. 环境属性:时间、地点、IP、设备、风险等级

ABAC 的 Policy 结构:

允许 user 如果:
  user.department == resource.department
  AND resource.owner == user.id
  AND env.time in [08:00, 20:00]
  AND action == "update"

这套逻辑类似 AWS IAM 的 Policy、Google IAM Policy。

ABAC 的优点

  • 灵活、表达力强
  • 消除角色爆炸
  • 能适配复杂数据权限(多维)

ABAC 的缺点

  • 学习成本高
  • 开发复杂度高
  • 需要策略引擎(类似 OPA、Casbin、Cedar)

🏗 五、RBAC & ABAC 如何组合?

很多企业采用:

方案 A:RBAC + ABAC 叠加模式(最主流)

步骤:

  1. RBAC 控安全边界 → “你有没有访问这个模块的资格”
  2. ABAC 控数据级权限 → “你在这个模块中能看到哪些数据”

示例:CRM 权限控制

检查步骤 方式 含义
你能否进入 CRM? RBAC 是否有 CRM 角色
你能否查看客户? RBAC 是否有客户查看权限
你能看到哪些客户? ABAC 仅限自己 / 本部门 / 全公司?

方案 B:用角色定义粗粒度权限,用 ABAC 做细粒度过滤

角色 = 授权入口 ABAC = 行为范围边界


🗃 六、权限资源模型(统一资源树)

IAM 支持的资源类型:

  • 菜单(Menu)
  • 页面(Page)
  • 按钮(Button)
  • 接口(API)
  • 域(Domain)
  • 数据行(Row)
  • 数据列(Column)

最典型的资源树:

系统
 └── 模块
      └── 菜单
           ├── 按钮
           ├── 操作
           └── 接口

🧠 七、策略引擎(Policy Engine)

ABAC 或 RBAC+ABAC 必须有策略引擎,例如:

  • OPA(Open Policy Agent)
  • Casbin(RBAC/ABAC/ReBAC)
  • AWS Cedar(最先进的,支持关系模型)
  • Google Zanzibar(关系图)

策略引擎负责:

  1. 解析规则(Policy)
  2. 加载运行时上下文(attributes)
  3. 决策(Allow / Deny)
  4. 返回授权结果

🏛 八、IAM 平台核心模块

一个标准的 IAM 权限中心包含以下能力:

1. 身份(Identity)

  • 用户
  • 组织(部门树)
  • 岗位/职级
  • 用户属性(labels)

2. 资源(Resource)

  • UI 资源(菜单、按钮)
  • API 资源
  • 数据资源(表、列、行)

3. 授权(Permission)

  • RBAC:角色分配
  • ABAC:策略(Policy)
  • 混合授权模型

4. 认证(Passport / SSO)

  • JWT(你已有)
  • OAuth2
  • OIDC
  • MFA

5. 审计(Audit)

  • 访问日志
  • 管理日志
  • 授权链路追踪

6. 风险控制(Risk)

  • 登录地识别
  • 设备指纹
  • IP 黑白名单
  • 异常行为拦截

🧵 九、数据级权限模型(企业重点)

ABAC 最常应用在数据权限,比如:

  • 自己的数据
  • 本部门数据
  • 下属部门数据
  • 指定范围的数据
  • 全部数据

常用的表达式(ABAC)

resource.owner == user.id
resource.department_id == user.department_id
resource.dept_id in user.manage_depts
env.ip in user.allowed_ips
env.time between 9:00 and 20:00

🧳 十、一个完整的 ABAC Policy 示例

以一个“项目管理系统”为例:

需求: 项目经理可查看自己负责的项目; 部门经理可查看本部门所有项目; 访问仅限公司网络。

ABAC Policy:

effect = "allow"

when action == "read"
  AND (
      (user.role == "project_manager" AND resource.owner == user.id)
      OR
      (user.role == "department_manager" AND resource.dept_id == user.department_id)
  )
  AND env.ip in ["10.0.0.0/8"]

🧨 十一、IAM 如何演进?(你的 SSO 平台参考)

你的 UMS + Passport 已经有了基础。

下面是 IAM 进阶路线图:

阶段 1(已完成)

✔ 用户、角色、权限 ✔ 登录、鉴权、Token ✔ RBAC

阶段 2(3–6 个月)

🔸 菜单 + API + 按钮权限树 🔸 动态策略引擎(Casbin / 自研) 🔸 数据级权限(ABAC) 🔸 多维属性(用户/资源/环境)

阶段 3(6–12 个月)

🔸 关系图授权(Zanzibar) 🔸 多租户(Tenant) 🔸 SSO 协议 OAuth2 / OIDC 🔸 MFA 🔸 API Gateway 鉴权插件(Nginx/Kong)

阶段 4(12–24 个月)

🔸 企业级策略中心 🔸 动态风险控制 🔸 行为分析(UEBA) 🔸 权限全链路可观测性 🔸 权限变更回溯 + 沙箱授权


🧩 十二、实际企业中的痛点与最佳实践

1. 角色爆炸 → ABAC 化

用“条件”替代“角色”,消除重复角色。

2. 各系统权限不统一 → IAM 统一适配层

业务系统只要实现两套接口:

  • 查询用户权限
  • 调用 IAM 做鉴权

其余逻辑全由 IAM 托管。

3. 数据权限复杂 → Attribute 化

部门 → 多部门 组织树 → 管理范围 主管 → 下属递归


🧭 十三、如果你要实现 IAM,我建议的技术选型

  • 策略引擎:Casbin / OPA / Cedar
  • 权限 Store:MySQL / PostgreSQL
  • 关系图模型:Neo4j / TiDB / RedisGraph(如未来做 ReBAC)
  • 服务架构

    • IAM 后端(Java)
    • 前端控制台(Vue)
    • SPI Hook(给各业务系统使用)

🎯 十四、最终总结(一句话)

RBAC 控入口权限,ABAC 控边界权限,二者组合才能适配现代企业的复杂场景。 IAM 是企业数字化的“身份证公司”,是所有系统的安全底座。