3、访问控制模型(下):基于属性的访问控制(ABAC)、基于策略的访问控制(PBAC)、零信任架构下的权限模型

上一节我们聊了 DAC、MAC 和 RBAC,这些都是经典的访问控制模型。但说实话,在实际的数据共享场景里,它们有时候会显得「不够用」。比如,一个用户能不能访问某个文件,不光取决于他是谁(身份),还得看他在哪、用什么设备、当前是不是上班时间、数据本身的敏感级别……这些条件组合起来,RBAC 的角色定义就会变得非常臃肿。

所以这一节,我们来聊聊更灵活、更细粒度的模型:ABAC、PBAC,以及现在大热的零信任架构下的权限模型。我个人觉得,这些才是解决复杂数据共享问题的「终极武器」。

3.1 基于属性的访问控制(ABAC)

ABAC 的核心思想很简单:用「属性」来描述一切。主体有属性,客体有属性,环境也有属性。然后通过一组规则来判断「是否允许访问」。

举个例子:

  • 主体属性:用户 ID、部门、职级、安全等级
  • 客体属性:文件分类、密级、创建时间、所属项目
  • 环境属性:访问时间、IP 地址、设备类型、网络环境

规则可以写成这样:

允许访问 当且仅当:
  主体.部门 == 客体.所属项目.负责部门
  AND 主体.安全等级 >= 客体.密级
  AND 环境.时间 BETWEEN '09:00' AND '18:00'
  AND 环境.设备类型 == '公司配发笔记本'

我在项目中遇到过这样一个需求:某金融公司要共享客户交易数据给风控团队,但风控团队里有外包人员。用 RBAC 的话,我得给外包人员单独建一个角色,然后小心翼翼地分配权限。用 ABAC 就简单了——直接在规则里加一条:主体.雇佣类型 != '外包'。你看,不用改角色,不用动数据库,改一条策略就行。

ABAC 的最大优势: 灵活、细粒度、无状态。你不需要预先定义好所有角色,规则可以动态组合。

我的建议: 如果你的系统里有超过 50 个角色,或者权限规则经常变化,赶紧考虑 ABAC。否则角色管理会让你崩溃。

3.2 基于策略的访问控制(PBAC)

PBAC 和 ABAC 经常被混为一谈。其实它们的关系是:PBAC 是 ABAC 的「升级版」或「管理框架」。ABAC 定义了「用什么来做决策」(属性),PBAC 定义了「决策怎么做」(策略引擎)。

PBAC 的核心组件包括:

  • 策略决策点(PDP):负责接收请求,评估策略,返回 Permit/Deny
  • 策略执行点(PEP):拦截请求,调用 PDP,执行决策
  • 策略信息点(PIP):提供属性数据(比如从 LDAP 拉用户信息)
  • 策略管理点(PAP):管理策略的创建、更新、删除

说白了,PBAC 把「权限判断」这件事做成了一个标准化的服务。你想想看,如果你的公司有几十个微服务,每个服务都自己写一套权限判断逻辑,那维护起来得多痛苦?PBAC 就是把这些逻辑抽出来,统一管理。

我曾经帮一家电商公司重构权限系统。他们原来的做法是每个 API 里都写 if-else 判断用户角色。结果有一次,一个运营活动需要临时放开某个接口的访问权限,改代码、发版、重启,折腾了整整两天。后来我们引入了 PBAC,策略改一行配置,实时生效。嗯,这才是现代系统该有的样子。

注意: PBAC 虽然强大,但引入它会增加系统复杂度。你需要部署 PDP/PEP 组件,还要考虑策略的版本管理、性能优化(缓存策略评估结果)。小团队、小项目慎用。

3.3 零信任架构下的权限模型

零信任(Zero Trust)这几年特别火。它的核心理念就一句话:永不信任,始终验证。不管你在内网还是外网,不管你是谁,每次访问都要重新验证。

在零信任架构下,权限模型有几个关键变化:

  • 不再有「内网特权」:以前只要连上公司 WiFi 就能访问内部系统,现在不行了。每次请求都要验证身份、设备、上下文。
  • 最小权限原则:只给刚刚好的权限,用完即收回。不是「能访问所有客户数据」,而是「只能访问今天需要处理的这 100 条记录」。
  • 动态信任评估:权限不是静态的。比如你从公司登录,信任分高;从咖啡店登录,信任分低,可能需要二次认证。

零信任下的权限模型,其实可以看作是 ABAC + PBAC 的极致应用。它把「环境属性」和「行为属性」提到了前所未有的高度。

举个例子:

允许访问 当且仅当:
  主体.身份认证通过 == true
  AND 主体.设备合规 == true
  AND 环境.地理位置 == '允许区域'
  AND 环境.网络风险评分 < 70
  AND 行为.请求频率 < 100次/分钟

你看,这里多了「设备合规」「网络风险评分」「请求频率」这些动态属性。这就是零信任和传统 ABAC 的区别——它更关注「此时此刻」的安全状态。

核心变化: 从「你是谁」到「你现在是谁」。权限从静态变成了动态,从粗粒度变成了细粒度,从网络边界变成了身份边界。

3.4 三种模型的对比与选择

为了让你看得更清楚,我整理了一个对比表:

维度 ABAC PBAC 零信任权限模型
核心要素 属性(主体/客体/环境) 策略 + 决策引擎 动态信任 + 持续验证
粒度 非常细 非常细 极细(可到单次请求)
动态性 中等(属性可变) 中等(策略可热更新) 高(信任分实时变化)
复杂度 中 高 非常高
适用场景 数据共享、多租户系统 微服务、大型企业 远程办公、云原生、高安全环境

怎么选?我个人习惯这样判断:

  • 如果你的权限规则不超过 20 条,团队也小,RBAC 就够了,别折腾。
  • 如果规则多、变化频繁,但系统规模不大,用 ABAC 自己实现一套规则引擎就行。
  • 如果公司有几十个微服务,或者正在做零信任改造,直接上 PBAC + 零信任架构。

避坑指南: 我曾经见过一个团队,一上来就搞零信任,结果半年过去了,连 PDP 都没部署好。我的建议是:先跑通 ABAC,再演进到 PBAC,最后再考虑零信任。步子迈大了,容易扯着。

3.5 知识体系总览

下面这张图,帮你把这一节的核心逻辑串起来:

访问控制模型演进与关系图 访问控制模型演进与关系 ABAC 基于属性 PBAC 基于策略引擎 零信任权限模型 动态信任 + 持续验证 核心要素 主体属性 客体属性 环境属性 核心组件 PDP - 策略决策点 PEP - 策略执行点 PIP - 策略信息点 PAP - 策略管理点 核心原则 永不信任,始终验证 最小权限原则 动态信任评估 持续监控与响应 演进路径:ABAC → PBAC → 零信任权限模型

从这张图可以看得很清楚:ABAC 是基础,它用「属性」来描述一切;PBAC 在 ABAC 之上加了标准化的策略引擎,让权限管理变得可扩展、可维护;而零信任权限模型,则是把 ABAC 和 PBAC 的理念推到了极致,加入了动态信任和持续验证。

在实际的数据共享场景中,我建议你从 ABAC 开始,逐步引入 PBAC 的架构思想,最后再根据安全需求决定是否要上零信任。别一上来就想搞个大新闻,先把基础打牢。