蘇秋月
(四川大學計算機學院,成都610065)
大數據時代下,隨著政府、企業的信息系統越來越多,系統之間的資源共享與業務協同的需求越來越迫切。而大數據平臺可以幫助政府和企業打破部門間的數據孤島,支持多源異構數據源的集成,支持跨行業、跨部門、跨平臺的數據共享與交換[1]。但平臺上數據安全問題也隨之而來,如何保證數據不被未授權訪問是數據使用過程中必須解決的問題。
學者Gupta 等人[2-3]總結開源項目Apache Ranger、Sentry 以及Hadoop 原生基于訪問控制列表(Access Control List,ACL)這三種訪問控制機制的特點,提出了Hadoop 生態系統的多層授權框架和Hadoop 生態系統授權(HeAC)模型。陳垚坤等人[4]將基于屬性的訪問控制(Attribute-Based Access Control,ABAC)模型應用到Hadoop 平臺中,提供了細粒度、靈活的訪問控制。但是當平臺中存在大量的屬性時,屬性管理難度增大,并且訪問控制策略由多個實體屬性組成的集合,訪問權限判定過程也較為復雜。最近,Gupta 等人[5]在Hadoop 生態系統中討論了角色與屬性結合的方法,將對象標簽作為對象屬性添加到RBAC 模型中,提出基于對象標簽的角色訪問控制(OT-RBAC)模型。但文中只增加了對象屬性,未考慮主體屬性、環境屬性等上下文環境對訪問授權的影響。
綜上,本文提出了大數據平臺上基于屬性的角色訪問控制(Attribute-based Role Access Control,ARAC)模型。該模型將基于屬性的策略應用到RBAC 模型中,根據用戶屬性和環境屬性來確定用戶可分配的角色,自動地建立用戶-角色的分配關系;同樣,屬性策略也用于建立角色-權限的映射關系,其中考慮到Hadoop 平臺多層訪問架構的特點,在策略中加入了組件屬性和數據對象屬性,而不是只根據數據本身作為授權對象,實現對平臺中數據靈活、統一的權限管理。最后我們在Hadoop 平臺上實現了ARAC 模型,并進行了實驗分析,結果表明該模型在性能損失較小的情況下,為大數據平臺了提供細粒度、靈活的訪問控制。
本文提出的大數據平臺上基于屬性的角色訪問控制(ARAC)模型如圖1 所示。ARAC 模型中包括的實體有:用戶U、用戶組G、角色R、組件C、數據對象O、操作OP。
其中用戶U 是與計算機交互以訪問Hadoop 生態系統組件和數據對象的人。用戶組G 是具有相同屬性和權限的用戶集合。組件C 是指Hadoop 平臺中的組件,例如HDFS、YARN、Hive、HBase、Storm、Kafka、Atlas等。數據對象O 是組件中包含的不同類型的資源,例如HDFS 中的資源路徑(path),Hive 中的數據庫(database)、表(table),YARN 中的隊列(queue)等。由于Hadoop 平臺中多層訪問框架的特點,用戶在對數據對象進行操作之前,先要有訪問組件的權限,即只有同時擁有組件和數據對象的訪問權限才能對數據對象實施操作。操作OP 是指對不同的數據對象執行不同的訪問行為,如對HDFS 文件或目錄進行讀、寫、執行操作,而對Hive 中數據庫、表進行創建、查詢、刪除等操作。除了實體之外,模型中還包含了一些屬性。下面會對屬性相關的概念進行形式化的定義,具體如定義1 所示。

圖1 ARAC模型
定義1 屬性:屬性是對實體的具體描述,記為AT::=(Attribute_name op attribute_value)。其中attribute_name 是指屬性名稱;op 指屬性運算符,包括<,=,>,≤,≠,≥等;attribute_value 指屬性的取值,可由有限的原子值或集合值來表示。其中AT?(UAT∪EAT∪CAT∪OAT),表示不同類型屬性集合的子集;entity 表示實體類型,包括用戶U、環境E、組件C、對象O;Range(at)表示屬性的范圍,是一個原子值的有限枚舉集。
用戶屬性UAT 表示對在Hadoop 平臺中執行操作的用戶特征描述,包括用戶的身份標識、所屬組、名稱、安全等級等;環境屬性EAT 是對執行操作過程中上下文環境的描述,包括時間、位置等;組件屬性CAT 是對組件特征進行了描述,包括組件類型,組件中擁有的數據類型等;數據對象屬性OAT 是對數據對象的特征描述,包括數據對象的標識、數據類型、數據擁有者和安全標簽等。
文獻[6-7]采用了傳統RBAC 模型,需要安全管理員根據用戶身份手動為其分配角色,從而授權相應的權限。在大數據環境中,數據和用戶在不斷移動,使得安全管理員無法提前預知所有的用戶信息,更無法提前預設用戶-角色對應關系,從而難以精確、細粒度對用戶授予實際的訪問權限。
因此在我們的模型中,利用屬性來描述用戶,通過定義用戶屬性和環境屬性與角色的映射關系,動態地建立用戶-角色隱含關系。這一特點使安全管理員無需知道全部的用戶信息就能為用戶授權,并且自動分配角色到用戶不僅減輕了授權管理負擔,還提供了足夠的靈活性和動態授權,也為用戶安全的匿名訪問提供了可能。
定義6 用戶-角色分配RA:RA ?UAT×EAT×R,表示用戶屬性、環境屬性到角色的映射關系,隱含了用戶到角色的對應關系。若?uat∈UAT,?eat∈EAT,則有函數:

其中?r∈R,這里用戶屬性、環境屬性到角色的映射函數assign_role 表示了角色的分配策略。例如管理員定義了用戶屬性uat::=(department=外科),環境屬性為eat::=(access_time=8:00AM~20:00PM)對應的角色為醫生,則assign_role(department=外科,access_time=8:00AM~20:00PM)=醫生。
Hadoop 平臺存在多層訪問架構,當用戶請求訪問生態系統中的數據時,首先使用組件授權策略檢查是否擁有對數據所在組件的訪問權限,該步驟發生在平臺應用網關如Apache Knox;若沒有權限訪問組件直接拒絕訪問,否則繼續根據數據授權策略檢查用戶對數據的訪問權限;若有權限則通過訪問請求,沒有就拒絕請求。另外由于平臺中數據的大規模和多樣性,管理員很難為每種組件類型的數據進行細粒度、靈活的權限管理,導致授權過度或授權不足現象出現,并且授權管理難度較大。
因此,本文提出的ARAC 模型中不再對數據對象本身進行授權,而是根據組件屬性或數據對象屬性、環境屬性和操作定義權限。然后通過定義權限與角色的映射,從而地建立角色-權限的動態關系。
定義7 權限PERMS,表示模型中對組件、數據對象的操作權限集合。這里我們將權限分為兩種類型:對組件的訪問權限和對數據對象的訪問權限,將統一的基于屬性的訪問策略用于平臺中多層訪問權限的判定。
定義8 角色-權限分配PA:,表示角色到權限的映射關系。若?r∈R,則有函數:

這里?perms∈PERMS,我們使用角色到權限的映射函數assign_perms 定義權限的分配策略。例如管理員為角色醫生授予訪問權限perms 是對組件屬性為cat::=(type=HDFS,Hive)和數據對象屬性為oat::=(tag=PII)在環境屬性為eat::=(location=醫院)下進行的操作op::=(type=讀,寫,查詢,創建,刪除)。則權限分配策略為:
assign_perms(r=醫生)=(cat::=(type=HDFS,Hive))?(oat::=(tag=PII))
?(eat::=(location=醫院))?(op::=(type=讀,寫,查詢,創建,刪除))
為了更加直觀、簡潔地分析ARAC 模型的優勢,本文從以下五個方面進行了分析:
(1)細粒度訪問控制。ARAC 模型使用屬性來描述訪問請求過程中用戶、環境、組件和數據對象,可以嚴格控制訪問請求者獲得權限的各種條件,并且訪問范圍可以精確到表、字段級別的數據,滿足最小權限原則。
(2)動態授權。ARAC 模型中各種實體屬性的定義和設置有很大的靈活性,并支持大規模的動態擴展,可以滿足各種應用系統的訪問控制需求。
(3)授權復雜程度。ARAC 模型保留了RBAC 模型的優勢,使用角色來間接地建立用戶和權限之間的關系,避免在用戶和數據之間設置很多關系參數,系統管理員只需要設置角色與權限的映射,降低了授權復雜程度。
(4)屬性管理復雜度。ARAC 模型使用用戶組層次結構來管理用戶屬性,用戶可以通過從所在組及組繼承其他組獲得用戶的屬性。管理員無需為每一個用戶設置屬性,實現了用戶屬性的簡單管理。
(5)大數據平臺中多組件數據權限統一管理。結合Hadoop 平臺多層訪問框架的特點,針對組件屬性和數據對象屬性授權,統一控制平臺中數據的訪問權限。
本文提出的大數據平臺上基于屬性的角色訪問控制(ARAC)模型。該模型以RBAC 模型框架為基礎,使用基于屬性的策略分別建立用戶-角色關系和角色-權限關系,實現了將角色自動分配給用戶,減輕了管理員的工作負擔。同時,使用平臺中的組件屬性和數據對象屬性、環境屬性定義與角色的分配策略,實現平臺中多個組件數據權限統一管理。分析表明ARAC 模型可有效地為大數據平臺提供細粒度、管理簡單、動態的訪問控制。