引言
企業(yè)云存儲,又稱企業(yè)網(wǎng)盤,是基于云計算理念推出的企業(yè)數(shù)據(jù)網(wǎng)絡(luò)存儲和管理解決方案,利用互聯(lián)網(wǎng)后臺數(shù)據(jù)中心的海量計算和存儲能力為企業(yè)提供數(shù)據(jù)匯總分發(fā)、存儲備份和管理等服務(wù)。企業(yè)云存儲必須保證企業(yè)數(shù)據(jù)的安全性,包括保密性、完整性和可用性。其中數(shù)據(jù)的保密性又包括兩個方面:a)對數(shù)據(jù)進(jìn)行加密,確保非本企業(yè)的用戶(被授權(quán)的除外)以及云存儲運(yùn)營商都無法獲得本企業(yè)數(shù)據(jù)的明文;b)對數(shù)據(jù)進(jìn)行訪問控制,確保只有被授權(quán)的本企業(yè)用戶才能訪問特定的數(shù)據(jù),這也是本文研究的內(nèi)容。
目前市場上比較流行的企業(yè)云存儲產(chǎn)品有聯(lián)想企業(yè)網(wǎng)盤、網(wǎng)易企業(yè)網(wǎng)盤和115企業(yè)網(wǎng)盤等。它們的訪問控制方案基本上都是采用自主訪問控制(discretionaryaccesscontrol,DAC)和基于角色訪問控制(rolebasedaccesscontrol,RBAC)模型。但這兩種模型無法滿足企業(yè)云存儲的應(yīng)用需求,主要表現(xiàn)為:a)隨著用戶和資源數(shù)量的增長,DAC中訪問控制列表(accesscontrollist,ACL)的規(guī)模急劇增加,難以管理和維護(hù);b)若要進(jìn)行細(xì)粒度的訪問控制,必須對用戶進(jìn)行精確區(qū)分,從而使RBAC需要定義大量的用戶角色,這給角色的分配和管理帶來困難;c)它們都是靜態(tài)的授權(quán)機(jī)制,沒有考慮上下文環(huán)境對授權(quán)的影響。
基于屬性的訪問控制(attributebasedaccesscontrol,ABAC)是將相關(guān)實體(如主體、資源和環(huán)境等)的屬性作為授權(quán)的基礎(chǔ)來進(jìn)行訪問決策,它能解決復(fù)雜信息系統(tǒng)中的細(xì)粒度訪問控制和大規(guī)模用戶動態(tài)擴(kuò)展的問題,為開放網(wǎng)絡(luò)環(huán)境提供了較理想的訪問控制方案。特別地,如果將身份、角色以及資源安全密級等信息也抽象化為實體屬性,ABAC則能實現(xiàn)傳統(tǒng)IBAC(identitybasedaccesscontrol,基于身份的訪問控制)、RBAC和MAC(mandatoryaccesscontrol,強(qiáng)制訪問控制)模型的功能。
ABAC基于主體、資源和環(huán)境等實體的屬性來制定訪問規(guī)則(或策略),并依照訪問規(guī)則來進(jìn)行訪問決策,因而訪問規(guī)則的描述是ABAC研究的關(guān)鍵問題之一。XACML(extensibleaccesscontrolmarkuplanguage,可擴(kuò)展的訪問控制標(biāo)記語言)是一種基于XML的開放標(biāo)準(zhǔn)語言,它為ABAC提供了利用屬性進(jìn)行訪問控制的策略描述語言,并給出了基本的ABAC授權(quán)框架,是ABAC策略描述語言的理想選擇。但在XACML中,訪問請求和訪問規(guī)則都采用XML文件來描述,決策時由于需要解析這兩個XML文件,因而運(yùn)行開銷較大。另外,訪問規(guī)則文件中的XML標(biāo)簽很復(fù)雜,需要由專業(yè)人士編寫;趯傩缘募用荏w制是ABAC的一種應(yīng)用方式,它將數(shù)據(jù)加密和訪問控制融為一體,讓密文和密鑰分別對應(yīng)一個訪問結(jié)構(gòu)(規(guī)則)和一個屬性集合(或反過來),只有當(dāng)屬性集合滿足訪問結(jié)構(gòu)時才能解密數(shù)據(jù)。但該體制中的訪問規(guī)則的表達(dá)能力很弱,只能表達(dá)實體具有或不具有某種屬性,而無法將實體屬性與數(shù)值或字符串等進(jìn)行比較。規(guī)則引擎也可以用來描述訪問規(guī)則,并且能表達(dá)較復(fù)雜的規(guī)則,但由于規(guī)則引擎并不是為訪問控制而建立的,故其實現(xiàn)較復(fù)雜,運(yùn)行開銷較大。另外,由于規(guī)則是存儲在一定格式的文本文件中,其解析開銷也較大。還有一些文獻(xiàn)(如文獻(xiàn)[7,8]等)自己定義訪問規(guī)則的形式,并自己實現(xiàn)規(guī)則的解析和執(zhí)行,這不但實現(xiàn)工作量巨大,而且在規(guī)則的表達(dá)能力以及規(guī)則的解析和執(zhí)行效率上也很難具有優(yōu)勢。對于企業(yè)云存儲的訪問控制方案來說:
a)用戶的每個操作都需要進(jìn)行訪問決策,訪問規(guī)則的解析和運(yùn)行開銷要。
b)訪問規(guī)則可能由普通用戶制定,規(guī)則的編寫要很容易;
c)為了進(jìn)行精細(xì)的訪問控制,規(guī)則的表達(dá)能力要很強(qiáng)。因此,現(xiàn)有的ABAC方案無法滿足企業(yè)云存儲的應(yīng)用需求。為此,本文提出了一種滿足上述需求的適合企業(yè)云存儲應(yīng)用的ABAC方案。此外,考慮到云存儲中資源數(shù)量巨大和層次結(jié)構(gòu)的特點,該方案允許繼承訪問規(guī)則,以簡化訪問規(guī)則的制定和減小訪問規(guī)則的存儲空間。
1 企業(yè)云存儲系統(tǒng)的整體設(shè)計
1.1體系結(jié)構(gòu)
企業(yè)云存儲系統(tǒng)的體系結(jié)構(gòu)如圖1所示。
圖1企業(yè)云存儲系統(tǒng)的體系結(jié)構(gòu)
用戶可以通過瀏覽器、PC客戶端、手彬平板客戶端或API來訪問云存儲服務(wù)器,并且用戶的訪問操作可分為兩類:
a)上/下載文件的操作;b)非上/下載文件的其他操作,如文件的刪除、目錄的創(chuàng)建等,本文將其稱為應(yīng)用操作。用戶的任何訪問操作都需要事先詢問訪問控制器,訪問控制器則根據(jù)用戶屬性、被訪問資源的屬性、當(dāng)前的環(huán)境、操作的類型以及訪問規(guī)則進(jìn)行決策。只有當(dāng)決策結(jié)果為true時該操作才被允許執(zhí)行。其中用戶屬性和資源屬性存儲在屬性庫中,訪問規(guī)則存儲在規(guī)則庫中。為了保證服務(wù)性能,各種服務(wù)均采用集群服務(wù)器來提供可伸縮的服務(wù)。
1.2企業(yè)數(shù)據(jù)的存儲
系統(tǒng)采用HDFS(hadoop distributed file system)存儲企業(yè)的數(shù)據(jù)文件。HDFS是Google GFS的開源實現(xiàn),是一個高度容錯的分布式文件系統(tǒng),它能夠提供高吞吐量的數(shù)據(jù)訪問,并且可以部署在低廉的硬件上。系統(tǒng)采用單實例多租戶的方式為大量企業(yè)提供云存儲服務(wù),每個企業(yè)對應(yīng)一個英文縮寫,其數(shù)據(jù)存儲在“{HDFS數(shù)據(jù)目錄}/{企業(yè)英文縮寫}”目錄下,并采取一定的數(shù)據(jù)加密措施以保證其安全。
2 實體屬性及其存儲
2.1實體及實體屬性
訪問規(guī)則中允許使用主體(subject)、資源(resource)和環(huán)境(environment)三種實體。主體是指訪問者;資源是指被訪問的對象,包括文件和目錄,每個資源對應(yīng)一個路徑;環(huán)境是指訪問過程的上下文,包括客戶端的類型和訪問時間等。
不同類型的企業(yè)之間存在差異,它們需要用到的主體(員工)屬性也有所不同,例如學(xué)校員工的屬性需要包括院、系、職稱等,而工廠員工的屬性需要包括部門、車間、工種等,并且有些企業(yè)可能需要用到一些特殊的員工屬性。因此,將主體屬性分為基本主體屬性和企業(yè)自定義主體屬性。基本主體屬性由系統(tǒng)制定,包括用戶名、郵箱、姓名等一些通用且必需的員工屬性;而企業(yè)自定義主體屬性則是在企業(yè)注冊時設(shè)置的。企業(yè)在注冊時會連同注冊一個管理員用戶(admin),其擁有管理該企業(yè)數(shù)據(jù)的最高權(quán)限。企業(yè)普通用戶的屬性由企業(yè)的admin在創(chuàng)建該用戶時填寫,且只能由admin修改,用戶自己無法修改。
資源屬性和環(huán)境屬性由系統(tǒng)制定。資源屬性包括路徑、類型(文件或目錄)、擴(kuò)展名、大小、哈希值(以上三屬性僅針對文件)、修改日期、修改時間、擁有者和密級(普通、機(jī)密、絕密或繼承,繼承表示繼承其上級資源的值);環(huán)境屬性包括客戶端類型、客戶端IP、(服務(wù)器)負(fù)載(0~1之間的數(shù)值)、(訪問)日期和時間。
2.2屬性的存儲
環(huán)境屬性無須存儲,由系統(tǒng)根據(jù)當(dāng)時實際情況動態(tài)生成;資源屬性存儲在數(shù)據(jù)庫中。顯然,基本主體屬性和企業(yè)自定義主體屬性也需要存儲到數(shù)據(jù)庫中。但如果采用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫來存儲企業(yè)自定義的主體屬性,無論存儲還是查詢時都需要對多個表進(jìn)行操作,效率較低。另外,數(shù)據(jù)庫需要存儲海量的用戶屬性和資源屬性。因此,系統(tǒng)需要采用一個結(jié)構(gòu)松散且擴(kuò)展性好的數(shù)據(jù)庫。
MongoDB是一種開源的面向文檔的數(shù)據(jù)庫。一個MongoDB服務(wù)可以建立多個數(shù)據(jù)庫,每個數(shù)據(jù)庫可以有多個集合(相當(dāng)于關(guān)系數(shù)據(jù)庫中的表),每個集合可以存放多個文檔(相當(dāng)于關(guān)系數(shù)據(jù)庫中的記錄),文檔被存儲為鍵/值對的形式。MongoDB具有以下優(yōu)點:
a)以文檔為單位存儲,易存儲對象類型的數(shù)據(jù),很適合存儲實體的屬性;
b)模式自由,不需要提前設(shè)計結(jié)構(gòu),非常適合存儲企業(yè)自定義的主體屬性,且方便屬性的擴(kuò)展;
e)支持的查詢語言非常強(qiáng)大,且支持建立索引以提高查詢效率;
d)自動分片功能支持水平的數(shù)據(jù)庫集群,支持云級別的伸縮性。
因此系統(tǒng)選用MongoDB作為數(shù)據(jù)庫。
假設(shè)某學(xué)校的英文縮寫為abc,那么注冊時需要用一個集合abc.a(chǎn)ttr來存儲其自定義的主體屬性,每個屬性用一個文檔表示。例如:
{′name′:′學(xué)院′,′type′:′枚舉′,′值′:′工學(xué)院,文學(xué)院,…′},
{′name′:′職務(wù)′,′type′:′枚舉′,′值′:′校長,院長,…,無′},
{′name′:′入職日期′,′type′:′日期′},
…
屬性的類型(type)主要有兩個作用:a)區(qū)別該屬性的輸入方式,如枚舉類型的用選擇框輸入、日期類型的用日期控件輸入等;b)提供檢查該屬性數(shù)據(jù)是否合法的依據(jù)。當(dāng)增加普通用戶時,則在集合abc.staff中增加如下文檔:
{
′用戶名′:′zhangsan′,
′郵箱′:′zhangsan@abc.edu.cn′,
′姓名′:′張三′,
…。F渌局黧w屬性
′學(xué)院′:′工學(xué)院′,
′職務(wù)′:′系主任′,
′入職日期′:′20060701′,
…。F渌髽I(yè)自定義主體屬性
}
3 訪問規(guī)則的描述及存儲
3.1訪問權(quán)限
由于訪問規(guī)則的制定者是每個企業(yè)的管理員或普通用戶,如果權(quán)限的種類太多,會使得規(guī)則的制定過于復(fù)雜且容易出錯,因此系統(tǒng)目前只定義了三種權(quán)限,即讀、寫和管理,它們對應(yīng)的具體操作如表1所示。
表1 權(quán)限對應(yīng)的操作
3.2訪問規(guī)則的描述
每個資源的每種訪問權(quán)限都對應(yīng)一條訪問規(guī)則。訪問規(guī)則為一邏輯表達(dá)式,由主體、資源和環(huán)境三者的屬性,算術(shù)、邏輯、關(guān)系等運(yùn)算符,以及一些常用的函數(shù)構(gòu)成。其執(zhí)行結(jié)果為布爾值,當(dāng)執(zhí)行結(jié)果為ti'ue時表示允許訪問,為false時表示禁止訪問。本文采用Python邏輯表達(dá)式描述訪問規(guī)則,并采用eval函數(shù)執(zhí)行規(guī)則。由于Python語言具有靈活且強(qiáng)大的表達(dá)能力,加上訪問規(guī)則表達(dá)式只要符合Python的語法,且執(zhí)行結(jié)果為布爾值即可,因此訪問規(guī)則的表達(dá)能力很強(qiáng),可以制定出非常復(fù)雜的控制規(guī)則,且書寫容易,只需掌握Python的基本語法即可。
在訪問規(guī)則中,實體用字典變量來表示,實體屬性用字典中的元素表示,元素的“鍵”對應(yīng)屬性名,元素的“值”對應(yīng)屬性值。由于字典變量無須(而對象類需要)事先定義結(jié)構(gòu),故當(dāng)對實體屬性進(jìn)行擴(kuò)展時,無須修改程序代碼。本文還規(guī)定主體用變量S表示,資源用變量R表示,環(huán)境用變量E表示。以下是幾條合法的訪問規(guī)則實例:
規(guī)則1。ǎǎ樱′部門′]==′財務(wù)部′)and(S[′職務(wù)′]in{′經(jīng)理′,′副經(jīng)理′}))or(S[′姓名′]==′張三′),即允許財務(wù)部的經(jīng)理和副經(jīng)理,或者張三訪問;
規(guī)則2 (S[′用戶名′]==R[′擁有者′])or(S[′用戶名′]==′admin′),即允許資源的擁有者或者管理員訪問;
規(guī)則3。ǎ遥牛停幔簦悖瑁ǎ牛′客戶端IP′],′^202\.192\.159\.′))and(YearSpan(E[′日期′],S[′入職日期′])>2),即允許IP地址為202.192.159.且入職超過2年的用戶訪問(REMatch和YearSpan是本文實現(xiàn)的正則表達(dá)式匹配函數(shù)與計算兩日期之間年份差的函數(shù));
規(guī)則4。ǎ遥′類型′]==′文件′)and(R[′大小′]<220)and(R[′擴(kuò)展名′].lower()notin[′.exe′,′.bat′]),即允許訪問(如上傳)大小不超過1MB的非可執(zhí)行文件。
3.3訪問規(guī)則的繼承與存儲
各企業(yè)的資源訪問規(guī)則連同資源屬性一起存儲在集合{企業(yè)英文縮寫}.res中。為了便于文件的歸檔和分類,以及便于用戶的檢索,各企業(yè)文件的組織通常都是成樹狀的層次結(jié)構(gòu)。并且考慮到:a)資源(目錄或文件)的權(quán)限通常默認(rèn)繼承上一級資源(目錄)的權(quán)限;b)擁有某個資源的讀權(quán)限通常必須擁有其上級資源的讀權(quán)限,而擁有某個資源的讀權(quán)限不一定擁有其下級資源的讀權(quán)限;c)擁有某個資源的寫權(quán)限通常也擁有其下級資源的寫權(quán)限,而擁有某個資源的寫權(quán)限不一定擁有其上級資源的寫權(quán)限;d)管理權(quán)限與寫權(quán)限類似。因此,系統(tǒng)為每種權(quán)限定義了兩個鍵:一個是inherit(繼承),鍵值為布爾量;另一個是nile(規(guī)則),鍵值為邏輯表達(dá)式字符串。各資源對應(yīng)的文檔格式如下:
{
′路徑′:′′,
′類型′:′文件′,
…。F渌Y源屬性
′訪問規(guī)則′:{
′read′:{′inherit′:,rule:′′},
′write′:{′inherit′:,rule:′′},
′manage′:{′inherit′:,rule:′′}
}
}
資源各種權(quán)限的鍵值組合與該資源最終訪問規(guī)則的對應(yīng)關(guān)系如表2所示。
表2 資源的最終訪問規(guī)則
允許訪問規(guī)則的繼承,使得上一級資源的規(guī)則可被下一級資源重復(fù)利用,不僅大幅度減少了規(guī)則存儲的空間,而且大幅度減少了規(guī)則編寫的工作量。另外,本文將inherit為true、rule為空視為默認(rèn)情況,此時無須存儲其鍵和鍵值。由于該情況通常會大量出現(xiàn),從而可進(jìn)一步節(jié)省大量的存儲空間。對于各企業(yè)的根目錄,本文將其密級設(shè)置為普通,將其訪問規(guī)則設(shè)置為
′read′:{′inherit′:false,′rule′:′true′},
′write′:{′inherit′:false,′rule′:
。ⅲǎ樱′用戶名′]==R[′擁有者′])or
(S[′用戶名′]==′admin′)"},
′manage′:{′inherit′:false,′rule′:
"(S[′用戶名′]==R[′擁有者′])or
。ǎ樱′用戶名′]==′admin′)"}
4 訪問控制器
4.1開發(fā)框架
訪問控制器采用跨語言的服務(wù)開發(fā)框架Thrift進(jìn)行實現(xiàn)。采用該框架,開發(fā)人員無須關(guān)注RPC(remote procedurecall,遠(yuǎn)程過程調(diào)用)協(xié)議層和傳輸層的實現(xiàn),而只需首先在Thirft文件中定義數(shù)據(jù)類型和服務(wù)接口;然后用Thrift編譯器編譯該文件產(chǎn)生相應(yīng)語言(目前支持C++、Java、Python、PHP等10多種主流語言)的代碼文件;最后分別用相應(yīng)的語言實現(xiàn)服務(wù)程序和客戶端調(diào)用程序。Thrift框架類似于Web Service,但其效率和開發(fā)的方便性是Web Service所不能比擬的。
4.2數(shù)據(jù)類型和服務(wù)接口的定義
訪問控制服務(wù)接口為每種訪問操作都定義了一個返回布爾值的訪問控制服務(wù)函數(shù)。Thrift文件的主要代碼如下:
structRequestParameter{
。保海螅簦颍椋睿纾澹睿ERPrise
。玻海螅簦颍椋睿纾酰螅澹
3:ClientTypeclienttype。杜e類型,其定義省略
。矗海螅簦颍椋睿纾悖欤椋澹睿簦椋
}
serviceAccessControl{
… //省略其他讀寫操作的訪問控制服務(wù)函數(shù)
。猓铮铮欤模椋颍停铮觯澹ǎ保海螅簦颍椋睿纾铮欤洌穑幔簦,2:stringnewpath,
3:RequestParametERParameter),
… //省略其他管理操作的訪問控制服務(wù)函數(shù)
boolSetRule(1:stringpath,2:RequestParametERParameter)
4.3訪問控制服務(wù)函數(shù)的實現(xiàn)
各服務(wù)函數(shù)在實現(xiàn)時,首先將訪問操作轉(zhuǎn)換為對某個(或某些)資源進(jìn)行某種(或某些)權(quán)限的操作,然后調(diào)用決策函數(shù)Decision對操作進(jìn)行決策并返回決策結(jié)果,Decision又是通過調(diào)用遞歸的決策函數(shù)RecursiveDecision進(jìn)行決策。服務(wù)函數(shù)也采用Python來實現(xiàn)。下面以DirMove為例說明服務(wù)函數(shù)的實現(xiàn)方法。
defDirMove(self,oldpath,newpath,parameter):
return(Decision(oldpath,Right.MANAGE,parameter)and
。模澹悖椋螅椋铮睿ǎ疲幔簦瑁澹颍ǎ睿澹鳎穑幔簦瑁,Right.WRITE,parameter))
defDecision(resourcepath,righttype,parameter):
4.4 Eval函數(shù)的安全性
由于訪問規(guī)則是由用戶編寫的,為了防止用戶在規(guī)則中執(zhí)行惡意的代碼,如利用_import_(“OS”).system(cmd)執(zhí)行刪除系統(tǒng)文件和窺探系統(tǒng)信息的代碼,系統(tǒng)必須對規(guī)則中使用的變量和函數(shù)進(jìn)行限制。這可以借助eval(expression[,globals[,locals]])函數(shù)的后兩個可選參數(shù)做到,其中g(shù)lobals用于指定expression中可用的全局變量和函數(shù),locals則用于指定可用的局部變量和函數(shù)。本文在實現(xiàn)時允許規(guī)則中使用的局部變量為S、R和E,全局函數(shù)為REMatch和YearSpan等實現(xiàn)的函數(shù)。注意,Python內(nèi)置的函數(shù)(如abs、len等)和內(nèi)置對象的成員函數(shù)(如字符串的lower函數(shù)等)是不受這兩個可選參數(shù)限制的,因而訪問規(guī)則的表達(dá)能力能夠得到保證。
5 實例及優(yōu)勢分析
下面將本文提出的ABAC方案與目前流行的三種ABAC方案,即基于XACML的方案、基于屬性的加密體制以及基于規(guī)則引擎的方案。結(jié)合實例進(jìn)行對比分析,假設(shè)需要實現(xiàn)的規(guī)則為:僅當(dāng)主體的用戶名等于資源的擁有者且客戶端類型為瀏覽器時才允許訪問。
5.1 訪問規(guī)則的編寫難度
基于屬性的加密體制無法實現(xiàn)該規(guī)則。在本文的方案中,該規(guī)則可簡單地描述為
(S[′用戶名′]==R[′擁有者′])and(E[′客戶端類型′]==′瀏覽器′)
若采用基于XACML的方案,規(guī)則文件的核心部分如下:
可見其規(guī)則編寫的難度很大,即使采用程序來生成該規(guī)則文件,代碼也很復(fù)雜。Drools是一個應(yīng)用廣泛的開源規(guī)則引擎實現(xiàn),若用其描述該規(guī)則,規(guī)則文件的核心部分如下:
若采用后者eval的方式來表達(dá)規(guī)則,則規(guī)則的編寫與本文的方案類似,也很容易。
5.2訪問規(guī)則的執(zhí)行效率
在一臺CPU為Intel酷睿2雙核E8400(主頻3GHz)、內(nèi)存為3GB的WindowsXP機(jī)器上,分別測試了該規(guī)則在三種方案(基于屬性的加密體制除外)下的(本地)執(zhí)行時間,XACML實現(xiàn)采用的是SUN公司的sunxacml,測試結(jié)果如下:Drools約為1200ms,sunxacml約為200ms,本文方案約為0.04ms。在前兩種方案中,由于分別需要解析文本文件和XML文件,故執(zhí)行開銷較大,而本文方案無須解析文件,規(guī)則直接執(zhí)行,故執(zhí)行開銷很小。特別地,由于規(guī)則引擎并不是為訪問控制而建立的,Drools還實現(xiàn)了諸如對象修改、規(guī)則重復(fù)觸發(fā)等其他功能,故其實現(xiàn)復(fù)雜,運(yùn)行開銷很大。此外,由于在基于屬性的加密體制中訪問控制和加密融為一體,故這里沒有測試其執(zhí)行效率。
5.3訪問規(guī)則的表達(dá)能力
基于屬性的加密體制中訪問規(guī)則的表達(dá)能力很弱,只能表達(dá)實體具有或不具有某種屬性,而無法將實體屬性與數(shù)值或字符串等進(jìn)行比較;其他三種方案的訪問規(guī)則中都能使用各種類型的變量,如算數(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符,集合操作,正則表達(dá)式等,并且可以自定義函數(shù),從而表達(dá)能力都很強(qiáng),但本文方案中規(guī)則的書寫更為簡潔明了。
6 結(jié)束語
目前市場上的企業(yè)云存儲產(chǎn)品采用的訪問控制模型無法滿足應(yīng)用需求,雖然ABAC是非常理想的訪問控制模型,但目前已有的ABAC方案在訪問規(guī)則的描述方面存在著一些不足,仍然無法滿足應(yīng)用需求,為此本文提出了一種新的ABAC方案,并給出了實現(xiàn)方法。該方案的設(shè)計與實現(xiàn)具有以下優(yōu)點:
a)采用Python邏輯表達(dá)式描述訪問規(guī)則,并采用eval函數(shù)執(zhí)行規(guī)則,從而使規(guī)則編寫容易,表達(dá)能力強(qiáng),且執(zhí)行效率高;
b)規(guī)則中采用字典變量表示實體,從而當(dāng)擴(kuò)展實體屬性時無須修改程序代碼;
c)考慮到云存儲中的資源具有層次結(jié)構(gòu)的特點,并根據(jù)讀、寫和管理權(quán)限的特點,分別為不同的權(quán)限設(shè)計了相應(yīng)的訪問規(guī)則繼承策略,不僅減少了規(guī)則存儲的空間,而且減少了規(guī)則編寫的工作量;
d)采用模式自由的MongoDB作為屬性存儲的數(shù)據(jù)庫,便于存儲企業(yè)自定義的主體屬性;
e)采用Thrift框架實現(xiàn)訪問控制器,從而能提供開放、跨語言、跨平臺,且高效的訪問控制服務(wù)。針對層次結(jié)構(gòu)的資源設(shè)計通用的訪問控制模型和框架是筆者下一步的工作。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標(biāo)題:一種基于屬性的企業(yè)云存儲訪問控制方案
本文網(wǎng)址:http://www.ezxoed.cn/html/support/1112159107.html