2、数据湖访问控制模型:RBAC、ABAC 与策略引擎
聊权限控制,我见过太多团队一上来就撸代码写死权限逻辑。结果呢?业务一扩张,权限代码改得比业务代码还勤快。说白了,数据湖的访问控制不是写死规则,而是设计一套可演进的模型。
这一章,我们聚焦三个核心概念:RBAC、ABAC,以及把它们串起来的策略引擎与策略决策点。嗯,这是整个权限体系的骨架。
2.1 RBAC:基于角色的访问控制
RBAC 是最经典、最普及的模型。它的核心思想很简单:用户不直接拥有权限,权限挂载在角色上,用户通过扮演角色获得权限。
我在项目中遇到过一家金融客户,数据湖里有上千个用户。如果给每个人单独配权限,那简直是灾难。RBAC 帮他们抽象出「数据分析师」「数据工程师」「风控审核员」等角色,权限管理瞬间清晰了。
RBAC 的核心要素
| 要素 | 说明 | 我的一点经验 |
|---|---|---|
| 用户(User) | 访问数据的主体,可以是人、服务账号 | 别忘了服务账号,它经常被忽略 |
| 角色(Role) | 权限的集合,如「只读角色」「管理员」 | 角色粒度要适中,太细等于没抽象 |
| 权限(Permission) | 对某个资源的具体操作,如 SELECT、INSERT | 尽量用动词+资源命名,别用数字代号 |
| 会话(Session) | 用户激活角色的临时上下文 | 一个用户可以同时激活多个角色 |
RBAC 的三种层级
- 扁平 RBAC:用户 ↔ 角色 ↔ 权限。最简单,适合小团队。
- 层级 RBAC:角色可以继承。比如「高级工程师」继承「工程师」的所有权限,再加一些特殊权限。
- 约束 RBAC:加入职责分离(SoD)。比如一个人不能同时拥有「审批角色」和「执行角色」。
2.2 ABAC:基于属性的访问控制
RBAC 有个硬伤:它只能基于「你是谁」做判断。但现实场景复杂得多——你什么时间访问?从哪个 IP 来?数据属于哪个部门?
ABAC 就是来解决这个问题的。它不再依赖固定的角色,而是根据一组属性动态计算决策。
ABAC 的四类属性
| 属性类型 | 示例 | 为什么重要 |
|---|---|---|
| 主体属性 | 用户部门、职级、安全等级 | 判断「谁」在请求 |
| 资源属性 | 数据表名、敏感度标签、创建时间 | 判断「什么」被请求 |
| 环境属性 | 访问时间、网络位置、设备类型 | 判断「何时何地」请求 |
| 操作属性 | SELECT、ALTER、EXPORT | 判断「怎么做」 |
你想想看,一个典型的 ABAC 策略长什么样?
策略示例:
允许 主体.部门 = "风控"
且 资源.敏感度 = "低"
且 环境.时间 在 "09:00-18:00"
且 操作 = "SELECT"
则 允许访问
我个人习惯把 ABAC 策略写成 JSON 或 YAML 文件,方便版本管理和审计。
2.3 策略引擎与策略决策点(PDP/PEP)
模型再好,没有执行引擎也是白搭。这里引入两个关键组件:策略决策点(PDP)和策略执行点(PEP)。
架构拆解
- PEP(Policy Enforcement Point):拦截请求,向 PDP 询问「这个请求允许吗?」,然后根据回复放行或拒绝。
- PDP(Policy Decision Point):接收 PEP 的请求,加载策略,计算属性,返回 Allow/Deny。
- PAP(Policy Administration Point):管理策略的界面或 API,供管理员配置。
- PIP(Policy Information Point):提供属性数据,比如从 LDAP 拉取用户部门,从数据目录拉取敏感度标签。
下面这张图展示了它们之间的协作关系:
决策流程示例
假设一个数据分析师要查询「用户支付表」:
- PEP 拦截:SQL 到达数据湖网关,PEP 捕获请求。
- PEP 向 PDP 询问:发送主体、资源、操作、环境上下文。
- PDP 收集属性:从 PIP 获取用户部门(风控部)、资源标签(敏感)、当前时间(14:30)。
- PDP 匹配策略:命中一条策略——「风控部成员可在工作时间 SELECT 敏感数据」。
- PDP 返回 Allow:PEP 放行查询。
关键点:PDP 和 PEP 的分离,让策略逻辑与执行逻辑解耦。你可以换 PDP 的实现(比如从自研切到 Open Policy Agent),PEP 几乎不用改。
2.4 模型选型建议
到底用 RBAC 还是 ABAC?我个人的经验是:
| 场景 | 推荐模型 | 理由 |
|---|---|---|
| 团队规模小,角色固定 | RBAC | 简单,维护成本低 |
| 需要细粒度控制(如行级、列级) | ABAC | 属性组合灵活,无需预定义角色 |
| 合规要求严格(如 GDPR、SOX) | ABAC + RBAC | RBAC 兜底基础权限,ABAC 处理上下文敏感规则 |
| 数据湖跨部门共享 | ABAC | 不同部门属性不同,策略可复用 |
好了,这一章的内容就到这里。RBAC 和 ABAC 不是二选一,而是互补的。策略引擎把模型落地成可执行的规则,PDP/PEP 保证规则被正确执行。理解这些,你就能设计出既安全又灵活的数据湖权限体系。