2. ABAC核心概念:属性、策略、规则与决策引擎
好,咱们正式开始啃ABAC的核心概念。这一章是整个课程的基石,说白了,后面所有复杂策略都是从这里长出来的。我个人习惯把ABAC拆成四个积木块:属性(Attribute)、策略(Policy)、规则与条件(Rule & Condition),以及决策引擎(PDP)与策略管理点(PAP)。搞懂这四个东西,你就掌握了ABAC的骨架。
2.1 属性(Attribute)的定义与分类
属性是什么?简单说,就是描述一个实体“是谁、有什么、在哪儿、什么时候”的标签。在ABAC里,一切决策都围绕属性展开。没有属性,策略就是空话。
我一般把属性分成四大类,你记牢了:
| 属性类别 | 英文 | 典型例子 | 说明 |
|---|---|---|---|
| 主体属性 | Subject Attributes | 用户ID、角色、部门、职级、安全等级 | 谁在发起请求 |
| 资源属性 | Resource Attributes | 文件类型、密级、所属项目、创建者 | 要访问什么东西 |
| 环境属性 | Environment Attributes | 当前时间、IP地址、设备类型、地理位置 | 在什么环境下访问 |
| 操作属性 | Action Attributes | 读、写、删除、导出、审批 | 想干什么事 |
嗯,这里要注意一点:属性不是随便定义的。我在项目中遇到过团队把“用户昵称”也当成属性,结果策略里根本用不上,白白增加了属性管理的复杂度。我的建议是——只定义那些真正参与决策的属性。
2.2 策略(Policy)的构成要素
策略是ABAC的核心产物。它告诉决策引擎:在什么条件下,允许谁对什么资源做什么操作。
一个完整的策略,我个人习惯拆成五个要素:
- 策略ID —— 唯一标识,方便审计和追溯。
- 目标(Target) —— 策略适用于哪些主体、资源、操作。说白了就是“这个策略管谁”。
- 规则集(Rule Set) —— 一组规则的集合,决定最终是允许还是拒绝。
- 效果(Effect) —— Permit(允许)或 Deny(拒绝)。
- 义务(Obligation) —— 决策后必须执行的动作,比如“记录审计日志”或“发送通知”。
举个例子,一个典型的策略片段长这样:
策略ID: POL-FIN-001
目标:
主体: 部门 = "财务部"
资源: 类型 = "财务报表"
操作: 读取
规则集:
- 如果 当前时间 在 09:00-18:00 之间 → 允许
- 否则 → 拒绝
效果: Permit
义务: 记录审计日志
2.3 规则(Rule)与条件(Condition)
规则是策略里的“执行单元”。一条规则通常包含一个条件(Condition)和一个效果(Effect)。条件就是布尔表达式,返回true或false。
条件可以简单,也可以复杂。比如:
- 简单条件:
user.department == "Engineering" - 复合条件:
user.department == "Engineering" && resource.classification == "Internal" - 带函数条件:
timeInRange(currentTime, "09:00", "18:00")
为什么会这样设计?因为实际业务里很少只有一个条件。我记得在做一个金融项目时,需求是“只有风控经理在工作时间且IP来自内网时才能导出客户数据”。你看,这就组合了主体属性、环境属性和操作属性。
2.4 决策引擎(PDP)与策略管理点(PAP)
这两个是ABAC架构里的“大脑”和“编辑器”。
- PDP(Policy Decision Point) —— 策略决策点。它接收请求,加载策略,评估规则,返回决策结果。PDP本身不存储策略,它只做计算。
- PAP(Policy Administration Point) —— 策略管理点。它是策略的“创作工坊”,负责策略的编写、测试、版本管理和发布。
PDP和PAP的关系,你可以理解为:PAP写好菜谱,PDP照着菜谱做菜。两者必须解耦,否则策略一改就得重启服务,这在生产环境里是不可接受的。
下面这张图展示了它们在整个ABAC架构中的位置:
从图上你能看到:用户请求先到PEP(策略执行点),PEP把请求转成标准格式发给PDP,PDP从PAP发布的策略存储里加载策略,做出决策,然后PEP根据决策结果允许或拒绝用户访问资源。整个过程里,PAP只负责策略的“写”,PDP只负责策略的“算”,职责非常清晰。
本章小结
这一章我们拆解了ABAC的四个核心积木:属性是决策的“原料”,策略是“配方”,规则和条件是“烹饪步骤”,PDP和PAP是“厨房和厨师”。你想想看,没有原料做不出菜,没有配方不知道做什么,没有步骤会搞砸,没有厨房和厨师一切白搭——这四个东西缺一不可。