访问控制(AC)的发展历程
访问控制(Access Control, AC)是保护系统资源的重要机制,决定"谁"可以访问"哪些"资源,并能执行"哪些操作"。它的核心目标是防止越权访问和恶意操作,从而保障系统安全和数据机密性。访问控制技术的历史可以追溯到 20 世纪 60-70 年代,几乎与计算机的诞生同步。经过数十年的发展,访问控制模型从MAC(强制访问控制)演进到 ABAC(基于属性的访问控制),不同阶段的技术各有特点,适用于不同的场景。
AC 的演进阶段
访问控制技术的发展经历了以下关键阶段:
-
MAC(强制访问控制,Mandatory Access Control)
- 特点:最早出现的访问控制模型,由系统统一管理权限,用户无法修改自己的权限。
- 优点:安全性高,适用于军事、政府等高安全要求的环境。
- 缺点:灵活性低,难以适应企业或商业应用。
-
DAC(自主访问控制,Discretionary Access Control)
- 特点:资源的所有者可以自行分配权限,比如文件的拥有者可以决定谁能读取或修改它。
- 优点:灵活性高,易于实现,适用于个人电脑、文件系统等应用场景。
- 缺点:权限管理分散、缺乏统一性,可能导致安全漏洞。
-
RBAC(基于角色的访问控制,Role-Based Access Control)
- 特点:用户被分配角色,权限与角色绑定,用户继承角色的权限,而不是直接分配权限。
- 优点:简化权限管理,特别适用于企业和组织化管理,可以减少手动管理的复杂度。
- 缺点:
- 细粒度控制能力有限,难以满足复杂权限需求。
- "角色爆炸" 问题:当组织规模扩大时,角色数量可能大幅增加,导致管理复杂化。
-
ABAC(基于属性的访问控制,Attribute-Based Access Control)
- 特点:通过用户、资源和环境的属性动态计算访问权限,而不是固定的角色分配。
- 优点:
- 更灵活,可以支持复杂的权限需求,适用于云计算、大型企业、跨组织合作等场景。
- 动态调整权限,可以基于实时环境(如访问时间、地点、设备)调整权限。
- 缺点:管理复杂度较高,需要更强的策略管理能力和计算资源。
AC 的发展趋势
总体来看,访问控制技术正在从静态、粗粒度控制向动态、细粒度管理演进,以适应日益复杂的 IT 环境和安全需求。
- 早期的 MAC 强调安全性和统一管理,但缺乏灵活性。
- DAC 和 RBAC 提高了灵活性和可管理性,尤其是 RBAC 适用于企业组织管理,至今仍是许多企业的主要访问控制模式。
- ABAC 将灵活性提升到新高度,通过属性组合实现更细粒度的权限管理,适用于云计算和复杂安全需求的企业。
尽管 RBAC 目前仍然是企业访问控制的主流,但 ABAC 由于其强大的灵活性,正在越来越多地被采用,尤其在需要动态权限调整和细粒度控制的场景下。 未来,RBAC 和 ABAC 的混合模式(RBAC-ABAC)可能成为新的趋势,即RBAC 用于管理基础权限,ABAC 用于细粒度控制,这样既能保证管理的简便性,又能提升系统的安全性和灵活性。
ABAC 的概述说明
ABAC(Attribute-Based Access Control,基于属性的访问控制) 是一种动态、细粒度的访问控制方式,与传统的 RBAC(基于角色的访问控制) 和 ACL(访问控制列表) 不同,ABAC 不依赖预定义的角色或权限,而是根据用户、资源和环境等属性实时计算访问权限。 相比于 RBAC 这样固定的权限模型,ABAC 提供了更强的灵活性,能够基于不同属性动态调整权限。
🔹 示例对比:
- RBAC 规则:
- "只有 经理(角色)可以访问客户个人信息。"
- 问题:无法限制访问的时间或网络环境。
- ABAC 规则:
- "经理 只有在 公司网络(环境属性)+ 工作日时间(环境属性)时,才能访问客户个人信息。"
- 优势:更精细的权限控制,增强系统安全性,防止未经授权的访问。
ABAC 既可以独立使用,也可以作为 RBAC 和 ACL 的补充模型,在企业安全架构中提供更细粒度的访问控制能力。
术语 :ABAC 体系中涉及多个术语,以下是常见的关键概念:
-
主体(Subject) :访问资源的用户或程序,例如医生、自动化系统。
-
客体(Object) :受保护的资源,例如文件、数据库、API、应用程序。
-
属性(Attributes) :用于描述主体、客体或环境的特征,例如:
- 用户属性:医生的"职称"、员工的"安全级别"。
- 对象属性:文件的"机密等级"、数据库记录的"所有者"。
-
策略(Policy) :访问权限的决策规则,例如:
- "只有心内科医生可以查看心脏病患者的病历。"
- "只有财务经理才能在季度末访问公司财务报表。"
-
环境条件(Environment Conditions) :影响访问权限的动态因素,例如:
- 时间(工作日、周末、非工作时间)。
- 地点(办公室、远程 VPN、国外访问)。
- 设备(PC、手机、个人设备、公司设备)。
-
NPE(Non-Person Entity,非人类实体) :需要访问资源的非人类对象,例如:
- 程序、自动化系统、摄像头、打印机、IoT 设备等。
ABAC 的竞争优势
在 RBAC(基于角色的访问控制) 或 ACL(访问控制列表) 体系下,管理员需要事先定义所有可能需要访问的用户,并手动配置访问资源的权限。这种静态授权方式存在以下问题:
- 权限管理繁琐,灵活性低:管理员需要为资源与访问主体之间手动建立权限关联,当用户、资源或访问需求发生变化时,需要重新调整权限配置,维护成本高。
- 难以适应动态环境:如果某个用户事先未被配置权限,则无法访问所需资源,必须等待管理员手动授予权限后才能继续访问,如下图所示:
RBAC/ACL 的静态访问控制问题

在这个模型下:
- Organization A 的用户请求访问 Organization B 的资源。
- Organization B 必须先为该用户创建账户,并手动配置访问权限。
- 用户只有在权限配置完成后,才能访问资源。
问题: 这种方式依赖静态权限管理,导致授权过程繁琐,且难以适应频繁变动的业务需求。
相比 RBAC 和 ACL,ABAC 通过动态计算访问权限,提高了系统的安全性和管理效率,主要体现在以下几个方面:
避免角色爆炸
RBAC 的局限性:
- 在 RBAC 体系中,如果需要更细粒度的权限控制,通常需要创建额外的角色,这很容易导致"角色爆炸(Role Explosion)",即角色数量急剧增加,管理复杂度上升。
- 例如,在一个医院系统中,可能需要为 ICU 医生、ICU 护士、普通医生、主治医生分别创建多个角色,以区分位置和他们的权限。
ABAC 的优势:
- ABAC 允许在 RBAC 的基础上增加环境属性(位置、时间、设备等)来动态决定访问权限。
- 属性可以自由组合,避免了角色爆炸,同时提供更精准、更灵活的访问控制策略。
🔹 示例:医院访问控制
- 在 RBAC 体系下,如果医院新增 ICU 病例类型,并规定只有 ICU 病房内的医护人员才能查看 ICU 病例,那么必须新增以下角色:
- ICU 护士
- ICU 普通医生
- ICU 主治医生
- 这样不仅会导致角色激增,还需要手动管理医生的角色变更(例如医生轮岗时需要更改角色)。
✅ ABAC 方案:
- 只需定义一条访问策略:
- "如果医生的所在位置(Location)在 ICU 病房,且病人属于 ICU,则允许访问病人病例。"
- 无需创建额外角色,权限可以随环境变化自动调整。
支持动态授权
在传统 RBAC 模型中,用户必须事先被授予角色,才能访问资源。例如:
- 只有在管理员手动授予"经理"角色后,用户才能访问财务数据。
- 如果用户晋升为经理,但权限未及时更新,他将无法访问相关数据,必须由管理员调整角色后才能继续访问。
✅ ABAC 的改进:
- 无需预先分配权限,只要用户符合特定属性条件,就能自动获得访问权限。
- 例如:
- "如果职位 = 经理,则可以访问财务数据。"
- "如果访问设备 = 公司笔记本,且网络环境 = 内网,则允许访问公司机密文档。"
- 自动化的授权方式减少了手动管理成本,特别适用于多层级、大型组织的权限管理需求,提高了授权效率。
ABAC 的优势总结
特性 | RBAC/ACL(手动方式) | ABAC(基于属性自动) |
---|---|---|
权限配置 | 需要管理员手动分配角色或权限 | 访问权限根据属性动态计算 |
管理成本 | 资源、用户变更时需要手动调整权限 | 权限自动适应环境变化 |
灵活性 | 静态权限绑定,难以适应动态需求 | 支持多因素决策(环境、时间、设备等) |
精细化控制 | 细粒度控制困难,容易角色爆炸 | 更细粒度、灵活的权限管理 |
🔹 结论: ABAC 通过更复杂的授权策略,让权限管理更高效、更精准、更安全。 它克服了 RBAC/ACL 的局限性,特别适用于云计算、大型企业、跨组织协作等需要细粒度权限控制的场景。 未来,RBAC + ABAC 结合的混合模式(RBAC-ABAC)可能成为主流,既能保留 RBAC 的管理便捷性,又能融合 ABAC 的动态决策能力,实现最优访问控制方案。
ABAC 的工作逻辑
想要运行 ABAC 系统 ,需要通过以下核心组件组成:
- 属性(Attributes):是主体,对象或者环境条件的特征,属性通常由键值对(name-value)提供信息。
- 主体(Subject):是需要请求访问资源的用户或设备,通常代表人类用户或者非人类实体(NPE)。主体可以被分配多个属性。
- 对象(Object):由 ABAC 管理的资源,是作为被访问方存在,对象可以是应用,功能,数据或者网络。
- 操作(Operation):在主体上执行对功能的操作,例如: 读取、修改、删除。
- 策略(Policy):策略是访问规则的表达,一般预先设定,决定了主体和对象之间的访问逻辑(允许或者决绝)。
- 环境条件(Environment Conditions):额外的上下文信息,例如时间、地点、设备类型等。用于参与 Policy 的访问控制决策
ABAC 的整体工作流程可以参考下面的流程:

ABAC 决策流程如下:
- 用户(subject)发起对于资源(object)的访问请求
- ABAC 访问控制机制(ACM)会综合以下因素来做出决策
- 访问控制策略(2a):获取预设的规则,例如:比如"只有医生才能查看病历"或"只能在医院内访问"。
- 主体属性(2b):获取用户的属性(职位,部门,级别)等。
- 资源(对象)属性(2c):获取被访问资源的属性,比如病历属于哪个科室、机密等级等。
- 环境条件因素(2d):获取访问时当前的情况,例如医生的位置,当前的是否工作时间,以及设备是否可信等。
- 做出决策,允许或拒绝访问
- 如果所有条件符合策略,则允许访问
- 如果不符合,则拒绝访问
通过以上示例我们可以理解,ABAC 通过给用户和资源分配"属性",再根据策略来控制访问权限。对象(资源)有属性(例如:文件的机密级别、所属部门、创建人等)。主体(用户)有属性(例如:职位、所属组织、安全等级等)。环境也有属性(例如:访问时间、访问设备、访问地点等)。系统通过策略规则来决定用户是否有权限访问资源,而不需要逐个给用户设定权限,从而使整个访问控制系统更加灵活、高效。
ABAC 的使用原则
不单独设定用户权限
在 ABAC 体系中,访问权限基于"属性规则(Policy Rules)"自动计算,而不是手动分配给用户。这些规则通常采用两种方式表示:
-
布尔条件(Boolean conditions)
- 示例:"如果用户的角色是医生,且访问的对象是病历,则允许访问。"
- 这类规则基于用户和资源的属性,直接决定是否允许访问。
-
关联关系(Relations)
- 示例:"护士只能访问自己科室的病人记录。"
- 这里的规则基于用户和资源之间的关联关系,而不是静态分配权限。
这意味着 ABAC 体系不需要手动为每个用户设定权限,而是动态匹配用户属性,决定其访问权限。这一机制相比传统的角色或 ACL 权限管理方式,具有更高的灵活性和自动化能力。
✅ 示例:新员工自动获取权限
- 场景:医院新增一名护士,被分配到心脏科。
- RBAC 方式:管理员需要手动为她分配访问权限。
- ABAC 方式:只要护士的属性中包含"心脏科护士",她就能自动访问心脏科的病例,无需额外授权。
优势:
- 减少管理员工作量:无需手动更新权限,权限会随着用户属性的变更自动适配。
- 提高安全性:避免过度授权或权限遗漏的情况。
- 适应组织变化:部门调整、人员变动时,无需重新配置权限,ABAC 会自动生效。
不给操作(Operation)分配属性
在 ABAC 体系中,属性仅适用于主体(Subject)和对象(Object),而不用于操作(Operation)。
🚫 错误做法(不符合 ABAC 规范)
- 给"读取"操作分配属性,例如:
- ❌
read = all
(错误:不应直接给操作赋值)
- ❌
✅ 正确做法
- 定义"谁可以执行某个操作",例如:
- "医生可以读取病历。"(✅ 正确)
- "护士可以修改护理记录。"(✅ 正确)
为什么不应该给操作分配属性?
- 避免规则混乱:权限应基于用户属性和资源属性,而不是直接赋值给操作,否则难以管理。
- 确保系统清晰可维护:如果操作本身也有属性,访问控制逻辑会变得复杂,难以理解和维护。
总结 :在 ABABC 中用户权限不需要手动分配,系统会根据属性自动匹配,减少管理成本,提高灵活性。 然后对于 操作(Operation)不应被分配属性,而是基于用户和对象的属性来决定权限,确保系统清晰易维护。 这些原则使 ABAC 成为动态、高效、可扩展的访问控制方案,特别适用于大型企业、云计算环境和需要精细化权限管理的场景。
ABAC 的企业级应用
在大型企业中,访问控制往往比传统方式更加复杂。企业的规模庞大、系统繁多、数据敏感性强,涉及大量用户、资源、环境属性以及访问控制策略,这使得传统的 RBAC(基于角色的访问控制)或 ACL(访问控制列表)难以满足需求。
许多企业已经拥有员工身份管理系统(Identity Management System),用于记录姓名、工号、职位、权限等级等信息(即"主体属性")。此外,企业内部通常存在某些访问规则,例如:
- "财务部员工可以访问财务报表。"
- "高级管理层才能查看年度利润数据。"
然而,这些访问规则往往是文档化的业务规定,计算机无法直接理解和执行。ABAC 需要将这些规则转换成计算机可解析的格式(如代码或策略配置),并存储到统一的策略库,以便权限管理系统能够自动解析和执行访问控制规则。
为了让 ABAC 在企业环境中高效运行,通常需要三个核心管理体系:
-
员工属性管理(Subject Attributes):需要在统一的身份管理系统中存储员工的部门、职级、权限等级等信息,确保所有业务系统能够访问这些属性。
-
资源(对象)属性管理(Object Attributes):每个文件、数据库或应用系统都需要正确标记属性,例如:
-
"机密等级:高"
-
"所属部门:财务"
-
"数据类别:客户信息"
-
这些属性被绑定到资源本身,确保 ABAC 机制可以依据规则正确评估访问权限。
-
-
权限控制系统(ABAC Access Control Mechanism)
- 需要部署一个能够基于用户属性、资源属性和环境条件动态计算访问权限的系统,而无需管理员逐个手动配置权限。
- 该系统应能实时计算权限,确保符合策略规则的用户可以访问资源,而不符合规则的用户被拒绝访问。
✅ 示例:企业级 ABAC 应用场景
当新员工加入财务部时,系统无需手动为其分配访问权限。只要该员工的身份属性包含"财务部",ABAC 机制就能自动允许他访问财务报表,而无需管理员手动干预。
下图展示了企业 ABAC 的完整工作流程,涉及用户身份管理、策略检查、权限计算和最终访问决策。:

企业级 ABAC 访问控制机制(ACM)的主要步骤如下:
-
用户身份管理 :用户(Subject)通过企业身份管理系统(Enterprise Identity/Credential Manager)进行身份认证,并获取访问凭据(Credential Issuance)。 这些凭据包含用户的姓名、角色、组织归属、权限级别等属性,并存储在本地用户属性库(Local Subject Attribute Repository)中。
-
访问请求 :用户尝试访问某个资源(Object),向 ABAC 访问控制机制(ABAC Access Control Mechanism, ACM) 提交访问请求。
-
策略检查: ABAC 机制从访问控制策略库(Local Access Control Policy Repository)中获取访问策略。 这些策略由企业访问控制策略管理点(Enterprise Access Control Policy Administration Point)制定,并可以层级式下发至各个子组织,确保访问控制规则在整个企业范围内保持一致性。
-
通过属性匹配计算权限 :ABAC 访问控制机制(ACM)会基于以下三个关键因素计算访问权限:
-
a) 主体属性(Subject Attributes) :从 本地用户属性库(Local Subject Attribute Repository) 获取用户信息,例如:
-
职位 = 财务经理
-
权限级别 = 机密访问
-
-
b) 对象(资源)属性(Object Attributes) :从 对象属性库(Object Attribute Repository) 获取资源的属性,例如:
-
文件类型 = 财务数据
-
机密等级 = 高
-
-
c) 环境条件(Environment Conditions) :参考访问时的环境因素,例如:
-
访问时间 = 工作日
-
访问地点 = 企业内网
-
设备类型 = 可信设备
-
-
-
决策与执行
- 如果所有属性匹配访问策略,则允许访问;否则,拒绝访问。
- 访问请求的最终结果会返回给用户,并记录到日志中,确保可审计性。
从上述企业级 ABAC 的 ACM 机制可以看出访问控制基于 用户、资源、环境的多个属性动态计算的,ABAC 通过统一管理员工属性、资源属性,并基于计算机可识别的规则来动态控制权限。 它摒弃了传统手动分配权限的方式,使权限管理更灵活、高效、安全。 特别适用于大型组织,尤其是在需要跨部门、跨系统的信息共享时,能显著提高安全性和管理效率。 未来,随着企业安全需求的提升和 IT 架构的复杂化,ABAC 作为动态访问控制的技术,也会在企业环境中发挥作用。
企业级的控制策略
在企业环境中,我们需要制定规则来控制谁可以在什么情况下访问哪些信息。通常,我们首先会使用自然语言策略(Natural Language Policies, NLPs)来描述这些规则,例如:
- 只有经过认证的医生 才能查看病人的病历。
- 财务部门的员工 可以访问公司财务报表,但只能读取,不能修改。
- 高级管理层 可以访问所有部门的数据。
这些规则易于人理解,但计算机无法直接执行。如何将这些 NLP 规则转换为计算机可识别并自动执行的指令? 这是 ABAC 需要解决的关键问题。
为了让系统能够自动化执行访问控制,我们需要将 NLP 转换为数字策略(Digital Policy, DP)。DP 具备以下特性:
- 访问控制规则必须能被计算机直接编译和执行。
- DP 需要明确主体(用户)属性、对象(资源)属性、环境条件 以及 允许的操作,确保访问权限能被准确计算。
例如,NLP 表达的"医生才能查看病历",转换为 DP 规则后,可能变成以下格式:
xml
<Rule>
<SubjectAttribute>Role = Doctor</SubjectAttribute>
<ObjectAttribute>Type = MedicalRecord</ObjectAttribute>
<Action>Read</Action>
<Condition>Authenticated = True</Condition>
</Rule>
这一规则表明:
- 主体(Subject) 角色必须是医生(
Role = Doctor
)。 - 对象(Object) 必须是病历(
Type = MedicalRecord
)。 - 操作(Action) 仅限于读取(
Read
)。 - 环境条件(Condition) 规定该医生必须已通过身份认证(
Authenticated = True
)。
通过这样的定义,原本用自然语言表达的访问规则,就能转化为计算机可执行的访问控制策略。系统可以根据用户、资源、环境的属性,自动判断是否允许访问。
用 MP 解决访问策略冲突
在企业访问控制中,通常存在大量且逻辑相互包含或互斥的访问规则。特别是在多系统、多层级的环境下,不同规则之间可能会发生冲突。例如:
- 规则 A:医生可以访问所有病历。
- 规则 B:病人可以限制哪些医生能够访问自己的病历。
- 规则 C:实习医生不能访问高级病人的病历。
如果这些规则同时生效,系统如何决定哪个规则优先? 这时就需要元策略(Metapolicy, MP) 来解决冲突。
MP 在 ABAC 体系中负责管理、排序和解决访问控制规则之间的冲突。它的作用包括:
- 定义规则的优先级,确保高优先级规则不会被低优先级规则覆盖。
- 解决冲突,确保不同策略之间不会相互矛盾。
- 保持合规性,使访问控制符合企业安全要求和法律法规。
例如,一个合理的 MP 规则优先级可能是:
- 最高优先级:病人的个人隐私设置(病人可以决定哪些医生可以访问自己的病历)。
- 次高优先级:政府或行业法规(如 HIPAA 法规要求保护患者隐私)。
- 最低优先级:医院的内部访问策略(如"医生可以访问所有病历")。
MP 通过协调 DP 规则,使访问控制系统既能保持灵活性,又能确保安全合规。
当 NLP 规则被转换为可执行的 DP 规则,并且MP 负责管理和协调策略后,企业就可以建立一个完整的数字策略管理系统(Digital Policy Management, DPM)。DPM 使企业能够在复杂的 IT 环境中,灵活调整访问权限,无需手动修改权限配置,系统能根据属性自动计算权限。 确保合规性,自动执行行业法规和企业安全策略,减少合规风险。 提高管理效率,减少管理员的手动操作,实现自动化权限管理。
最终,通过控制策略,让 ABAC 帮助企业在信息安全与灵活访问之间取得平衡,实现高效、安全的信息共享与保护。
企业级的属性管理
ABAC(基于属性的访问控制)是一种根据用户(Subject)、资源(Object)和环境(Environment)的属性来决定访问权限的机制。如果这些属性定义不清楚、数据不完整,整个 ABAC 体系就无法正常运作。例如:如果系统不知道某个用户的属性,就无法判断他是否有权限访问某个文件。如果文件的属性信息不明确,系统无法判断哪些用户可以查看。如果跨组织的属性定义不同,会导致访问权限的不一致。因此,必须建立完整的属性管理机制,确保 ABAC 系统可以准确匹配用户和资源。为了让 ABAC 正常工作,所有的属性都需要被精确定义、管理和共享,需要做到的原则有以下几点:
属性的清晰定义
每个属性都需要有清晰的名称、定义和允许的取值范围。例如
- 用户属性:职位(Position)、部门(Department)、安全级别(Clearance)等。
- 资源属性:数据类型(Type)、机密级别(Classification)、所属部门(Owner)等。
- 环境属性:访问时间(Time)、地理位置(Location)等。
主体属性的维护
由于不同的属性涉及不同的管理权限,通常由不同的机构负责
- 安全部门负责管理安全级别(Clearance) 属性。
- 人力资源部门负责管理姓名(Name)、职位(Title)等用户信息。
这就像一个企业的组织架构,不同的部门负责不同的数据,以确保数据的准确性和可靠性。
对象属性的维护
每个文件、数据、系统等资源都必须被分配正确的属性,以确保访问控制规则能正确执行。
- 每个对象都被正确标记属性,以支持访问控制。
- 企业内部的对象属性标准化,确保不同系统之间的兼容性。
- 防止对象属性被篡改,提高系统安全性。
- 确保访问控制机制正常运行,不会因对象属性缺失或错误而导致安全漏洞。
对象的属性必须被妥善管理,否则 ABAC 访问控制就像一座没有门牌号的城市,无法区分哪些地方该让谁进入,最终导致安全漏洞。
元属性(Metaattributes)
在 ABAC(基于属性的访问控制)系统中,我们已经知道系统存在大量的属性和访问控制策略,然而,当系统管理上万个属性时,如何跟踪、管理和优化这些属性本身?,例如:属性是否可靠?(是谁赋予的?可信度有多高?),属性是否最新?(数据有没有过期?上次更新是什么时候?),属性如何共享?(不同系统间如何交换属性信息?)。为了解决这些问题,ABAC 引入了 "元属性(Metaattributes)" 的概念,即"关于属性的属性"。元属性是关于属性的信息,用于提高管理效率。它表达的内容:
- 记录属性的创建时间、更新时间。
- 评估属性的可信度(比如,用户提交的职位信息是否经过 HR 审核)。
- 标注属性的使用范围(如某些属性只适用于某个部门)。
通过引入元属性(Metaattributes),用来存储"关于属性的信息"。元属性让访问控制更安全、更智能、更高效,确保 ABAC 机制能够长期稳定运行。元属性就是 '属性的附加说明',就像食品包装上的'生产日期、保质期、来源'等信息,帮助系统正确使用和管理数据。
ABAC 的属性管理
ABAC(基于属性的访问控制)是一种依赖用户(Subject)、资源(Object)和环境(Environment)属性来动态决策访问权限的机制。然而,如果属性定义不清、数据不完整,整个 ABAC 体系将难以有效运作。例如:
- 系统无法识别用户属性 → 无法判断该用户是否有权限访问某个文件。
- 资源的属性信息不明确 → 系统无法决定哪些用户可以查看该资源。
- 跨组织的属性定义不统一 → 可能导致访问权限不一致,影响系统安全性和业务协作。
因此,必须建立完整的属性管理机制,确保 ABAC 系统能够准确匹配用户和资源,从而实现灵活、精准和安全的访问控制。为了让 ABAC 正常运作,所有属性都需要被精确定义、管理和共享,以下是关键原则:
属性的清晰定义
每个属性都需要有明确的名称、定义和取值范围,以确保访问控制策略能够正确执行。例如:
- 用户属性(Subject Attributes):职位(Position)、部门(Department)、安全级别(Clearance)等。
- 资源属性(Object Attributes):数据类型(Type)、机密等级(Classification)、所属部门(Owner)等。
- 环境属性(Environment Attributes):访问时间(Time)、地理位置(Location)、访问设备(Device Type)等。
✅ 示例:
如果"财务部员工"只能访问"机密等级为高"的报表,则系统需要确保:
- 用户的职位属性已正确存储(如
职位 = 财务分析师
)。 - 财务报表的机密等级已正确标记(如
机密等级 = 高
)。 - 访问请求发生在受信任的环境中(如
访问设备 = 公司笔记本
)。
只有所有属性信息完整且准确,ABAC 访问控制策略才能正确生效。
主体属性的维护
不同的属性涉及不同的管理权限,通常由不同的部门或系统负责,以确保数据的准确性、完整性和可信度。例如:
- 安全部门 负责管理安全级别(Clearance)等属性,以确保只有适当级别的员工可以访问敏感信息。
- 人力资源部门(HR) 负责管理姓名(Name)、职位(Title)、组织归属(Department)等用户信息,确保员工身份准确无误。
✅ 示例:
这类似于企业的组织架构:
- HR 负责员工的身份信息(如职位、所属部门)。
- IT 部门负责用户的系统访问权限。
- 安全部门确保用户的安全等级(如机密访问权限)。
这种分工确保了属性数据的权威性和一致性,避免因数据不准确而导致访问控制决策失效。
对象属性的维护
每个文件、数据、应用系统等资源都必须被正确标记属性,以确保访问控制规则能精准匹配。
- 所有对象都必须被正确赋予属性,以支持 ABAC 访问控制策略的执行。
- 企业内部应对对象属性进行标准化,确保跨系统、跨部门的兼容性。
- 防止对象属性被篡改,提高访问控制机制的安全性和可信度。
- 确保对象属性始终完整有效,避免因数据缺失或错误导致访问决策失败。
✅ 示例:
如果一份财务报表没有被正确标记为"机密",那么即使 ABAC 规则要求"只有高级财务人员可以查看机密文件",系统也无法正确执行该规则。
🚫 错误情况:像一座没有门牌号的城市,如果没有清晰的对象属性,就无法区分哪些用户应该进入哪些区域,从而导致安全隐患。
元属性(Metaattributes)说明
在 ABAC 体系中,随着系统管理的用户、资源、环境属性数量不断增长,如何高效管理、追踪和优化这些属性变得至关重要。例如:
- 属性的可信度如何评估?(是谁赋予的?可信度有多高?)
- 属性是否最新?(数据是否过期?上次更新时间是什么时候?)
- 属性如何共享?(跨组织、跨系统如何安全交换属性信息?)
为了解决这些问题,ABAC 引入了元属性(Metaattributes),即"关于属性的属性"。元属性用于管理和增强属性的可信度、可用性和安全性,常见的元属性包括:
- 记录属性的创建时间、更新时间,确保数据始终准确有效。
- 评估属性的可信度,例如用户提交的职位信息是否经过HR 审核。
- 标注属性的适用范围,如某些属性仅适用于某个部门或系统。
✅ 示例:
- 一个用户的
安全级别 = 高
,但该属性已经 5 年未更新,可能已不再有效。 - 一个用户的
职位 = 财务主管
,但该职位信息是用户自己填写的,而非 HR 确认的,可信度存疑。 - 一份
文件机密等级 = 最高
,但文件已归档超过 3 年,可能不再需要如此严格的访问控制。
🚀 元属性的作用
- 确保访问控制的数据始终准确、可信、可管理。
- 让 ABAC 体系更智能化,避免因数据过期或错误导致的访问控制失败。
- 提升安全性,确保访问权限基于最新、最可靠的数据计算。
元属性就像食品包装上的"生产日期、保质期、来源"等信息,确保数据的可信度和可用性,帮助系统正确使用和管理数据。
综上,ABAC 依赖于准确的属性管理,如果属性数据不完整或不一致,整个系统将难以正常工作。 主体(用户)、对象(资源)、环境的属性必须标准化和统一管理,以确保访问控制规则的准确性。 元属性(Metaattributes)能够提升数据的可信度、准确性和安全性,帮助企业更高效地管理复杂的访问控制体系。 通过精细化的属性管理和元属性的增强支持,ABAC 能够提供更智能、更灵活、更安全的访问控制解决方案,适用于复杂的企业级 IT 环境。
企业级的分布式 ACM(访问控制机制)
在小型系统中,访问控制通常采用集中式架构,所有访问决策都由一个中央服务器处理。然而,在大型企业环境中,集中式访问控制可能会带来性能瓶颈、单点故障、灵活性不足等问题,尤其当用户、资源和访问规则规模庞大时,系统很难高效响应。
因此,大型企业通常会采用分布式访问控制机制(ACM, Access Control Mechanism),以提高可用性、可靠性和扩展性。根据企业需求,ACM 可以采取集中式、分布式或混合式架构,并根据业务复杂度和安全要求进行灵活调整。
分布式 ABAC 面临的关键挑战
在分布式架构下,访问控制涉及多个核心组件,必须解决以下关键问题:
- 访问控制决策如何做出?(即,谁来判断用户是否有权限访问某个资源?)
- 谁负责执行访问控制?(即,如何拦截和处理访问请求?)
- 如何管理访问控制策略?(即,如何创建、存储和更新访问规则?)
- 如何优化访问控制流程?(即,如何在高并发环境下确保高效、安全的权限验证?)
为了解决这些问题,ABAC 访问控制机制(ACM)划分为多个核心组件,每个组件负责不同的任务,以确保访问控制的高效性、一致性和可扩展性。
分布式 ACM 的组件
在企业级 ABAC 系统中,主要包括 PDP(策略决策点)、PEP(策略执行点)、PIP(策略信息点)、PAP(策略管理点) 这四个关键组件。它们可以集中部署,也可以分布式部署,甚至可以混合使用,以适应企业的不同安全需求。
各组件的职责分工如下:
-
策略执行点(Policy Enforcement Point, PEP)
- 负责拦截用户的访问请求,并根据 PDP 的决策执行允许或拒绝操作。
- PEP 相当于企业访问控制的"前线守卫",确保未经授权的访问不会进入系统。
-
策略决策点(Policy Decision Point, PDP)
- 负责计算访问权限,根据访问控制规则(Policy)和属性(Attributes)做出决策。
- PDP 依赖策略库(Policy Repository)和 PIP 提供的信息,来判断是否允许访问。
-
策略信息点(Policy Information Point, PIP)
- 负责提供访问控制所需的用户属性、对象属性和环境信息,确保 PDP 能够基于最新数据做出正确决策。
- 例如:如果某条规则要求"访问者必须是经理级别",PIP 需要提供用户的职位信息。
-
策略管理点(Policy Administration Point, PAP)
- 负责定义、管理和更新访问控制策略(Policy),企业管理员可以通过 PAP 创建或调整规则。
- 策略存储在策略库(Policy Repository)中,供 PDP 访问。
分布式 ACM 的运行流程
企业级 ABAC 体系中的 ACM 组件如何协作?下图展示了完整的交互流程:

当 Subject(用户)向 Object(资源)发起访问请求时,ACM 的运行流程如下:
-
PEP(策略执行点):
- 负责拦截访问请求,并将请求发送给 PDP 进行权限判断。
- 如果 PDP 允许访问,PEP 执行访问操作;否则,拒绝访问。
-
PDP(策略决策点):
- PDP 接收到 PEP 的请求后,需要从策略库(Policy Repository)和 PIP 获取决策所需的信息。
- PDP 评估访问请求是否符合策略,并将决策结果返回给 PEP。
-
PIP(策略信息点):
- PDP 向 PIP 发送请求,以获取访问决策所需的用户属性、资源属性和环境信息。
- PIP 从属性库(Attribute Repository)和环境条件(Environment Conditions)中查询数据,并返回 PDP。
-
PAP(策略管理点):
- 企业管理员使用 PAP 来创建、更新和管理访问控制策略。
- 策略存储在策略库(Policy Repository)中,供 PDP 访问。
综上,小型系统可以采用集中式访问控制,而大型企业需要分布式 ABAC 访问控制机制(ACM),以提高安全性、可靠性和扩展性。 但是 ABAC 通过 PEP、PDP、PIP、PAP 组件协作,确保访问请求能够基于策略和实时属性进行动态评估。 分布式 ACM 允许企业灵活管理访问权限,支持跨系统、跨组织的安全访问控制,特别适用于大型企业和云计算环境。 未来,随着企业 IT 体系的不断升级,分布式 ABAC 访问控制架构将成为企业安全管理的主流方案,为多层级、复杂环境提供高效、安全的访问控制能力。
参考文献
- Hu V C, Ferraiolo D, Kuhn R, 等. Guide to Attribute Based Access Control (ABAC) Definition and Considerations NIST SP 800-162. National Institute of Standards and Technology, 2014. NIST SP 800-162
- Attribute-based access control. 见: Wikipedia. 2024