可扩展访问控制标记语言(ExtensibleAccessControlMarkupLanguage,XACML)和下一代访问控制(NextGenerationAccessControl,NGAC)是两种截然不同的基于属性的访问控制(Attribute-basedAccessControl,ABAC)标准。虽然它们的目标都是提供一种标准化的方式来表达和执行各种类型的访问控制策略,以满足各种数据服务上的多样化策略的需要,但这两个标准在描述和实施访问控制策略的方式上有明显的差异。
本文介绍了XACML和NGAC的标准规范,然后分别从5个方面对它们进行了比较,目的是帮助ABAC用户和供应商在解决未来数据服务的策略实施需求时,能够做出明智、正确的选择。
关键词:访问控制;访问控制机制;访问控制模型;访问控制策略;基于属性的访问控制;授权;可扩展访问控制标记语言;下一代访问控制;特权
第一部分
ABAC概况和XACML规范
壹
ABAC的发展概况
几十年来,控制和管理对敏感数据的访问一直是一个颇具挑战性的任务。基于属性(Attribute)的访问控制(ABAC)代表了逻辑访问控制发展的最新里程碑,它提供了一种基于属性的方法来适应广泛、多样的访问控制策略,并简化了访问控制管理。
大多数访问控制方法都是基于发起访问(例如读取文件)请求的用户的身份来实现的,要么直接基于用户身份为其分配相应的能力(Capability),要么通过预定义的属性类型(例如分配给用户的角色或组)来间接授权。因为需要将能力直接与用户或其属性相关联,这些访问控制系统的建设和管理往往很麻烦。
此外,请求用户的身份、组和角色通常也不足以表示实际的访问控制策略。另一种方法是用属性来表示策略,并根据用户和资源的任意属性,以及可选的环境属性来授予或拒绝用户的请求,这种访问控制方法通常称为基于属性的访问控制(ABAC),也是XACML和NGAC的固有特性。
ABAC引擎的访问控制逻辑根据请求用户、资源和环境的指派(Assign)属性以及用这些属性表示的策略来计算策略决策,如图1所示。
图1ABAC的基本概念
有两种方法来定义ABAC策略。最常见的方法是通过逻辑表达式来定义授权策略,逻辑表达式由属性值和逻辑运算符(例如,AND,OR,≥,≠)组成。例如:
can_access(u,a,o)→Role(u)=”doctor”ANDWard(u)=Ward(o)AND(a=readORa=write)
定义了:对于任何用户u和客体o,只要u具有doctor角色,且u和o的病房信息相同,且当前操作为read或write,则都允许u对o执行操作a。
XACML、ABAC和HGABAC(基于层次组和属性的访问控制)所定义的策略规范语言都属于这种表达方式。
第二种策略的定义方法是枚举所有相关的关系配置。NGAC和LaBAC(基于标签的访问控制)属于这一类。例如,NGAC通过使用(uai,arsi,oai)形式的关系组合来指定策略,意为:用户属性uai中的用户拥有对客体属性oai中的客体在访问权限集arsi中的访问权限。
XACML和NGAC都是ABAC标准,用于为用户的数据服务环境引入便利的安全策略框架。一般来说,数据服务是为用户提供数据的消费、操纵、管理和共享的应用程序,如员工考勤报告、工资单处理、公司日历和健康福利管理等应用程序,这些应用都需要访问控制的保护。XACML和NGAC为应用程序提供了一个通用的访问控制工具,大大减轻了企业在安全管理中面临的互操作性和可用性挑战。具体的做法是,从每个应用的操作环境中删除其实现访问控制的功能组件,所有相应的访问控制逻辑由一组提供访问决策功能的公共访问控制模块来实现,这些模块通过集中的策略和属性存储库来支持这些应用程序。
从访问控制的角度来看,数据服务在概念上可以被视为具有表示/逻辑层和操作环境层的应用程序,其不同层次由相应的功能和接口来描述。表示层为用户提供了一个数据接口和方法,用于创建、显示和更改数据。表示层不执行存储、检索或更改存储数据状态的操作,也不执行更改数据访问状态的操作(例如,读取、写入/保存、创建和删除文件、提交、批准、调度),而是向操作环境层发出执行这些操作的请求。操作环境实现操作例程以执行访问请求,并提供访问控制以确保操作例程的执行受策略保护。
访问控制机制由多个逻辑组件组成,它们相互协同以实现受策略保护的数据访问。这些组件包括访问控制数据(用于表达访问控制策略和属性),以及用于捕获访问请求和针对这些请求计算和执行访问决策的一组函数。大多数操作环境以不同的方式实现访问控制,每个环境都有不同的控制范围(例如用户、资源),每个环境都涉及不同的操作方式(例如读取、发送、批准、选择)和数据类型(例如文件、消息、工作项、记录)。
这种异质性带来了许多管理和策略执行方面的挑战。在管理访问策略和属性时,管理员不得不处理大量的安全域。即使能在不同的操作环境中进行适当的协调,全局控制也很难可视化和实施运行。此外,由于操作环境以不同的方式实现访问控制,因此很难跨操作环境来交换和共享访问控制数据。XACML和NGAC试图通过创建一种通用的、集中的方式来表达所有访问控制数据(策略和属性)和计算策略决策(针对应用程序表示层的访问请求),从而缓解这些挑战。
年,NIST发布了SP-《基于属性的访问控制(ABAC)定义和思考》。发布该文档有两个目的,首先,它为联邦机构提供了ABAC的权威定义及其功能组件的描述。SP-将ABAC视为一种机制,包括4个功能层次:执行、决策、访问控制数据和管理。第二,考虑到ABAC不同实现方法的潜力,SP-强调了选择ABAC进行部署的几个考虑因素。这些考虑因素涉及操作效率、属性和策略管理、支持的策略范围和类型以及对行政审查和资源发现的支持等。基于这些方面,本报告对XACML和NGAC进行了分析和比较,还比较了它们在支持访问控制功能与专有操作环境分离方面的能力,但并不打算为XACML或NGAC提供实现规范。
1
XACML
年,随着面向服务体系结构(SOA)的出现,结构化信息标准促进组织(OASIS)发布了一个名为XACML的规范,提出了许多后来被认为是ABAC的元素。XACML在其授权过程中采用了三个组件:
◆XACML策略语言。采用规则、策略和策略集的形式来定义访问控制要求,策略要素包括主体(用户)、资源、动作(操作)和环境属性,以及一组用于策略/规则组合的算法。
◆XACML请求/响应协议。用于查询决策引擎,该引擎根据策略评估主体的访问请求,并在响应时返回访问决策。
◆XACML参考体系结构。用于部署软件模块以支持策略和属性,并基于策略和属性计算和执行访问控制决策。
XACML是最早出现的ABAC标准,当前版本是年发布的XACML3.0,在其发展过程中,它得到了研究人员和供应商的广泛