IAM 基础回顾:核心模型与微服务定位

在深入异步任务编排引擎的权限校验之前,必须重新夯实 IAM 的基础概念。本章从 IAM 核心模型出发,对比主流授权模型,并明确 IAM 在微服务架构中的位置,为后续引擎设计建立统一的语义基础。

2.1 IAM 核心模型(用户、角色、权限、资源)

IAM 系统的核心由四个基本实体构成,它们之间的关系构成了权限管理的基石:

实体 定义 示例
用户 (User) 系统的操作主体,可以是人、服务账号或设备。 user:zhangsan、service:data-pipeline
角色 (Role) 权限的逻辑集合,作为用户与权限之间的中间层。 role:admin、role:readonly
权限 (Permission) 对资源执行特定操作的许可描述。 permission:task:execute
资源 (Resource) 被保护的对象,可以是 API、数据、文件或服务。 resource:task:123、resource:namespace:prod
关键原则: 用户不直接关联权限,而是通过角色间接获得。这种解耦使得权限变更只需调整角色定义,无需逐个修改用户。

下图展示了 IAM 核心实体之间的典型关系:

IAM 核心实体关系图 用户 (User) 角色 (Role) 权限 (Permission) 资源 (Resource) 关联 包含 作用于 说明: 用户 → 角色 → 权限 → 资源,形成完整的授权链路。

2.2 RBAC 与 ABAC 模型对比

RBAC(基于角色的访问控制)和 ABAC(基于属性的访问控制)是两种主流的授权模型,它们在灵活性、复杂度和适用场景上存在显著差异。

维度 RBAC(基于角色) ABAC(基于属性)
授权依据 用户所属的角色 用户、资源、环境的多维属性
粒度 粗粒度(角色级别) 细粒度(属性级别)
灵活性 低,角色变更需管理员操作 高,策略可动态组合
管理成本 低,角色数量有限 高,属性与策略数量庞大
适用场景 组织架构稳定、权限层级清晰 多租户、资源属性动态变化
典型实现 Spring Security、Kubernetes RBAC AWS IAM Policy、OAuth2 Scopes
实践建议: 在 IAM 异步任务引擎中,推荐采用 RBAC 为主体 + ABAC 为补充 的混合模式。基础的任务执行权限通过角色控制,而针对特定任务实例的细粒度访问(如仅允许任务创建者查看日志)则通过 ABAC 属性策略实现。

下图对比了两种模型的决策流程:

RBAC vs ABAC 决策流程对比 RBAC 决策流程 用户请求 获取用户角色 角色→权限映射 权限匹配 允许/拒绝 ABAC 决策流程 用户请求 收集属性 策略引擎评估 属性匹配 允许/拒绝

2.3 IAM 在微服务中的位置

在微服务架构中,IAM 不再是一个独立的单体模块,而是作为基础设施层的一部分,以 身份认证与授权网关 的形式存在。其核心职责包括:

  • 统一认证入口: 所有微服务请求首先经过 IAM 网关进行身份验证(如 JWT Token 校验)。
  • 分布式授权决策: 将权限校验逻辑下沉到 IAM 服务,避免每个微服务重复实现。
  • 策略集中管理: 通过 IAM 控制台统一管理用户、角色、权限策略,并实时同步到各服务。
  • 审计与合规: 记录所有鉴权请求,为安全审计提供完整链路。
常见陷阱: 在微服务中,不要将 IAM 逻辑硬编码在每个服务的代码中。这会导致策略不一致、升级困难。正确的做法是将 IAM 作为独立服务部署,并通过 Sidecar 模式 或 API 网关 进行集成。

下图展示了 IAM 在典型微服务架构中的部署位置:

IAM 在微服务架构中的位置 客户端 API 网关 IAM 服务 微服务集群 服务 A 服务 B 服务 C 服务 D 异步任务引擎
关键设计决策: 在异步任务编排引擎中,IAM 的权限校验需要同时支持 同步调用(如用户触发任务)和 异步回调(如任务完成后的状态更新)。这要求 IAM 服务提供无状态的 Token 校验接口,并支持基于上下文的属性传递。