马 赛,田 飞,靳 婷
(华北计算技术研究所,北京100083)
近年来,依托于快速发展的网络通信技术,特别是互联网技术,软件的使用模式发生转变,以互联网使用模式为主的信息系统逐渐成为主流,软件的网络化、服务化也成为未来信息系统发展的大趋势。面向服务框架 (service oriented architecture,SOA)[1]以其最佳的设计原则、架构模式、集成能力、基于标准的开放性和交互能力而脱颖而出。服务集成总线 (service integration bus,SIB)[2]是构建基于SOA解决方案时所使用基础架构的关键部分,服务集成总线的职责是使服务消费者能够调用服务提供者提供的服务。在复杂多变的分布式环境中,如何保证服务消费者去高效的、动态的、安全的调用服务提供者提供的服务,是我们面临的首要任务。一方面,传统的服务集成总线在选择服务提供者时,只是依赖于少数固定不变的服务实例选择规则,没有把对服务实例的路由上升到动态可变策略的层面。另一方面,访问控制模型[3]以其出色的访问控制能力受到越来越多的关注,尤其是在分布式环境中,比较有代表性的模型有基于身份的访问控制 (identity-based access control,IBAC)、基于角色的访问控制 (role-based access control,RBAC)和基于属性的访问控制 (attribute-based access control,ABAC)。
基于以上原因,我们在服务集成总线中引入基于属性的策略服务 (attribute-based policy service,ABPS),采用可扩展访问控制标记语言 (eXtensible access control markup language,XACML)描述路由选择策略和访问控制策略,并引入黑白名单机制,更为细粒度的控制在特定情况下的特定主体的临时权限。在策略存储与管理方面,我们设计了一种适用于大规模策略存储的策略库模型,提高策略的判定效率。
基于属性的访问控制[4-6]是以参与决策的相关实体的属性为基础进行授权决策的一种访问控制机制。它是对基于身份的访问控制和基于角色的访问控制的扩展,IBAC中的身份和RBAC中的角色可分别看作是ABAC中的两个属性,所以说ABAC提供了一种更细粒度、更为灵活的访问控制方法。
1.1.1 属性定义
不同于IBAC和RBAC,ABAC模型能够根据任何与实体相关的特性 (属性)来定义权限。对于访问控制来说,我们只关心三类实体的属性。
(1)主体属性。主体是作用于某个资源的实体,既可以是用户也可以是应用或者程序。主体的属性定义了它的身份和特征,包括主体标识、名字、机构、职位等。另外,正如前面所讲,角色也可以视为主体的属性。
(2)资源属性。资源是被主体作用的实体,既可以是web服务也可以是数据结构或系统组件。对于web服务来说,它的属性可以有服务标识、服务提供者、服务类型以及服务质量等。
(3)环境属性。这类属性在大多数访问控制策略中都未涉及,它描述了信息访问发生的客观环境或上下文。例如,当前日期时间属性、当前病毒/黑客活动属性和网络安全级别属性等。
1.1.2 ABAC策略公式
定义基本的ABAC策略模型如下:
(1)S、R和E分别代表主体、资源和环境;
(2)SAk(1 k K),RAm(1 m M)和EAn(1 n N)分别是主体、资源和环境预定义的属性;
(3)ATTR(s),ATTR(r)和ATTR(e)分别是主体s,资源r和环境e的属性分配关系
(4)策略的规则是指在特定环境e中,对主体s访问资源r进行判定,它是一个关于s,r和e的布尔函数
(5)策略规则库或策略库可以包含一系列策略规则,覆盖安全域中的多个主体和资源。访问控制决策过程本质上就是对策略库中适用的策略规则进行判定的过程。
XACML[7,8]是由结构信息标准化促进组织 (organization for the advancement of structured information standards,OASIS)制订的标准,它既是策略语言也是访问控制决策请求/响应语言。策略语言用来描述通用的访问控制请求,具有标准的扩展点以定义新的方法、数据类型、组合逻辑等。请求/响应语言负责形成一个请求来询问某个行为是否被允许,它也负责解释经过决策后返回的结果。
1.2.1 XACML策略语言模型
XACML策略语言模型如图1所示。XACML具有良好的结构性与层次性,规则、策略和策略集是三个相对独立的元素,每个元素又包含各自的组成元素,而且三个元素之间也存在着包含与被包含的关系,其中涉及到规则组合算法和策略组合算法。
图1 XACML策略语言模型
1.2.2 XACML的优势
与现存的策略语言相比,XACML有以下优势:
(1)标准性。XACML作为标准语言,已经得到由专家和用户组成的社区审查,使得系统设计者在设计自己的系统时,无需再从设计一门新语言做起。而且,随着XACML被越来越广泛的应用,这些采用相同语言的应用之间的互操作性得到了增强。
(2)通用性。XACML不只为特定环境或特定类型资源提供访问控制,它可以应用在任何环境中。所以当一个使用XACML描述的策略同时适用于多个应用时,策略管理变得更加容易。
(3)分布性。策略可以保存在不同位置,而且也可以引用位于任意位置的其他策略。不同的用户或组可以对策略适当的分片以方便管理,不同的策略返回不同的结果,而XACML知道如何将这些结果正确的合并成一个决策结果。
(4)可扩展性。XACML不仅支持多种多样的数据类型、方法以及策略、规则合并算法,也允许用户自定义元素和属性。此外,一些标准化组织试图对XACML进行扩展,将其与其他标准 (例如SAML和LDAP)相结合,这会大大拓展XACML的应用方式。
服务访问模型,直观来讲就是服务请求方访问服务提供方所提供服务的模型。目前主流的集成技术有两种,一个是传统的基于UDDI(universal description,discovery,and integration)[9]的服务访问模型,另一个是基于服务集成总线的服务访问模型。在传统的基于UDDI的服务访问模式中,服务提供方将服务发布到UDDI注册中心,服务请求方利用服务注册代理去UDDI注册中心请求服务,并根据代理返回的服务描述信息进行服务实例绑定,最后服务请求方与服务提供方建立起点对点的通信关系,如图2所示。
图2 基于UDDI的服务访问模型
服务集成总线是面向服务架构中实现服务集成和管理的基础设施,提供了服务管理的方法和在分布式异构环境中进行服务交互的功能。在基于服务集成总线的服务访问模式中,服务集成总线在服务请求方与服务提供方之间扮演着信息调度的角色。服务提供方利用总线中的注册发现服务将服务发布出来,当服务请求方想要访问服务时,它无需再直接去UDDI注册中心查询服务,而是将服务访问请求发送至服务集成总线,服务集成总线的服务中介通过调用注册发现服务、策略服务等选择最优服务实例,访问服务实例并将结果返回给服务请求方。
如图3所示,服务集成总线主要由服务中介和基础服务组成,这些服务包括消息服务、注册发现服务、策略服务、用户服务以及监控服务等。消息服务是服务集成总线中消息级别的通信保证。注册发现服务提供了服务注册与服务发布的能力。策略服务详见下文。用户服务提供用户认证的能力。监控服务为服务管理和策略制定提供依据。
相比前一种模式,基于服务集成总线的服务访问模型的最大优势就是服务请求方无需自己去感知服务提供方的实际地址,使得服务的请求方和提供方之间高度解耦。通过引入策略服务,使服务的发现与路由变得可控,大大提高服务的可靠性与灵活性。通过缓存注册发现服务的数据,使服务集成总线的处理性能得到提升。
图3 基于SIB的服务访问模型
基于属性的策略服务作为服务集成总线中的基础服务,其核心是策略判定模型。策略判定模型定义了策略判定点、策略管理点、策略信息点等组件,根据管理员制定的策略信息以及用户、服务或服务实例和环境的属性信息动态的评估访问请求,并返回决策信息。其模型如图4所示。
此模型的资源对象分为服务资源和服务实例资源两种,它们的描述信息都存储在注册发现服务中,它们二者之间是共性与特性的关系。共性的服务信息包括服务标识、服务名称、服务提供方、服务描述等属性,个性的服务实例信息是对共性服务信息的实例化扩展,包括服务实例标识、服务实例URI、服务实例部署位置等属性。
策略服务中的策略分为访问控制策略和路由选择策略两种,访问控制策略是应用在用户访问服务资源时的判定策略,路由选择策略是应用在选择最优服务实例时的判定策略。
图4 ABPS判定模型
策略服务的总体思路是首先根据访问控制策略判断能否访问服务资源,然后根据路由选择策略去寻找最优服务实例资源。详细处理流程如下:
(1)策略管理点制定、维护策略;
(2)服务中介作为策略执行点调用策略服务;
(3)访问控制上下文处理器收到请求后,生成唯一的请求标识,从请求中解析出属性,并根据这些已知属性去策略管理点查询组织标准XACML请求所需要的属性标识集合;
(4)策略管理点缓存请求标识,并去策略库请求策略信息;
(5)在策略库中根据用户标识、服务标识及已知属性查询私有策略,并且将私有策略与公共策略一并返回给策略管理点;
(6)策略管理点从策略集中抽取属性标识集合,缓存策略集与属性标识集,并将其与请求标识关联起来,最后将属性标识集合返回给访问控制上下文处理器;
(7)访问控制上下文处理器根据获取的属性标识,向策略信息点请求属性值;
(8)策略信息点根据不同的属性标识去不同的服务获取属性值,
1)去注册发现服务获取服务或服务实例属性信息;
2)去用户服务获取用户属性信息;
3)去监控服务获取动态环境属性信息。
(9)策略信息点将属性值返回给访问控制上下文处理器,由访问控制上下文处理器组织标准的XACML请求;
(10)访问控制上下文处理器将标准的XACML请求发送给策略判定点;
(11)策略判定点根据请求标识向策略管理点请求策略集合;
(12)策略管理点在缓存中查找与请求标识相关联的策略集合,返回给策略判定点。策略判定点根据访问控制上下文处理器发来的请求以及从策略管理点获取的策略进行决策,判断用户能否访问服务资源,并将决策结果返回给访问控制上下文处理器;
(13)访问控制上下文处理器解析响应决策结果信息,如果不能访问服务资源,则直接进入步骤14;如果能访问服务资源,则重复3-12步,由路由选择上下文处理器组织XACML请求,其中请求的资源是此服务的所有服务实例,发送至策略判定点,由其根据路由选择策略选择恰当的服务实例集合返回给路由选择上下文处理器,进入步骤14;
(14)访问控制上下文处理器返回服务拒绝访问结果给策略执行点,或者,路由选择上下文处理器根据服务质量选择最优的服务实例,并返回服务实例URI给策略执行点。
服务集成总线的策略服务涵盖了两种类型的策略,访问控制策略和路由选择策略。策略服务是基于属性的,可以从可细可粗的粒度对策略进行定义,使得服务集成总线的管理行为更加灵活。采用XACML描述策略有其独特的优势,除以上介绍的特点之外,XACML天生就是一种访问控制策略,而且利用它良好的扩展特性,我们在服务集成总线中采用XACML描述路由选择策略,并取得初步成果。
在讨论服务集成总线的策略之前,首先要区分服务与服务实例两种资源。服务资源是指由服务管理方注册到注册发现服务的资源,一个服务资源一旦被注册成功,仅仅意味着此服务可以被服务请求方看到。而服务实例由服务管理方发布到注册发现服务,一个服务实例资源一旦被发布成功,意味着此服务实例可以被服务请求方真正的访问到。简言之,服务与服务实例是一种父与子、描述与实现、注册态与运行态的关系。
现在创建一个完整的策略描述示例,包括访问控制策略描述与路由选择策略描述两部分。
访问控制策略工作在服务层,决定主体能否访问服务资源。考虑这样一个访问控制策略,它的自然语言描述是“Any user in NCI may access Weather Report between 8 o'clock and 18 o'clock”,在这个策略中包含了用户、服务资源、动作、环境4个要素,其中用户的工作单位属性值是NCI,服务资源的服务标识属性值是 Weather Report,动作的类型属性值是access,环境的时间属性是8:00-18:00。在使用XACML描述此策略时,要先定义出策略所用到的属性,包括用户的工作单位属性、服务的服务标识属性、动作的类型属性以及环境的时间属性。此策略适用于NCI中的用户和Weather Report资源,我们将其设为Policy的Target,以资源Target为例详细描述,如图5所示。Resource元素包含一个ResourceMatch元素,Resource-Match元素可以看作是一个返回真假值的函数,函数的有两个参数,一个参数是Policy中定义的属性值,另一个参数需要通过AttributeDesignator方式从Request中获取,它是根据属性id和属性值的类型去获取对应的值。此处的函数是string-equal,它比较以上两个字符串参数并返回真假值,如果为真,需要继续检测其他Target以判断Policy是否适用此Request,如果为假,则说明Policy不适用此Request。
路由选择策略工作在服务实例层,决定了用户可以访问的最佳服务实例资源。考虑这样一个路由选择策略,它的自然语言描述是“A user intends to access the service instance deployed in the same city”,在这个策略中包含了用户、服务实例资源、动作三个要素,其中动作的类型属性值是access,规则适用的条件是用户的地点属性值与服务实例的部署地点属性值一致。路由选择策略的XACML描述与访问控制策略只是在资源元素上有服务与服务实例的区分,其余都基本一致,不再赘述。但是与访问控制请求仅包含单个服务资源不同,路由选择请求可以包含多个服务实例资源,通过决策获取最优的服务实例。路由选择请求详细描述如图6所示。在Request中包含两个服务实例资源instance1和instance2,如果用户身处北京,他将访问到服务实例instance1,如果用户身处上海,他将访问到服务实例instance2。
传统的策略库,有的是文件系统中的策略文件库,有的依托于关系型数据库或半结构化数据库。但大部分情况都只是将策略堆放在库中,导致对请求的判定需要遍历所有策略。以提高策略判定效率为目标,我们设计了一个基于属性与策略双向关系的策略库模型,如图7所示。
图7 改进的策略库模型
在改进的策略库模型中不仅存储了策略信息,也存储了属性信息以及两者之间的关系信息。策略库的根节点下包括属性和策略两类元素,其中属性元素是属性存储信息的根节点,策略元素是策略存储信息的根节点。一方面,策略的存储按访问控制策略和路由选择策略分类存储,策略不但存储着策略自身的信息,而且也存储着此策略涉及的属性标识集合。另一方面,在服务化的计算环境中,考虑更多的是用户、服务和服务实例三种元素,所以将属性分为用户属性、服务属性、服务实例属性以及环境属性四类。以用户属性为例,用户属性是用户属性1、用户属性k……用户属性n的集合。对于单个的用户属性k,又包含用户属性源数据和属性涉及策略两类信息。源数据包含属性值的数据类型、数据取值范围以及属性描述信息。属性涉及策略是指包含此属性的策略,细分为访问控制策略和路由选择策略两类,在这两类节点下存储的只是策略标识,而不是策略的完整信息。
策略执行点根据已知属性获取组织XACML请求所需要的属性集,策略管理点分别提取用户标识属性、服务或者服务实例标识属性和已知属性下的私有策略,并且提取环境属性下的公有策略。这两者组成的策略集是适用于此请求判定过程的优化策略集合,而且策略管理点将服务或服务实例标识、策略集、属性集以及三者间的关系缓存起来,提高了策略判定的效率。
我们采用 Apache Axis2作为服务开发框架,结合OpenID4Java、OpenDS2.2、sunxacml2.0等开源工具初步实现了服务集成总线中基于属性的策略服务的原型系统。
为简化服务中介对策略服务的使用,基于属性的策略服务利用Axis2发布成Web服务的形式,它的接口定义为:
其中REQCLS定义如图8所示。
图8 REQLCS定义
策略服务中的访问控制上下文处理器与路由选择上下文处理器分别作为Axis2的Handler存在,Handler解析策略执行点发送过来的SOAP消息,提取用户、服务等信息,并通过调用扩展的sunxacml2.0使其形成的标准XACML格式的判定请求能够包含多个服务实例资源;对sunxacml2.0进一步扩展,使策略判定点具有同时对单个请求中多个服务实例资源判定的能力,具有在单个响应中包含多个服务实例资源判定结果的能力;借助于OpenID4Java实现了策略信息点的用户信息获取模块,通过分别调用注册发现服务接口与监控服务接口实现了策略信息点的服务或服务实例信息获取模块和环境信息获取模块;依据XACML标准,实现策略管理点,具有基本的策略定义功能;基于改进策略库模型的半结构化特性,采用OpenDS2.2与本地策略文件相结合的方式存储策略和属性信息,大大提高了策略与属性的查找效率。
基于传统策略库模型和改进策略库模型分别进行策略判定实验,策略判定遵循sunxacml2.0的约定,对每个请求,策略库中只能有一个策略是适用的。实验结果如图9所示,由于基于传统策略库模型的策略判定需要遍历策略库中的所有策略文件,其判定用时随策略库文件总数的增长而线性增长;而基于改进策略库模型的判定将策略与属性的关系信息存储在OpenDS中,并且对策略标识属性建立索引后,大大加快了策略的查找速度,这样虽然策略库文件总数增长,但策略判定用时基本保持不变。
图9 基于策略库模型的判定实验
本文在面向服务的计算环境中对服务集成总线提出了一套基于属性的策略服务,旨在提高服务集成总线的中介能力。策略服务中包含访问控制策略和路由选择策略,并创新性的使用XACML描述路由选择策略。本文提出了改进的策略库模型,通过存储策略与属性的双向关系达到提高策略判定效率的目的。在未来的工作中,需要进一步扩展路由选择策略对服务质量属性的支持,使其能够描述更为通用的服务质量。策略服务考虑引入SAML等安全协议的支持[10],以保证内部各模块之间通信的安全性。另外,策略库模型需要时间与实践的考验,进一步对其进行优化也是以后工作的重点之一。
[1]Schmidt M T.The enterprise service bus:making service-oriented architecture real[J].IBM Systems Journal,2005,44(4):781-797.
[2]XIE Jihui,BAI Xiaoying,CHEN Bin.A survey on enterprise service bus[J].Computer Science,2007,34(11):13-18(in Chinese).[谢继晖,白晓颖,陈斌,等.企业服务总线研究综述[J].计算机科学,2007,34(11):13-18.]
[3]YAN Xuexiong,WANG Qingxian,MA Hengtai.Survey of web services access control model[J].Computer Science,2008,35(5):38-41(in Chinese).[颜学雄,王清贤,马恒太.Web服务访问控制模型研究 [J].计算机科学,2008,35(5):38-41.]
[4]Eric Yuan,Jin Tong.Attributed based access control(ABAC)for web services [C]//Proc the IEEE Int.Conf.Web Services,Orlando,USA,2005:561-569.
[5]SHU Jian,SHI Lianghong,XIA Bing,et al.Study on action and attribute-based access control model for web services[C]//Second International Symposium on Information Science and Engineering,2009:213-216.
[6]LI Xiaofeng,FENG Dengguo,CHEN Zhaowu,et al.Model for attribute based access control [J].Journal on Communications,2008,29(4):90-98(in Chinese).[李晓峰,冯登国,陈朝武,等.基于属性的访问控制模型 [J].通信学报,2008,29(4):90-98.]
[7]ITU-T X.1142-2006.eXtensible access control markup language(XACML 2.0)[Z].
[8]LI Song.Research and implementation on XACML unified-policiesbased access control service[D].Chengdu:Sichuan University,2006(in Chinese).[李松.基于XACML统一策略的访问控制服务研究与实现[D].成都:四川大学,2006.]
[9]MA Xiaoxuan,HUAI Jinpeng,WANG Zhihu.Design and implementation on UDDI-based application service center[J].Journal of Beijing University of Aeronautics and Astronautics,2005,31(9):1040-1044(in Chinese).[马晓轩,怀进鹏,王芝虎.基于UDDI的应用服务注册中心的设计与实现[J],北京航空航天大学学报,2005,31(9):1040-1044.]
[10]Nicolai M Josuttis.SOA in practice:The art of distributed system design [M].O'Reilly Media Inc,2007:173-188.