馬 賽,田 飛,靳 婷
(華北計算技術研究所,北京100083)
近年來,依托于快速發(fā)展的網(wǎng)絡通信技術,特別是互聯(lián)網(wǎng)技術,軟件的使用模式發(fā)生轉變,以互聯(lián)網(wǎng)使用模式為主的信息系統(tǒng)逐漸成為主流,軟件的網(wǎng)絡化、服務化也成為未來信息系統(tǒng)發(fā)展的大趨勢。面向服務框架 (service oriented architecture,SOA)[1]以其最佳的設計原則、架構模式、集成能力、基于標準的開放性和交互能力而脫穎而出。服務集成總線 (service integration bus,SIB)[2]是構建基于SOA解決方案時所使用基礎架構的關鍵部分,服務集成總線的職責是使服務消費者能夠調用服務提供者提供的服務。在復雜多變的分布式環(huán)境中,如何保證服務消費者去高效的、動態(tài)的、安全的調用服務提供者提供的服務,是我們面臨的首要任務。一方面,傳統(tǒng)的服務集成總線在選擇服務提供者時,只是依賴于少數(shù)固定不變的服務實例選擇規(guī)則,沒有把對服務實例的路由上升到動態(tài)可變策略的層面。另一方面,訪問控制模型[3]以其出色的訪問控制能力受到越來越多的關注,尤其是在分布式環(huán)境中,比較有代表性的模型有基于身份的訪問控制 (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)描述路由選擇策略和訪問控制策略,并引入黑白名單機制,更為細粒度的控制在特定情況下的特定主體的臨時權限。在策略存儲與管理方面,我們設計了一種適用于大規(guī)模策略存儲的策略庫模型,提高策略的判定效率。
基于屬性的訪問控制[4-6]是以參與決策的相關實體的屬性為基礎進行授權決策的一種訪問控制機制。它是對基于身份的訪問控制和基于角色的訪問控制的擴展,IBAC中的身份和RBAC中的角色可分別看作是ABAC中的兩個屬性,所以說ABAC提供了一種更細粒度、更為靈活的訪問控制方法。
1.1.1 屬性定義
不同于IBAC和RBAC,ABAC模型能夠根據(jù)任何與實體相關的特性 (屬性)來定義權限。對于訪問控制來說,我們只關心三類實體的屬性。
(1)主體屬性。主體是作用于某個資源的實體,既可以是用戶也可以是應用或者程序。主體的屬性定義了它的身份和特征,包括主體標識、名字、機構、職位等。另外,正如前面所講,角色也可以視為主體的屬性。
(2)資源屬性。資源是被主體作用的實體,既可以是web服務也可以是數(shù)據(jù)結構或系統(tǒng)組件。對于web服務來說,它的屬性可以有服務標識、服務提供者、服務類型以及服務質量等。
(3)環(huán)境屬性。這類屬性在大多數(shù)訪問控制策略中都未涉及,它描述了信息訪問發(fā)生的客觀環(huán)境或上下文。例如,當前日期時間屬性、當前病毒/黑客活動屬性和網(wǎng)絡安全級別屬性等。
1.1.2 ABAC策略公式
定義基本的ABAC策略模型如下:
(1)S、R和E分別代表主體、資源和環(huán)境;
(2)SAk(1 k K),RAm(1 m M)和EAn(1 n N)分別是主體、資源和環(huán)境預定義的屬性;
(3)ATTR(s),ATTR(r)和ATTR(e)分別是主體s,資源r和環(huán)境e的屬性分配關系
(4)策略的規(guī)則是指在特定環(huán)境e中,對主體s訪問資源r進行判定,它是一個關于s,r和e的布爾函數(shù)
(5)策略規(guī)則庫或策略庫可以包含一系列策略規(guī)則,覆蓋安全域中的多個主體和資源。訪問控制決策過程本質上就是對策略庫中適用的策略規(guī)則進行判定的過程。
XACML[7,8]是由結構信息標準化促進組織 (organization for the advancement of structured information standards,OASIS)制訂的標準,它既是策略語言也是訪問控制決策請求/響應語言。策略語言用來描述通用的訪問控制請求,具有標準的擴展點以定義新的方法、數(shù)據(jù)類型、組合邏輯等。請求/響應語言負責形成一個請求來詢問某個行為是否被允許,它也負責解釋經(jīng)過決策后返回的結果。
1.2.1 XACML策略語言模型
XACML策略語言模型如圖1所示。XACML具有良好的結構性與層次性,規(guī)則、策略和策略集是三個相對獨立的元素,每個元素又包含各自的組成元素,而且三個元素之間也存在著包含與被包含的關系,其中涉及到規(guī)則組合算法和策略組合算法。
圖1 XACML策略語言模型
1.2.2 XACML的優(yōu)勢
與現(xiàn)存的策略語言相比,XACML有以下優(yōu)勢:
(1)標準性。XACML作為標準語言,已經(jīng)得到由專家和用戶組成的社區(qū)審查,使得系統(tǒng)設計者在設計自己的系統(tǒng)時,無需再從設計一門新語言做起。而且,隨著XACML被越來越廣泛的應用,這些采用相同語言的應用之間的互操作性得到了增強。
(2)通用性。XACML不只為特定環(huán)境或特定類型資源提供訪問控制,它可以應用在任何環(huán)境中。所以當一個使用XACML描述的策略同時適用于多個應用時,策略管理變得更加容易。
(3)分布性。策略可以保存在不同位置,而且也可以引用位于任意位置的其他策略。不同的用戶或組可以對策略適當?shù)姆制苑奖愎芾恚煌牟呗苑祷夭煌慕Y果,而XACML知道如何將這些結果正確的合并成一個決策結果。
(4)可擴展性。XACML不僅支持多種多樣的數(shù)據(jù)類型、方法以及策略、規(guī)則合并算法,也允許用戶自定義元素和屬性。此外,一些標準化組織試圖對XACML進行擴展,將其與其他標準 (例如SAML和LDAP)相結合,這會大大拓展XACML的應用方式。
服務訪問模型,直觀來講就是服務請求方訪問服務提供方所提供服務的模型。目前主流的集成技術有兩種,一個是傳統(tǒng)的基于UDDI(universal description,discovery,and integration)[9]的服務訪問模型,另一個是基于服務集成總線的服務訪問模型。在傳統(tǒng)的基于UDDI的服務訪問模式中,服務提供方將服務發(fā)布到UDDI注冊中心,服務請求方利用服務注冊代理去UDDI注冊中心請求服務,并根據(jù)代理返回的服務描述信息進行服務實例綁定,最后服務請求方與服務提供方建立起點對點的通信關系,如圖2所示。
圖2 基于UDDI的服務訪問模型
服務集成總線是面向服務架構中實現(xiàn)服務集成和管理的基礎設施,提供了服務管理的方法和在分布式異構環(huán)境中進行服務交互的功能。在基于服務集成總線的服務訪問模式中,服務集成總線在服務請求方與服務提供方之間扮演著信息調度的角色。服務提供方利用總線中的注冊發(fā)現(xiàn)服務將服務發(fā)布出來,當服務請求方想要訪問服務時,它無需再直接去UDDI注冊中心查詢服務,而是將服務訪問請求發(fā)送至服務集成總線,服務集成總線的服務中介通過調用注冊發(fā)現(xiàn)服務、策略服務等選擇最優(yōu)服務實例,訪問服務實例并將結果返回給服務請求方。
如圖3所示,服務集成總線主要由服務中介和基礎服務組成,這些服務包括消息服務、注冊發(fā)現(xiàn)服務、策略服務、用戶服務以及監(jiān)控服務等。消息服務是服務集成總線中消息級別的通信保證。注冊發(fā)現(xiàn)服務提供了服務注冊與服務發(fā)布的能力。策略服務詳見下文。用戶服務提供用戶認證的能力。監(jiān)控服務為服務管理和策略制定提供依據(jù)。
相比前一種模式,基于服務集成總線的服務訪問模型的最大優(yōu)勢就是服務請求方無需自己去感知服務提供方的實際地址,使得服務的請求方和提供方之間高度解耦。通過引入策略服務,使服務的發(fā)現(xiàn)與路由變得可控,大大提高服務的可靠性與靈活性。通過緩存注冊發(fā)現(xiàn)服務的數(shù)據(jù),使服務集成總線的處理性能得到提升。
圖3 基于SIB的服務訪問模型
基于屬性的策略服務作為服務集成總線中的基礎服務,其核心是策略判定模型。策略判定模型定義了策略判定點、策略管理點、策略信息點等組件,根據(jù)管理員制定的策略信息以及用戶、服務或服務實例和環(huán)境的屬性信息動態(tài)的評估訪問請求,并返回決策信息。其模型如圖4所示。
此模型的資源對象分為服務資源和服務實例資源兩種,它們的描述信息都存儲在注冊發(fā)現(xiàn)服務中,它們二者之間是共性與特性的關系。共性的服務信息包括服務標識、服務名稱、服務提供方、服務描述等屬性,個性的服務實例信息是對共性服務信息的實例化擴展,包括服務實例標識、服務實例URI、服務實例部署位置等屬性。
策略服務中的策略分為訪問控制策略和路由選擇策略兩種,訪問控制策略是應用在用戶訪問服務資源時的判定策略,路由選擇策略是應用在選擇最優(yōu)服務實例時的判定策略。
圖4 ABPS判定模型
策略服務的總體思路是首先根據(jù)訪問控制策略判斷能否訪問服務資源,然后根據(jù)路由選擇策略去尋找最優(yōu)服務實例資源。詳細處理流程如下:
(1)策略管理點制定、維護策略;
(2)服務中介作為策略執(zhí)行點調用策略服務;
(3)訪問控制上下文處理器收到請求后,生成唯一的請求標識,從請求中解析出屬性,并根據(jù)這些已知屬性去策略管理點查詢組織標準XACML請求所需要的屬性標識集合;
(4)策略管理點緩存請求標識,并去策略庫請求策略信息;
(5)在策略庫中根據(jù)用戶標識、服務標識及已知屬性查詢私有策略,并且將私有策略與公共策略一并返回給策略管理點;
(6)策略管理點從策略集中抽取屬性標識集合,緩存策略集與屬性標識集,并將其與請求標識關聯(lián)起來,最后將屬性標識集合返回給訪問控制上下文處理器;
(7)訪問控制上下文處理器根據(jù)獲取的屬性標識,向策略信息點請求屬性值;
(8)策略信息點根據(jù)不同的屬性標識去不同的服務獲取屬性值,
1)去注冊發(fā)現(xiàn)服務獲取服務或服務實例屬性信息;
2)去用戶服務獲取用戶屬性信息;
3)去監(jiān)控服務獲取動態(tài)環(huán)境屬性信息。
(9)策略信息點將屬性值返回給訪問控制上下文處理器,由訪問控制上下文處理器組織標準的XACML請求;
(10)訪問控制上下文處理器將標準的XACML請求發(fā)送給策略判定點;
(11)策略判定點根據(jù)請求標識向策略管理點請求策略集合;
(12)策略管理點在緩存中查找與請求標識相關聯(lián)的策略集合,返回給策略判定點。策略判定點根據(jù)訪問控制上下文處理器發(fā)來的請求以及從策略管理點獲取的策略進行決策,判斷用戶能否訪問服務資源,并將決策結果返回給訪問控制上下文處理器;
(13)訪問控制上下文處理器解析響應決策結果信息,如果不能訪問服務資源,則直接進入步驟14;如果能訪問服務資源,則重復3-12步,由路由選擇上下文處理器組織XACML請求,其中請求的資源是此服務的所有服務實例,發(fā)送至策略判定點,由其根據(jù)路由選擇策略選擇恰當?shù)姆諏嵗戏祷亟o路由選擇上下文處理器,進入步驟14;
(14)訪問控制上下文處理器返回服務拒絕訪問結果給策略執(zhí)行點,或者,路由選擇上下文處理器根據(jù)服務質量選擇最優(yōu)的服務實例,并返回服務實例URI給策略執(zhí)行點。
服務集成總線的策略服務涵蓋了兩種類型的策略,訪問控制策略和路由選擇策略。策略服務是基于屬性的,可以從可細可粗的粒度對策略進行定義,使得服務集成總線的管理行為更加靈活。采用XACML描述策略有其獨特的優(yōu)勢,除以上介紹的特點之外,XACML天生就是一種訪問控制策略,而且利用它良好的擴展特性,我們在服務集成總線中采用XACML描述路由選擇策略,并取得初步成果。
在討論服務集成總線的策略之前,首先要區(qū)分服務與服務實例兩種資源。服務資源是指由服務管理方注冊到注冊發(fā)現(xiàn)服務的資源,一個服務資源一旦被注冊成功,僅僅意味著此服務可以被服務請求方看到。而服務實例由服務管理方發(fā)布到注冊發(fā)現(xiàn)服務,一個服務實例資源一旦被發(fā)布成功,意味著此服務實例可以被服務請求方真正的訪問到。簡言之,服務與服務實例是一種父與子、描述與實現(xiàn)、注冊態(tài)與運行態(tài)的關系。
現(xiàn)在創(chuàng)建一個完整的策略描述示例,包括訪問控制策略描述與路由選擇策略描述兩部分。
訪問控制策略工作在服務層,決定主體能否訪問服務資源。考慮這樣一個訪問控制策略,它的自然語言描述是“Any user in NCI may access Weather Report between 8 o'clock and 18 o'clock”,在這個策略中包含了用戶、服務資源、動作、環(huán)境4個要素,其中用戶的工作單位屬性值是NCI,服務資源的服務標識屬性值是 Weather Report,動作的類型屬性值是access,環(huán)境的時間屬性是8:00-18:00。在使用XACML描述此策略時,要先定義出策略所用到的屬性,包括用戶的工作單位屬性、服務的服務標識屬性、動作的類型屬性以及環(huán)境的時間屬性。此策略適用于NCI中的用戶和Weather Report資源,我們將其設為Policy的Target,以資源Target為例詳細描述,如圖5所示。Resource元素包含一個ResourceMatch元素,Resource-Match元素可以看作是一個返回真假值的函數(shù),函數(shù)的有兩個參數(shù),一個參數(shù)是Policy中定義的屬性值,另一個參數(shù)需要通過AttributeDesignator方式從Request中獲取,它是根據(jù)屬性id和屬性值的類型去獲取對應的值。此處的函數(shù)是string-equal,它比較以上兩個字符串參數(shù)并返回真假值,如果為真,需要繼續(xù)檢測其他Target以判斷Policy是否適用此Request,如果為假,則說明Policy不適用此Request。
路由選擇策略工作在服務實例層,決定了用戶可以訪問的最佳服務實例資源??紤]這樣一個路由選擇策略,它的自然語言描述是“A user intends to access the service instance deployed in the same city”,在這個策略中包含了用戶、服務實例資源、動作三個要素,其中動作的類型屬性值是access,規(guī)則適用的條件是用戶的地點屬性值與服務實例的部署地點屬性值一致。路由選擇策略的XACML描述與訪問控制策略只是在資源元素上有服務與服務實例的區(qū)分,其余都基本一致,不再贅述。但是與訪問控制請求僅包含單個服務資源不同,路由選擇請求可以包含多個服務實例資源,通過決策獲取最優(yōu)的服務實例。路由選擇請求詳細描述如圖6所示。在Request中包含兩個服務實例資源instance1和instance2,如果用戶身處北京,他將訪問到服務實例instance1,如果用戶身處上海,他將訪問到服務實例instance2。
傳統(tǒng)的策略庫,有的是文件系統(tǒng)中的策略文件庫,有的依托于關系型數(shù)據(jù)庫或半結構化數(shù)據(jù)庫。但大部分情況都只是將策略堆放在庫中,導致對請求的判定需要遍歷所有策略。以提高策略判定效率為目標,我們設計了一個基于屬性與策略雙向關系的策略庫模型,如圖7所示。
圖7 改進的策略庫模型
在改進的策略庫模型中不僅存儲了策略信息,也存儲了屬性信息以及兩者之間的關系信息。策略庫的根節(jié)點下包括屬性和策略兩類元素,其中屬性元素是屬性存儲信息的根節(jié)點,策略元素是策略存儲信息的根節(jié)點。一方面,策略的存儲按訪問控制策略和路由選擇策略分類存儲,策略不但存儲著策略自身的信息,而且也存儲著此策略涉及的屬性標識集合。另一方面,在服務化的計算環(huán)境中,考慮更多的是用戶、服務和服務實例三種元素,所以將屬性分為用戶屬性、服務屬性、服務實例屬性以及環(huán)境屬性四類。以用戶屬性為例,用戶屬性是用戶屬性1、用戶屬性k……用戶屬性n的集合。對于單個的用戶屬性k,又包含用戶屬性源數(shù)據(jù)和屬性涉及策略兩類信息。源數(shù)據(jù)包含屬性值的數(shù)據(jù)類型、數(shù)據(jù)取值范圍以及屬性描述信息。屬性涉及策略是指包含此屬性的策略,細分為訪問控制策略和路由選擇策略兩類,在這兩類節(jié)點下存儲的只是策略標識,而不是策略的完整信息。
策略執(zhí)行點根據(jù)已知屬性獲取組織XACML請求所需要的屬性集,策略管理點分別提取用戶標識屬性、服務或者服務實例標識屬性和已知屬性下的私有策略,并且提取環(huán)境屬性下的公有策略。這兩者組成的策略集是適用于此請求判定過程的優(yōu)化策略集合,而且策略管理點將服務或服務實例標識、策略集、屬性集以及三者間的關系緩存起來,提高了策略判定的效率。
我們采用 Apache Axis2作為服務開發(fā)框架,結合OpenID4Java、OpenDS2.2、sunxacml2.0等開源工具初步實現(xiàn)了服務集成總線中基于屬性的策略服務的原型系統(tǒng)。
為簡化服務中介對策略服務的使用,基于屬性的策略服務利用Axis2發(fā)布成Web服務的形式,它的接口定義為:
其中REQCLS定義如圖8所示。
圖8 REQLCS定義
策略服務中的訪問控制上下文處理器與路由選擇上下文處理器分別作為Axis2的Handler存在,Handler解析策略執(zhí)行點發(fā)送過來的SOAP消息,提取用戶、服務等信息,并通過調用擴展的sunxacml2.0使其形成的標準XACML格式的判定請求能夠包含多個服務實例資源;對sunxacml2.0進一步擴展,使策略判定點具有同時對單個請求中多個服務實例資源判定的能力,具有在單個響應中包含多個服務實例資源判定結果的能力;借助于OpenID4Java實現(xiàn)了策略信息點的用戶信息獲取模塊,通過分別調用注冊發(fā)現(xiàn)服務接口與監(jiān)控服務接口實現(xiàn)了策略信息點的服務或服務實例信息獲取模塊和環(huán)境信息獲取模塊;依據(jù)XACML標準,實現(xiàn)策略管理點,具有基本的策略定義功能;基于改進策略庫模型的半結構化特性,采用OpenDS2.2與本地策略文件相結合的方式存儲策略和屬性信息,大大提高了策略與屬性的查找效率。
基于傳統(tǒng)策略庫模型和改進策略庫模型分別進行策略判定實驗,策略判定遵循sunxacml2.0的約定,對每個請求,策略庫中只能有一個策略是適用的。實驗結果如圖9所示,由于基于傳統(tǒng)策略庫模型的策略判定需要遍歷策略庫中的所有策略文件,其判定用時隨策略庫文件總數(shù)的增長而線性增長;而基于改進策略庫模型的判定將策略與屬性的關系信息存儲在OpenDS中,并且對策略標識屬性建立索引后,大大加快了策略的查找速度,這樣雖然策略庫文件總數(shù)增長,但策略判定用時基本保持不變。
圖9 基于策略庫模型的判定實驗
本文在面向服務的計算環(huán)境中對服務集成總線提出了一套基于屬性的策略服務,旨在提高服務集成總線的中介能力。策略服務中包含訪問控制策略和路由選擇策略,并創(chuàng)新性的使用XACML描述路由選擇策略。本文提出了改進的策略庫模型,通過存儲策略與屬性的雙向關系達到提高策略判定效率的目的。在未來的工作中,需要進一步擴展路由選擇策略對服務質量屬性的支持,使其能夠描述更為通用的服務質量。策略服務考慮引入SAML等安全協(xié)議的支持[10],以保證內部各模塊之間通信的安全性。另外,策略庫模型需要時間與實踐的考驗,進一步對其進行優(yōu)化也是以后工作的重點之一。
[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).[謝繼暉,白曉穎,陳斌,等.企業(yè)服務總線研究綜述[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,F(xiàn)ENG 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統(tǒng)一策略的訪問控制服務研究與實現(xiàn)[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的應用服務注冊中心的設計與實現(xiàn)[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.