《企业访问控制策略落地指南》
第3章 基于属性的访问控制(ABAC)
3. 基于属性的访问控制(ABAC)
基于属性的访问控制(ABAC)是一种细粒度的、动态的访问控制模型。它通过评估主体、资源、环境和操作的多维属性来决定是否授予访问权限,克服了传统模型(如RBAC)在复杂场景下的僵化问题。
图3-1 ABAC核心要素:属性驱动策略引擎,输出动态授权决策
3.1 属性定义
属性是ABAC的基本构建块,通常分为四大类。属性值可以来自目录服务、数据库、设备传感器或上下文计算。
| 属性类别 | 示例 | 数据来源 |
|---|---|---|
| 主体属性 | 用户ID、部门、职级、安全许可、所属项目 | HR系统、LDAP、IDP |
| 资源属性 | 文档密级、创建者、数据分类、存储位置 | 数据资产目录、DLP标签 |
| 环境属性 | 访问时间、IP地址、设备合规状态、地理位置 | 网络设备、端点管理、GPS |
| 操作属性 | 读取、写入、删除、导出、打印 | 应用系统、API网关 |
3.2 策略引擎
策略引擎是ABAC的核心决策组件。它接收来自策略执行点(PEP)的请求,结合属性值,对预定义的策略集进行逻辑评估,最终返回“允许”或“拒绝”决策。
图3-2 策略引擎四步决策流程
策略通常使用XACML或ALFA等语言编写。以下是一个简单的策略示例:
策略:仅允许“高级工程师”在“工作时间”访问“机密”文档
规则:
IF subject.role == "高级工程师"
AND resource.classification == "机密"
AND environment.time >= "09:00"
AND environment.time <= "18:00"
THEN permit
ELSE deny
3.3 动态授权
动态授权是ABAC的核心优势。授权决策在请求发生时实时计算,而非预先分配。这使得系统能够响应上下文变化,例如:
- 时间敏感:仅允许在工作日9:00-18:00访问财务系统。
- 位置感知:从公司内网访问时允许下载,从外部VPN访问时仅允许查看。
- 风险自适应:当用户设备未安装最新补丁时,自动降级为只读权限。
- 紧急覆盖:在安全事件响应期间,临时提升特定人员的访问级别。
图3-3 动态授权:基于实时上下文条件做出差异化决策
3.4 与RBAC对比
RBAC(基于角色的访问控制)和ABAC是两种主流的访问控制模型,各有适用场景。下表从多个维度进行对比:
| 对比维度 | RBAC | ABAC |
|---|---|---|
| 授权粒度 | 粗粒度,基于角色 | 细粒度,基于多属性组合 |
| 动态性 | 静态,角色分配后权限固定 | 动态,每次请求实时评估 |
| 管理复杂度 | 较低,角色数量有限 | 较高,需维护属性源和策略 |
| 适用场景 | 组织架构稳定、权限需求明确 | 多云环境、数据分类复杂、合规要求高 |
| 性能开销 | 低,预计算权限 | 中等,需实时属性查询和策略评估 |
实践建议:在企业落地中,通常采用RBAC+ABAC的混合模式。使用RBAC管理基础角色权限,再通过ABAC策略进行细粒度约束。例如:
- 角色“财务经理”拥有“财务报表”的读取权限(RBAC)。
- ABAC附加条件:仅当访问时间在季度末且IP来自公司内网时,才允许导出报表。
图3-4 RBAC与ABAC架构对比:从静态角色分配到动态属性评估
总结:ABAC通过丰富的属性定义和强大的策略引擎,实现了动态、细粒度的授权。虽然管理复杂度高于RBAC,但在多云、零信任和合规要求严格的企业环境中,ABAC是更优的选择。建议企业从关键业务系统开始试点,逐步建立属性治理体系。