專利名稱:適用于存儲云內的數據隔離方法
技術領域:
本發明提出了一種為存儲云上的數據提供隔離服務的方法,并在以HDFS(HadOC)P Distributed File System)為基礎架構的云存儲環境下實現了數據隔離的安全機制。本發明的技術領域:
涉及強制訪問控制,分布式存儲。
背景技術:
云計算作為一種新興的技術和商業應用模式,近年來無論在業界還是學術界都獲得了廣泛的關注和巨大的推動。云計算為企業用戶展現了美好的愿景。一方面,企業可以將其IT基礎架構的管理和維護交由專業的云服務提供商負責,從而更加專注于公司本身的業務;另一方面,也是更為重要一點在于云計算提供的服務是自適應性的,具備靈活的可伸縮性。企業可以根據自身業務需求量大小租賃相應負載的云服務,不會因為公司業務需求量不足造成現有IT資源的浪費,也不會因為公司規模擴大導致舊有IT架構無法負載更大的業務量需求而需要花費昂貴的代價重新架構其IT基礎設施。
云計算的模式獲得了巨大的成功,但研究人員對于其的關注往往多集中于如何提高云平臺的可用性、可擴展性、效率性能以及容錯性等,卻忽視了云平臺的安全性。事實上, 實現安全可靠的云平臺是保證企業用戶從傳統模式過渡到“云模式”一個關鍵要素,這是由云本身的特點決定的。在“云時代”,公司的應用運行在遠端的云平臺上,數據也存儲在云上,云底層的IT基礎設施由云服務提供商統一管理。對于應用了云計算的企業用戶而言, 其安全界限遠遠超出了公司的防火墻以外,企業本身能夠控制的范圍是非常有限的。公司的應用及數據均涉及到公司的商業機密,一旦泄露損失難以估量,甚至可能對整個公司造成毀滅性的打擊。保證云平臺的安全性對于云計算的進一步推廣至關重要。如果無法為云平臺提供可靠的安全保障,企業用戶將很難放心的享用云帶來的巨大效益。
云存儲在云計算體系中位于IAAS anfrastructure as a krvice) —層,主要用作云平臺的存儲基礎設施。云存儲的數據安全是云安全重要的一環。云存儲出現以前,企業的數據都存儲在公司內部的數據中心。“云時代”的到來使得企業將其私有數據由內部數據中心遷移到云服務提供商統一管理的公共平臺以降低公司的運作成本。然而對于企業用戶而言,云存儲卻是一把雙刃劍。云存儲給企業帶來了收益同時也帶來了安全隱患。云存儲作為一種多租戶的數據存儲平臺,存放著來自許多企業的內部私有數據。企業用戶通過訪問這個共享的公共平臺獲取屬于自己公司的數據。由于云存儲平臺共享的特點,企業絕不希望自己的數據信息被同一平臺上的其它租戶竊取或者篡改。因此企業間的數據隔離是云存儲亟待解決的一個重要問題。企業用戶依據內部的安全需求需要對來自公司不同部門或者地域的數據進行隔離。云存儲作為公共的存儲平臺,應該提供一種靈活多變的安全策略,它能夠方便被使用云存儲的企業用戶定制以滿足各個企業不同的安全需求。這也對云存儲企業內的數據隔離提出了要求。
以下是目前可查到的與云存儲或分布式存儲數據隔離或者訪問控制相關的專利情況。[0006] 公開號為102014133A,發明名稱“在云存儲環境下一種安全存儲系統的實現方法” 的專利提供了在云存儲環境下一種安全存儲系統的實現方法,其特征在于在服務器中根據用戶需求建立信任域,在其中利用公鑰基礎設施PKI進行身份認證,利用用戶空間的文件系統FUSE,實現了存儲系統與底層系統無關,利用哈希算法SHAl算法以塊為單位對文件計算哈希值,再利用密鑰和對稱加密算法AES算法對以塊為單位對文件塊加密,再將文件密文上傳到云存儲區中的文件服務器,保證了文件的機密性和完整性,文件所有者通過在訪問控制列表中指定具有對該文件進行訪問的用戶及其權限,在發生權限撤銷操作時,將對文件進行重新加密的操作推遲,只有當用戶對文件內容進行修改時,由該用戶重新加密修改內容所在的文件塊,系統實行了文件塊密鑰、安全元數據文件密鑰和信任域服務器密鑰三層密鑰管理,既保證了權限撤銷時文件的安全性,又不增加系統的管理負擔。
此專利的側重點在于保護云存儲上數據的機密性和完整性,實現機制是主要是通過加密算法保護數據機密性,通過哈希值來保證數據完整性,其中也粗略的提到了簡單的數據訪問控制機制,數據保護的粒度較粗。不同的是,本發明的訪問控制安全策略是有針對性的,根據云存儲這種多租戶的特殊環境制定了一系列相關的安全策略,通過強制訪問控制機制,極大的保證了企業間數據的強隔離性,企業內部數據的適度隔離,并進而考慮企業數據共享的情況。可以說兩者得安全目標是截然不同的。
公開號為102006300A,發明名稱“一種云存儲數據加密方法、裝置及系統”的專利涉及一種云存儲數據加密方法、裝置及系統,所述方法包括根據預置時間內預期存儲數據量X,本地存儲空間占用比例R及數據安全級別Z計算出應生成隨機種子的大小H ;根據每次明文數據量Y計算出對隨機種子采集的次數u ;按次數u對生成的H大小隨機種子多次采集數據生成明文加密位標識數據串;利用該數據串選擇二分之一以上明文數據加密形成密文。此發明還提供了一種云存儲數據加密裝置及系統。此發明在不犧牲數據安全性前提下,減少了待存儲數據的加密數量,大大提升了云存儲數據的存儲速度。
此專利屬于云存儲安全領域,但其關注點仍在云端數據的私密性。通過提出云存儲的數據加密方法和裝置,在保證系統性能的大前提下提升數據的安全性。它同本發明的保障云存儲多租戶環境下數據隔離的安全目標是截然不同的。
公開號為101316273,發明名稱” 一種分布式安全存儲系統”的專利目的在于克服現有基于證書的安全存儲系統中安全管理器負載重,用戶權限管理復雜的問題。此發明包括連入網絡的應用客戶端、存儲設備、安全與策略管理器和元數據服務器;安全與策略管理器存儲并管理全系統的訪問控制項、訪問控制策略和規則,依據全系統訪問控制項、訪問控制策略和規則對存儲設備進行訪問策略控制和權限控制,包括改變訪問控制項的優先級和繼承規則、添加和刪除訪問控制項。
此專利提出了一種主/從式的安全存儲架構,通過成員或者角色的訪問控制項來控制主體對數據資源的訪問。同本發明類似,其實現針對的對象亦是主/從式的存儲架構。 不同的是此專利側重于安全存儲架構的設計,僅通過較為簡單的自主訪問控制列表來保障分布式存儲的數據安全。本發明在此基礎上更進了一步,主要面向云存儲多租戶的復雜環境,通過制定了一套靈活通用的強制訪問控制安全策略來實現預定的數據隔離安全目標, 具備環境直接針對性和更多的安全保障性。
公開號為101605137,發明名稱“安全分布式文件系統”的專利提出了一種安全分布式文件系統設計,包括 認證服務器、元數據服務器、對象存儲設備和客戶端,認證服務器用于驗證用戶身份,并向通過驗證的對應用戶提供用以請求訪問文件的目錄票據和第一臨時會話密鑰;元數據服務器根據接收的目錄票據和利用所述第一臨時會話密鑰加密的訪問請求,向對應用戶提供用以請求訪問文件的文件票據、頭文件和第二臨時會話密鑰;對象存儲設備根據接收的文件票據和利用第二臨時會話密鑰加密的訪問請求,向對應用戶發送密文文件,客戶端利用第一和第二臨時會話密鑰加密對應的訪問請求以及通過頭文件來解密密文文件供對應用戶讀寫。本發明可以對用戶的文件訪問提供安全有效的保障。
此專利側重整套安全存儲架構的設計,其核心思想使用的是票據,通過認證服務器認證頒發認證票據,通過元數據服務器決策頒發文件訪問票據,最后使用文件訪問票據訪問存儲設備上的數據。然而此專利完全沒有關注與訪問控制相關決策的策略,即元數據服務器如何做出訪問控制決策。
發明內容
本發明針對云存儲這樣一個多租戶的存儲環境,就其數據隔離問題,提出了相應的安全解決方案。云存儲數據隔離的安全目標簡單來說是為了保證存儲在云間的數據只能被授權的企業用戶訪問,而無法被惡意的用戶訪問或者篡改。
本發明提出了一套云存儲系統安全訪問控制服務,通過基于安全標簽的強制訪問控制策略為企業用戶提供了數據隔離服務。本文針對云存儲的特殊環境,以RBAC(Role based Access Control)為基礎,結合組織標簽和多種安全屬性的邏輯組合,提出了一種靈活的訪問控制策略,一方面能夠保證云端不同企業間數據的強隔離性,使得企業用戶無法越權去訪問其它企業用戶的數據;另一方面該策略能夠保證云存儲企業內部數據的適度隔離,企業用戶可以根據公司自身的安全需求靈活定制企業內的訪問控制策略,隔離來自不同部門和地域的數據;最后該策略通過虛擬組織的概念在企業間數據強隔離的情況下實現了可能的數據共享,并通過中國墻策略保障同一沖突集中的企業是不能共享數據的。本文提出的策略遵循通用性原則,適用于公有云,私有云以及混合云。
本發明的技術方案為
一種適用于存儲云內的數據隔離方法,其步驟為
1)根據租戶的安全需求,在存儲云系統主節點中建立該租戶安全策略配置,其包括主體層次化的角色模型和客體層次化的Tag模型,角色模型中的角色權限包括讀權限、 寫權限、執行權限;
2)在存儲云系統主節點中創建屬于該租戶的主體用戶,并為主體用戶打上該租戶角色模型中的角色標簽;
3)在存儲云系統主節點中將某租戶的主體用戶創建的客體資源上,打上該租戶 Tag模型中的Tag標簽;
4)根據訪問客體資源的角色權限,設置角色主體對訪問資源客體的安全訪問策略并將其存儲到存儲云系統的主節點中;所述安全訪問策略為
a)對于主體對客體的讀訪問,要求主客體所屬租戶一致,并且存在賦予主體的角色k,使得角色k的讀權限表達式在客體標簽為真的情況下計算結果也為真;
b)對于主體對客體的寫訪問,要求主客體所屬租戶一致,并且存在賦予主體的角色k,使得角色k的寫權限表達式在客體標簽為真的情況下計算結果也為真;
c)對于主 體對客體的執行訪問,要求主客體所屬租戶一致,并且存在賦予主體的角色k,使得角色k的執行權限表達式在客體標簽為真的情況下計算結果也為真;
5)主節點根據所述安全訪問策略,判斷角色主體對訪問資源客體的訪問是否通過,如果通過則允許訪問,否則拒絕訪問。
進一步的,所述主體角色模型為一具有角色繼承關系的層次化標簽森林,每一標簽具有一角色權限。
進一步的,所述客體層次化的Tag模型為一具有繼承關系的層次化標簽森林。
進一步的,所述主節點采用XML文件存儲所述安全策略配置;采用字符串形式表達所述角色權限表達式。
進一步的,所述主節點中設置一哈希表結構的安全配置池,其中,鍵為租戶名稱, 值包括哈希表結構的角色配置池、標簽配置池;所述角色配置池的鍵為角色名稱,值為角色對象;所述標簽配置池的鍵為標簽名稱,值為標簽對象;角色對象通過父指針指向其在所述角色模型中的父節點;標簽對象通過父指針指向其在所述Tag模型中的父節點;主節點根據輸入的租戶信息、以及主體角色名或客體標簽名,利用所述安全配置池查找角色對象或標簽對象。
進一步的,所述主節點判斷角色主體對訪問資源客體的訪問是否通過的方法為 主節點將字符串形式表示的角色權限表達式轉化成后序表達式樹,然后根據給定表達式變量值,利用權限表達式樹計算出決策結果。
進一步的,所述主節點采用鏡像文件和操作訪問日志持久化所述安全策略配置。
進一步的,角色主體對訪問資源客體進行訪問的方法為
1)角色主體向主節點發送要訪問的文件名,訪問的文件偏移量以及要訪問客體資源的數據長度;
2)主節點為該角色主體生成訪問票據并用集群內共享的密鑰對票據進行加密,然后將該角色主體要訪問的數據塊的標識及其所在數據節點的位置,以及加密后的訪問票據發送給該角色主體;
3)該角色主體對于每一個數據塊,選擇具有該數據塊且距離該角色主體最近的數據節點,發送該數據塊標識和訪問票據,請求訪問該數據塊;
4)數據節點使用集群內共享的密鑰解密訪問票據,判定該角色主體是否有權限訪問相應的數據塊,如果允許訪問,則向該角色主體回送數據塊的數據,否則拒絕訪問。
進一步的,所述訪問票據包括角色主體的標識符、角色主體要訪問數據塊的數據塊標識以及訪問的具體操作。
進一步的,對于寫訪問操作首先,角色主體遠程調用主節點的create方法,開始新文件的創建,主節點采用租約方法為新創建的文件增加排它鎖;然后角色主體遠程調用主節點的addBlock方法,主節點在接收到addBlock請求后會返回給角色主體一個 LocatedBlock對象,其包括新建數據塊的標識以及能夠寫入數據塊的數據節點;最后,角色主體遠程調用主節點的complete方法,完成新文件的創建。
云存儲作為一個多租戶共享的存儲基礎架構,存在著自身安全的復雜性和特殊性。由云服務提供商所管理的公有云存儲上存放著來自不同企業組織的私有數據,而由企業自身負責管理維護的私有云存儲上也存放著來自企業不同部門的私有數據,這些不同的企業組織之間,以及企業內部的不同部門之間就構成了云存儲的多租戶。無論是來自不同企業之間的數據,還是來自公司內部不同部門的數據在公共的存儲環境上都需要被安全的隔離,以保證來自不同租戶數據的私密性。因此,不論是公有云或者是私有云,亦或者是兩者構成的混合云,都需要有一定的安全的和排他的虛擬存儲環境。這樣才能夠保證存放在云上的數據的安全性,才能夠促進云的進一步推廣和應用,本策略正是基于此而提出的。
安全策略設計的目標如下
1.企業之間數據的強隔離性。對于公有云存儲而 言,云服務提供商必須要嚴格保障來自不同公司的數據被安全的隔離。公有云上存儲著來自許多不同企業的數據,同時使用同一云服務提供商服務的某些企業之間甚至是同一塊市場的激烈競爭者。一個企業內部的私密數據對其而言是重要的生命線,一旦泄露后果不堪設想,因此必須嚴格的保障企業和企業間數據的強隔離性。
2.靈活的企業內部數據隔離。無論對于存儲在公有云上來自同一企業不同部門的數據,還是存儲在企業內部私有云上的不同部門的數據,都需要進行一定程度的安全隔離。 企業的每一個部門有自身的職責劃分,它們分管企業某一塊任務拼圖的運作,比如生產部負責產品的制造,人事部負責人才的招聘和管理,以及財務部負責公司的收入和支出管理。 根據系統安全的最基本原則”最小特權原則”,安全的系統一方面應該給予主體必不可少的權限,保證所有的主體都能夠在賦予的權限之下完成所需要的任務和操作,另一方面也只給予主體必不可少的權限,這樣就能夠限制每個主體所能進行的操作,確保蓄意或者不小心越權造成的錯誤和事故導致的損失最小。因此不同部門間的數據也是需要進行一定程度的安全隔離以保證最小特權原則。因為公司內部部門存在著一定的協作關系,部分數據的共享在所難免,它們之間數據隔離應當具備適當的靈活性,不應當使用企業之間數據的強隔離特性。
3.企業之間數據共享的情況。當企業之間有協作關系時,也會存在著一定數據共享的情況。如果雙方企業都使用云作為存儲平臺,那么公有云存儲可以成為公司間數據共享的很好媒介平臺。企業的應用可以在不用改變數據訪問的接口的情況下直接去訪問存儲在云上的另一個企業的數據。然而企業間數據的共享需求和企業間數據的隔離需求存在著很大程度的矛盾和沖突。需要有一種機制能夠在保障企業間數據強隔離的情況下,完成企業數據的共享。另外一些企業是同一塊市場的激烈競爭者,如中國移動和中國聯通,中國石油和中國石化。這些公司由于雙方利益存在很大的沖突,它們可能不希望與競爭對手共享數據,應當有相關的機制防止誤操作或惡意操作導致它們之間數據的共享。
策略設計原則
本發明提出的安全策略基于如下的設計原則
1.通用性。無論是多個企業共享的公有云,還是企業內部使用的私有云,或者是公有云和私有云構成的混合云,它們都存在著多租戶數據隔離的安全需求,因此安全策略應該是通用的,能夠適用于各種不同的云環境。
2.靈活性。各個企業存在著自身不同的安全需求,因此存在多租戶的云存儲上的安全策略應當是靈活的,能夠適用于各個公司不同的情況。企業用戶可以根據自身的安全需求靈活的定制安全策略,實現其安全目標。[0048]3.層次性。此安全策略是主要針對企業用戶設計的。大部分企業的劃分具有一定的層次性,安全策略中主體和資源客體的屬性應該能夠體現出企業的這種層次的特性。
具體策略描述
本發明所設計的安全策略是基于RBAC模型的,它實現了文中描述的安全目標,提供了云存儲的數據隔離服務。策略的核心是基于主客體安全標簽的強制訪問控制。本節分為三小節,分別描述主體的安全標簽設計,客體的安全標簽設計以及基于主客體安全標簽的訪問控制規則。文中所指的組織,企業,公司,租戶均可認為是同一概念,只是在不同的應用場景中使用。
1>主體安全標簽
層次化的角色模型
RBAC模型預先定義了一組具備相應權限的角色(role),在遵循最小特權原則的基礎上為相關用戶賦予相應的角色。給用戶賦予角色的過程實際上也是為用戶賦予一定權限的過程。擴展的RBAC模型更具備靈活性,角色和角色之間可以存在繼承的關系。角色繼承的意義主要在于不用重復定義一些已經定義過的角色的權限,而是可以通過繼承的方式自動承接所有祖先節點的角色權限,在此基礎上進行角色權限的特定擴展。圖1顯示了三組定義好的角色繼承的層次樹結構。可以稱作角色的森林。
主體安全標簽定義
由于每個公司有不同的安全需求,因此其也會有不同的角色定義的需求。因此這里允許每個公司擁有自己不同的角色定義的森林。為了區分不同公司的角色定義,需要在資源訪問的主體安全標簽內加上特定公司的標簽。一方面它可以區分不同公司的角色森林,另一方面它也可以實現公司間數據的隔離,關于這一點將在后面說明。
云存儲中資源訪問的主體標簽如下
〈org” role” role2,role3,. . .,rolen> 或〈org,role list>
圖2的示例進一步說明了主體標簽的角色定義。
2>客體安全標簽
層次化的標簽模型
使用標簽(Tags)來對資源訪問的客體進行標識。如果采用Web上常用的平面標簽模型,確實它非常的靈活,但卻存在兩方面的問題。首先由于它的平面結構,它無法表達公司或者組織內部的層次化機構,這點對于公司而言是很不合理的;其次由于在標簽定義上沒有控制,很容易造成標簽定義爆炸,會定義大量語義相同然而名字不同的標簽,給整個系統的維護和運作帶來困難。因此我們決定在此基礎上對其進行改進,將平面的標簽模型進行擴展成為層次化的對象標簽模型。
層次化的對象標簽模型應用場景如下首先由公司內部的高層管理人員根據公司需求,按照不同的準則(如地域,部門等)對公司進行具體劃分,這樣就能構成由很多樹構成的森林,樹上的每一個節點即代表了這個公司內部的一個可控的標簽。通過這種方式,大大限制了系統中存在的標簽個數,并且很好的表達出了公司內部的層次化的結構。在層次化的標簽模型中,子節點相當于自動繼承了其祖先節點的標簽,因此也就擁有多個標簽。
圖3說明了這種層次化的標簽模型,可以稱作標簽的森林。
客體安全標簽定義[0065]同主體的安全標簽類似,每個公司也會針對于自身的安全需求來創建自己專屬的不同的標簽森林。在客體的標簽上需要對不同公司的標簽進行區分,當然這也是保證公司之間數據隔離的需要。
云存儲中資源訪問的客體標簽如下
〈org” tag” tag2, tag3, . . . , tagn> 或 <org, tag list)
圖4進一步說明了客體標簽的定義。
3>訪問控制規則
角色的權限定義
由于系統的強制訪問控制是基于RBAC的,RBAC中的角色脫離了權限的定義是無意義的,本小節主要對角色權限進行了定義。根據客戶在云存儲的訪問需求,這里為每個 role分別制定相應的讀(R),寫(W)以及執行⑴權限,即為role (permr, permw, permx)。
權限定義針對云存儲上的文件和目錄的概念是不一樣的,如下所示
1>針對普通文件的權限定義
·讀權限(R)對此文件擁有讀權限
·寫權限(W)對此文件擁有寫權限
·執行權限(X)針對于云存儲的特性,執行權限不適用于普通文件。
2>針對目錄/文件夾的權限定義
·讀權限(R)可以查看此文件夾下的文件和子文件夾列表(類似于允許執行Is 操作)
·寫權限(W)可以對此文件夾下創建文件,刪除文件,修改文件名
·執行權限(X)可以進入此文件夾(類似于允許執行Cd操作)
對于讀,寫,執行權限的具體定義是一致的,都是使用客體的Tag標簽加上于 (&&),或(| |),非(!)三種邏輯運算符組合構成的權限表達式(expr)。具體定義可以用下面的表達式描述所示.邏輯運算符的優先級為非(!)>與(&&)=或(I I),從左到右計算,可以使用括號來改變權限表達式的運算次序。
1. entity: = {all available tags}.
2. predicate: = {&&,| , ! }
3. expr := entity | (expr) | / expr | expr && expr | expr | /expr
/'. expr ->
ii. expr- > entity
iii. expr- > (expr)
iv. expr- > ! expr
v. expr- > exprMexpr
vi. expr- > expr//expr
4. perm: = expr
5. role :<r:permr, w:permw, x:permx>
另外,根據之前的層次性的模型,角色還是自動繼承其祖先節點的權限,即讀權限還會擴展繼承所有祖先的讀權限,寫權限還會擴展繼承所有祖先的寫權限,執行權限還會擴展繼承所有祖先的執行權限。
訪問規則定義
訪問規則是整個策略的核心,無論是主體標簽還是客體標簽的定義都是服務于最終的訪問規則的,訪問規則才是策略的重點所在。這里針對于讀,寫,執行權限定義了三套訪問規則。
1.預備定義
Tag繼承樹定義
i> 定義 explict_tags(o)為客體標簽 <org,tag1; tag2,,· · .,tagn> 中明確定義的 tag集合。
ii> 定義 implicit_tags (ο)為 explict_tags (ο)中所有 tag 的祖先 tag 的集合。
iii> 定義 all_tags(o)為 explict_tags (ο)禾口 implicit_tags (ο)的并集。
Role繼承樹定義
i> 定義 explict_roles(s)為主體標簽 <org, role” role2, · · ·,rolen> 中明確定義的role集合。
ii> j^x implicit一roles (s)為 explict_tags (s) ^IjfW role 白勺role 白勺_
口 O
iii> 定義 all_roles(s) % explict_roles (s)禾口 implicit_roles (s)的并集。
2.訪問規則定義
1)讀訪問規則
假定有主體S和客體0,主體S能讀客體0當且僅當以下條件滿足
a) org (S) = org(0),
b) 3k e α// —m^(S),使得在all_tags (ο)中的tag變量值均為true的情況下, Permr (k)的邏輯表達式計算結果也為true (客體的所有Tag標簽決定了當前權限表達式中Tag變量的輸入值,如有客體有這個標簽,那么權限表達式中的Tag變量為true,否則為 false。這里就是說用客體所有的tag代入權限表達式的情況下,能夠使得權限表達式(這里即permr(k))計算結果為true ;即存在賦予主體S的角色R,使得permr (R)在客體Tag 變量輸入的條件下邏輯表達式計算結果為真);
即要求主客體所屬組織一致,并且存在賦予主體的角色k使得此角色的讀權限表達式(pernv(k))在客體Tag標簽為真的情況下計算結果也為真。
2)寫訪問規則
假定有主體S和客體0,主體S能寫客體0當且僅當以下條件滿足
a) org (S) = org(0)
b)使得在all_tagS(o)中的tag變量值均為true的情況下, Permw (k)的邏輯表達式計算結果也為true (即存在賦予主體S的角色R,使得permw (R)在客體Tag變量輸入的條件下邏輯表達式計算結果為真)
即要求主客體所屬組織一致,并且存在賦予主體的角色k使得此角色的寫權限表達式(pernv(k))在客體Tag標簽為真的情況下計算結果也為真。
3)執行訪問規則[0117]假定有主體S和客體0,主 體S能執行客體0當且僅當以下條件滿足
a) org (S) = org(0)
b)m^(S),使得在all_tagS(0)中的tag變量值均為true的情況下, Permx (k)的邏輯表達式計算結果也為true (即存在賦予主體S的角色R,使得permx (R)在客體Tag變量輸入的條件下邏輯表達式計算結果為真)
即要求主客體所屬組織一致,并且存在賦予主體的角色k使得此角色的執行權限表達式(permx(k))在客體Tag標簽為真的情況下計算結果也為真。
4>虛擬組織和中國墻
企業之間有時因為相互協作關系存在著數據的共享,然而企業間數據的強隔離和企業數據的共享是相悖的。為了滿足企業之間數據共享的特殊需求,這里引入虛擬組織的概念。虛擬組織指的是希望共享數據的幾個企業共同建立的虛擬的組織,在現實中是不存在的。虛擬組織也可以有自己的用戶和數據,通過為存在協作關系的企業用戶之間創建虛擬組織的用戶,并給這些企業某些私有數據打上虛擬組織的標簽,那么根據之前定義訪問控制規則便可以實現企業間數據的共享。此時,主體和共享的客體的企業屬性都是此虛擬組織,它們是匹配的,因此允許主體訪問客體資源。
某些企業用戶之間共享同一市場,之間存在著激烈的競爭關系,如中國移動和中國聯通,中國石油和中國石化。這些公司由于雙方利益存在很大的沖突,它們可能不希望和競爭對手共享數據,應當有相關的機制防止誤操作或惡意操作導致它們之間數據的共享。這里可以應用中國墻模型(參考THE CHINESE WALL SECURITY POLICY, Dr. David F. C. Brewer and Dr. Michael J. Nash),通過制定沖突集,保證同一沖突集內的企業無法建立虛擬組織。如將中國移動和中國聯通放置在同一沖突集內,將中國石油和中國石化放在另一沖突集內,這樣便可以防止它們數據的共享。
與現有技術相比,本發明的積極效果為
本發明針對云存儲的特殊環境,以RBAC(Role based Access Control)為基礎,結合組織標簽和多種安全屬性的邏輯組合,提出了一種靈活的訪問控制策略,一方面能夠保證云端不同企業間數據的強隔離性,使得企業用戶無法越權去訪問其它企業用戶的數據; 另一方面該策略能夠保證云存儲企業內部數據的適度隔離,企業用戶可以根據公司自身的安全需求靈活定制企業內的訪問控制策略,隔離來自不同部門和地域的數據;最后該策略通過虛擬組織的概念在企業間數據強隔離的情況下實現了可能的數據共享,并通過中國墻策略保障同一沖突集中的企業是不能共享數據的。本文提出的策略遵循通用性原則,適用于公有云,私有云以及混合云。
圖1層次化的主體角色模型;
(a)角色層次樹a (b)角色層次樹b (c)角色層次樹c
圖2與圖1對應的主體標簽定義示例;
圖3層次化的客體Tag模型;
(a)標簽層次樹a (b)標簽層次樹b (c)標簽層次樹c
圖4與圖3對應的客體標簽定義示例;[0132]圖5基于HDFS的安全體系結構設計;
圖6安全配置池的動態結構;
圖7權限表達式轉化為后序表達式樹示意圖;
圖8后序表達樹計算權限表達式值示意圖;
圖9基于票據的訪問控制示意圖。
具體實施方式
本發明基于Hadoop分布式文件系統(HDFS)開發了數據隔離的安全機制。分布式文件系統廣泛用作云存儲的底層基礎設施,商業化的云存儲Cloudera其底層使用正是 HDFS。使用開源的HDFS開發安全機制原型有利于對整個系統的效果評估。
圖5描繪了基于HDFS架構的安全體系結構設計。
原型系統的核心是安全決策模塊。為了判定主體是否有權限訪問資源客體,安全決策模塊需要首先獲取主客體安全標簽的信息及當前系統的安全策略。在HDFS中,文件系統的元信息存儲在主節點Namenode —端,因此安全標簽及安全策略這類安全元信息按照原有設計也應當存儲在Namenode端,并由Namenode加以管理;從安全的角度上看亦是如此。如果將敏感的安全元信息分布在集群內多個Datanode節點上,那么勢必增加安全的風險,因為整個系統需要保護的安全界限明顯的增大了,保護單節點的Namenode會比保護多節點的Datanode要簡單的多;將安全元信息放在單節點的Namenode上也便于系統的管理維護。由此可見,將系統安全元信息放在Namenode—端是良好的設計,它既遵循了原有系統的設計也便于管理維護,并且安全可靠性更高。
Namenode端的安全決策模塊在作出訪問控制判定后,需要在整個分布式的系統中實施安全決策,包括數據塊讀寫請求決策的實施。安全決策的實施是通過網絡節點的交互完成的,包括DFSClient和Namenode之間元信息交互,DFSClient和Datanode的數據流交互以及在寫數據塊過程中Datanode和Datanode之間的數據流交互。
在DFSClient端提供了一些管理命令,通過這些命令接口可以查詢修改Namenode 上的安全元信息。當然絕大數這些命令是提供給管理員的,普通用戶沒有權限使用這些命令。
下面說明各個關鍵模塊的設計與實現。
1>主客體安全標簽的設計與實現
依照HDFS的原有設計,為了保證系統的性能,文件系統的元信息都是保存在 Namenode內存中以供運行時快速訪問。因此對于需要經常訪問的主客體安全標簽這類元信息,也應當存放在Namenode內存中以防止降低系統效率。客體標簽可以存放在代表文件目錄樹節點的類INode內,但由于不存在現有的數據結構存放主體信息,主體標簽需新建數據結構保存,可以通過哈希表的索引結構存儲系統中所有的主體標簽,在需要獲取相應主體標簽時根據主體名從哈希表中獲取。
內存中的主客體安全標簽信息需要實現持久化機制以在系統斷電后長期保存。 Namenode同時采用鏡像文件fsimage和操作訪問日志edits持久化內存中系統的元信息。 鏡像文件fsimage記錄了整個文件系統的元信息,而操作日志edits則記錄運行時對元信息的更新操作。Namenode每次啟動時會首先載入鏡像文件fsimage以裝載系統的元信息,并在此基礎上重放操作日志edits中的每一條操作記錄將內存中的元信息更改至最新。在系統運行時,如果系統有操作修改了 Namenode內存中的元信息,Namenode會同時向操作日志寫入該條操作的信息,以便下次重放。系統會不定時的將內存中最新的元信息重新寫入 fsimage,并清空操作日志。通過應用操作日志的方法,Namenode可以避免每次系統元信息更新都需要重新寫入整個系統元信息鏡像以防止系統異常崩潰導致的元信息更新丟失,同時還可以減少系統I/O保證性能。因此通過鏡像文件fsimage和操作日志edits部分的代碼修改來實現主客體安全標簽的持久化/非持久化。
2>系統安全策略的設計與實現
安全策略是另一類需要經常訪問的信息。每個組織均可根據內部安全需求建 立特有的主體角色模型和客體標簽模型,存放在以xml文件表示的安全策略配置文件中。XML層次化的格式使得它能夠很好的適應這種角色。安全策略配置文件中描述了每個組織特有的角色層次樹和Tag層次樹,并為組織內所有角色定義了以字符串形式表達的讀,寫以及執行所要求的權限表達式。
系統在初始化時載入所有企業用戶的安全策略配置以提升運行時效率。在 Namenode內存中為每個企業維護一個Role配置池(RolePool)和一個Tag配置池 (TagPool),其中的Role對象和Tag對象即保存了企業用戶相關的安全策略配置。在系統運行時刻,如果主體需要引用Role標簽或客體需要引用Tag標簽,可以直接通過安全配置池快速獲取,而不用反復讀取安全配置文件進行耗時的I/O操作。
圖6描述了安全配置池在內存中的動態結構。
安全配置池通過兩級索引可以快速定位到具體的Role對象和Tag對象。 Organization Pool為每個組織維護一個配置池,使用的是哈希表的索引結構,其主鍵為組織的名字(orgName),值包含Role配置池(role pool)和Tag配置池(tag pool)。Role配置池和Tag配置池同樣使用的是哈希表結構。Role配置池的鍵為角色的名字,值為角色對象(Role Object)。Tag配置池的鍵為Tag的名字,值為Tag對象(Tag Object)。Role對象使用parent指針指向在角色模型中的父親節點,Role對象通過parent指針這種相互引用的關系形成了一種層次性的結構,但并不是所有的Role都有這種祖先后輩的聯系。從最上層看就形成了一片Role對象的森林。對于Tag對象也一樣,Tag對象使用parent指針相互引用最終也形成了一片Tag對象的森林。
組織內的主體用戶可以由該組織的管理員創建,主體的組織標簽取決于創建它的管理員所屬的組織,即某組織管理員創建的主體用戶都隸屬于該組織,該管理員不能創建其它組織的用戶;客體資源的組織標簽由創建客體的主體用戶決定,即某組織的主體用戶創建的客體資源默認屬于該組織所有。組織管理員可以為組織內的主體用戶增加角色標簽,亦可為組織內的客體資源增加Tag標簽,前提是該角色標簽和Tag標簽都在該組織的安全配置中有定義。在組織管理員為主體或客體執行增加角色標簽或者Tag標簽時,系統可以根據管理員用戶所屬的組織信息以及管理員提供的主體角色名或客體Tag名快速通過兩次哈希表的查找操作迅速定位到相應的Role對象或者Tag對象,并且這些Role對象和 Tag對象已經通過parent指針形成了樹形的層次性結構。這樣可以避免系統在運行時反復的讀寫安全策略配置文件,減少I/O操作,極大提高系統的性能。
3>安全決策模塊的設計與實現[0153]安全決策模塊的作用在于判定給定主體是否有權限訪問給定的客體。由于角色權限的定義是由Tag標簽變量和邏輯運算符所組成的邏輯表達式,如何在給定客體Tag集合的情況下高效的計算出權限邏輯表達式的值是非常關鍵。云存儲系統在同一時間內需要負荷來自不同公司的成千上萬的客戶的訪問,而權限判定是客戶在訪問每一個文件的時候都必須通過的,如果權限判定不夠高效,一方面會降低客戶端的訪問速度,另一方面也由于服務器的負載增大導致單位時間內可以訪問云存儲的客戶數量減少。因此訪問控制決策判定的性能是非常重要的。
為了把服務 性能的損耗降低到最小,項目原型在Hadoop分布式文件系統初始化的時候將所有角色以字符串形式表示的權限表達式轉化成后序表達式樹這種中間形式。在系統運行時,HDFS可以直接根據權限表達式樹很快計算出決策結果,而不用再對權限表達式做字符串分析。這樣一方面可以減少運行時客戶訪問文件系統的時間,提升系統的性能; 另外一方面也可以避免同一角色在訪問不同文件時反復對相同權限表達式進行分析,避免重復工作。
權限表達式計算的算法思想如下
1>系統初始化時動作
把角色權限定義的邏輯表達式轉化為以表達樹形式描述的后序表達式(Postfix representation,又稱逆波蘭序),見圖7。
2>系統運行時動作
在給定表達式變量值(即Tag標簽值)輸入的情況下,通過內存中的后序表達式樹快速計算
權限表達式的值,見圖8。
4>安全決策的實施
讀請求的安全控制
根據電影票售票模式,HDFS可以采用類似的安全實施方式,稱為”基于票據 (Ticket)的訪問控制”。客戶端在訪問Namenode以獲取數據塊的位置信息時,Namenode 會首先進行根據主客體的安全標簽相關安全決策判定,如果通過的話則會為客戶端生成一個包含了訪問決策的票據。客戶端在訪問Datanode上的數據時需要向Datanode出示 Namenode授予的票據才能夠正常的訪問數據。為了防止惡意的客戶端對票據進行偽造和篡改,Namenode使用和所有Datanode共享的一組密鑰對其進行加密,因此只有Datanode才能夠解密票據查看其中的訪問決策,從而判定當前的客戶端是否有權利訪問相關的數據塊。
根據HDFS客戶端的訪問流程,在加上了基于Ticket的訪問控制之后框架圖如圖 9所示
加粗的部分即是修改了 HDFS網絡通信的部分,主要是傳遞新增加的票據信息,其它的部分均是HDFS原本存在的部分。整個流程如下所述
1. Client-> Namenode:〈filename, offset, length〉
客戶端向Namenode發送要訪問的文件名(filename),訪問的文件偏移量以及要訪問的數據的長度(length)。
2 . Namenode -> Client: multiple<block handle, block locations>+AccessTicket[0169]Namenode在判定客戶端對文件的訪問權限通過之后,生成訪問票據并用集群內共享的密鑰對票據進行加密。Namenode向客戶端返回其要訪問的多個數據塊的標識(block handle)以及它們所處的Datanode的位置(block locations),最后是附加的加密后的訪問票據。
3. Client-> Datanode:〈block handle, AccessTicket>
客戶端在獲取了數據塊的具體位置以及訪問票據之后,對于每一個數據塊選擇離它最近DataNode,向其發送客戶端要訪問的數據塊標識(block handle)和訪問票據 (AccessTicket),請求訪問數據塊。由于訪問票據被加密過了,客戶端是不能隨便篡改其中的內容的。
4. Datanode -> Client: block stream
Datanode取得AccessTicket之后,使用集群內共享的密鑰解密AccessTicket判定當前客戶端是否有權限訪問相應的block。如果允許訪問,則向client回送數據塊的數據,否則拒絕客戶端的訪問。
AccessTicket包含了安全決策的信息,是由Namenode生成,之后通過Client轉發給Datanode,其定義如下
AccessTicket = E{user-id, <file block IDs>, op}secret
訪問票據包括訪問資源主體的標識符(user-id),主體要的所有的block id file block IDs ,以及訪問的具體操作(op)。為了防止客戶端篡改Ticket,Ticket 使用HDFS集群內共享的一組密鑰(secret)加密。
寫請求的安全控制
HDFS 0. 18版本只支持創建寫操作(create),文件一旦創建成功后就不能再被修改,這樣也部分簡化了寫請求安全控制的工作量。
客戶端在分布式文件系統上創建新的文件時,遵循如下步驟
1.客戶端(即租戶的主體用戶,角色主體)開始新文件的創建
DFSClient -> Namenode: void ClientProtocol. create (...)
客戶端通過rpc遠程調用Namenode實現的create方法,開始新文件的創建。 Namenode采用了一種稱為租約(Lease)的方法,為新創建的文件增加排它鎖。除了啟動文件創建的用戶可以訪問此文件外,其他用戶是不能訪問文件的。此時尚未完成創建的文件在 Namenode 內存中以 INodeFileUnderConstruction 對象表示。
2.客戶端寫入文件的數據塊
對于每一個數據塊,執行如下操作
i> DFSClient -> Namenode: LocatedBlock ClientProtocol. addBlock(...)
客戶端rpc遠程調用Namenode實現的addBlock方法,為文件新增數據塊。 Namenode在接收到addBlock請求后會返回給客戶端一個LocatedBlock對象。此對象中包含了新建數據塊的標識,并說明了應該往哪幾個Datanode中寫入數據塊。
ii> DFSClient-> Datanode: block stream
客戶端和LocatedBlock對象中包含的Datanode之間建立起pipeline連接,通過網絡I/O流往Datanode中寫入數據塊的數據。
3.客戶端完成文件的創建[0190]DFSClient -> Namenode: void ClientProtocol. complete (...)
客戶端rpc遠程調用Namenode實現的complete方法,完成新文件的創建。 Namenode將INodeFileUnderConstruction對象轉化為正常的INodeFile對象,并解除文件上的排他鎖。
根據以上的數據寫訪問過程,HDFS的寫訪問控制不需要向讀訪問控制那樣使用基于票據的方式。由于在HDFS的Namenode端實現了基于Lease的排他鎖,其它的用戶是不能夠訪問尚未創建完成的文件的。而在文件創建完成之后就不能修改,這樣大大簡化了文件寫請求的安全控制。只需要在DFSClient向Namenode發起create遠程調用開始文件創建的時候對其進行訪問控制即可。
5>用戶命令的設計
為了方便各個組織管理員的操作,在系統的客戶端實現了相應的管理員命令。可以使用這些命令對系統用戶,用戶角色以及客體的Tag標簽進行管理。所有的這些命令都實現在Hadoop原有的FSShell中,命令說明如下
權利要求
1.一種適用于存儲云內的數據隔離方法,其步驟為1)根據租戶的安全需求,在存儲云系統主節點中建立該租戶安全策略配置,其包括主體層次化的角色模型和客體層次化的Tag模型,角色模型中的角色權限包括讀權限、寫權限、執行權限;2)在存儲云系統主節點中創建屬于該租戶的主體用戶,并為主體用戶打上該租戶角色模型中的角色標簽;3)在存儲云系統主節點中將某租戶的主體用戶創建的客體資源上,打上該租戶Tag模型中的Tag標簽;4)根據訪問客體資源的角色權限,設置角色主體對訪問資源客體的安全訪問策略并將其存儲到存儲云系統的主節點中;所述安全訪問策略為a)對于主體對客體的讀訪問,要求主客體所屬租戶一致,并且存在賦予主體的角色k, 使得角色k的讀權限表達式在客體標簽為真的情況下計算結果也為真;b)對于主體對客體的寫訪問,要求主客體所屬租戶一致,并且存在賦予主體的角色k, 使得角色k的寫權限表達式在客體標簽為真的情況下計算結果也為真;c)對于主體對客體的執行訪問,要求主客體所屬租戶一致,并且存在賦予主體的角色 k,使得角色k的執行權限表達式在客體標簽為真的情況下計算結果也為真;5)主節點根據所述安全訪問策略,判斷角色主體對訪問資源客體的訪問是否通過,如果通過則允許訪問,否則拒絕訪問。
2.如權利要求
1所述的方法,其特征在于所述主體角色模型為一具有角色繼承關系的層次化標簽森林,每一標簽具有一角色權限。
3.如權利要求
2所述的方法,其特征在于所述客體層次化的Tag模型為一具有繼承關系的層次化標簽森林。
4.如權利要求
3所述的方法,其特征在于所述主節點采用XML文件存儲所述安全策略配置;采用字符串形式表達所述角色權限表達式。
5.如權利要求
4所述的方法,其特征在于所述主節點中設置一哈希表結構的安全配置池,其中,鍵為租戶名稱,值包括哈希表結構的角色配置池、標簽配置池;所述角色配置池的鍵為角色名稱,值為角色對象;所述標簽配置池的鍵為標簽名稱,值為標簽對象;角色對象通過父指針指向其在所述角色模型中的父節點;標簽對象通過父指針指向其在所述Tag模型中的父節點;主節點根據輸入的租戶信息、以及主體角色名或客體標簽名,利用所述安全配置池查找角色對象或標簽對象。
6.如權利要求
4或5所述的方法,其特征在于所述主節點判斷角色主體對訪問資源客體的訪問是否通過的方法為主節點將字符串形式表示的角色權限表達式轉化成后序表達式樹,然后根據給定表達式變量值,利用權限表達式樹計算出決策結果。
7.如權利要求
6所述的方法,其特征在于所述主節點采用鏡像文件和操作訪問日志持久化所述安全策略配置。
8.如權利要求
1所述的方法,其特征在于角色主體對訪問資源客體進行訪問的方法為1)角色主體向主節點發送要訪問的文件名,訪問的文件偏移量以及要訪問客體資源的數據長度;2)主節點為該角色主體生成訪問票據并用集群內共享的密鑰對票據進行加密,然后將該角色主體要訪問的數據塊的標識及其所在數據節點的位置,以及加密后的訪問票據發送給該角色主體;3)該角色主體對于每一個數據塊,選擇具有該數據塊且距離該角色主體最近的數據節點,發送該數據塊標識和訪問票據,請求訪問該數據塊;4)數據節點使用集群內共享的密鑰解密訪問票據,判定該角色主體是否有權限訪問相應的數據塊,如果允許訪問,則向該角色主體回送數據塊的數據,否則拒絕訪問。
9.如權利要求
8所述的方法,其特征在于所述訪問票據包括角色主體的標識符、角色主體要訪問數據塊的數據塊標識以及訪問的具體操作。
10.如權利要求
9所述的方法,其特征在于對于寫訪問操作首先,角色主體遠程調用主節點的create方法,開始新文件的創建,主節點采用租約方法為新創建的文件增加排它鎖;然后角色主體遠程調用主節點的addBlock方法,主節點在接收到addBlock請求后會返回給角色主體一個LocatedBlock對象,其包括新建數據塊的標識以及能夠寫入數據塊的數據節點;最后,角色主體遠程調用主節點的complete方法,完成新文件的創建。
專利摘要
本發明涉及一種適用于存儲云內的數據隔離方法,屬于分布式存儲領域。本方法為1)根據組織的安全需求,在存儲云系統主節點中建立該租戶安全策略配置;2)創建屬于該組織的主體用戶,并為主體打上該組織角色模型中的角色標簽;3)組織管理員為某組織用戶創建的客體資源客體打上該組織Tag模型中的Tag標簽;4)根據訪問資源的角色權限,設置角色主體對訪問資源客體的安全訪問策略并將其存儲到存儲云系統的主節點中;5)主節點根據所述安全訪問策略,判斷角色主體對訪問資源客體的訪問是否通過,如果通過則進行訪問,否則拒絕訪問。本方法保證云存儲企業內部數據的適度隔離,策略遵循通用性原則,適用于公有云,私有云以及混合云。
文檔編號H04L29/08GKCN102307185SQ201110175541
公開日2012年1月4日 申請日期2011年6月27日
發明者吳尉瀧, 張力哲, 楊雅輝, 沈晴霓, 王丹丹, 禹熹, 龍敏 申請人:北京大學導出引文BiBTeX, EndNote, RefMan