本章內容提要java
● 理解企業級應用的安全顧慮linux
● 理解Hadoop還沒有爲企業級應用提供的安全機制算法
● 考察用於構建企業級安全解決方案的方法shell
第10章討論了Hadoop安全性以及Hadoop中用於提供安全控制的機制。當構建企業級安全解決方案(它可能會圍繞着與Hadoop數據集交互的許多應用程序和企業級服務)時,保證Hadoop自身的安全僅僅是安全解決方案的一個方面。各類組織努力對數據採用一致的安全機制,而數據是從採用了不一樣安全策略的異構數據源中提取的。當這些組織從多個源獲取數據,接着提取、轉換並將數據加載到Hadoop時,隨着結果數據集被導入到企業級應用中,安全挑戰甚至變得更加複雜。例如,當從Hadoop做業中產生的數據集表明着多個數據集的組合時,應該如何對初始數據集實施訪問控制策略?數據庫
更爲複雜的是,許多組織發現Hadoop提供的安全級別不能知足它們的安全規章需求,並且它們必須補充Hadoop的安全模型。例如,爲了知足其規章要求,一些組織須要加密靜止的數據——這是Hadoop本來不提供的功能。還有,其餘一些組織要求Hadoop查詢爲進行分析查詢的數據科學家提供某個粒度級別的、基於屬性的訪問控制。儘管這固然包含在Hadoop安全將來的路線圖中(如第10章中的討論),但當前對這些功能的需求遠遠超過了Hadoop自身的支持能力。apache
鑑於這些挑戰,必須使用一種總體的(而非以Hadoop爲中心的)安全方案來開發企業級解決方案。固然,可使用Hadoop中的原生安全機制來知足部分安全需求,但在許多組織中,你會發現Hadoop的安全機制並不能解決全部問題。必須爲使用Hadoop的企業級應用策劃、設計和補充其餘安全機制,請查看企業級「藍圖」。編程
如第10章中的討論,Hadoop在設計和開發時沒有考慮安全性,並且在很長的一段時間裏,Hadoop實現都幾乎沒有安全性。社區早期所採用的一個假設是Hadoop集羣將由相互協做的、可信的機器組成,並由在可信環境中的可信用戶使用。從較早的時間起,Hadoop社區採用了一種新的安全架構,使用了新的安全控制(如第10章中的討論),但許多須要顯式訪問控制限制、保密規則、隱私保護和聽從法規的組織仍然不能使用Hadoop生態系統中的基礎工具來知足其安全需求。因爲想要使用Hadoop的功能,所以這些組織不得不將安全方案構建到其餘工具中,或者設計不一樣方式的Hadoop使用方案。ubuntu
本章是爲那些想要使用Hadoop,但卻必須知足安全性要求的企業級應用開發者而編寫的。重要的是要理解大多數企業級應用都須要聽從組織的安全需求。這可能包含了與身份和訪問管理基礎設施、其餘網絡基礎設施的相互結合,也可能意味着要應用還沒有與「新來的」Hadoop集成的其餘安全控制。本章給出了用於知足這些需求的方法論和可能的解決方案。安全
本章最開始簡要地概述開發使用Hadoop的企業級應用時可能遇到的安全顧慮。接着討論Hadoop安全還沒有提供的機制,並給出了一系列用於構建使用Hadoop的企業級安全解決方案的方法,幷包括一些實際示例。最後,本章簡要地涵蓋了能夠在Hadoop發行版中使用的另一個工具所提供的安全性——該工具是ApacheAccumulo,它是一個高度安全的數據存儲和檢索系統,由美國國家安全局(NSA)最初構建在Hadoop之上,用於細粒度訪問控制的目的。服務器
當構建Hadoop解決方案時,考慮保證Hadoop自身的安全(如第10章中的討論)並非惟一重要的事情,理解安全策略的藍圖和以數據爲中心的視角也很重要。
正如在圖12-1中看到的那樣,必需要理解Hadoop數據生命週期。當構建Hadoop解決方案時,會存在一個過程,即從信息源獲取數據集、將數據集加載到Hadoop集羣、運行查詢和分析,以及使用結果集。隨着數據的流動,安全架構師的目標就是確保在整個數據生命週期中實施了所有的訪問策略。
不考慮涉及的工具,數據從各式各樣的數據源提取出來、轉換成某種經常使用格式並加載到Hadoop集羣的HDFS上,這一般被稱爲提取(Extract)、轉換(Transform)和加載(Load)過程(ETL過程)。數據分析師接着運行一系列MapReduce做業,並執行產生結果集的查詢,而結果集一般又反過來用於企業級應用。
這裏面臨的挑戰是多方面的。你必須可以在數據穿越整個生命週期的過程當中保護它,以聽從原始的安全策略。因爲數據要通過提取、加載並與集羣機器上的其餘數據集相組合,並且其餘應用程序還會使用結果集,所以這可能會是一個挑戰。
圖12-1 Hadoop數據生命週期中的安全顧慮
圖12-1很好地歸納了本章所考察的一些顧慮。要構建涉及Hadoop的企業級安全解決方案,架構師們必須理解信息安全基礎,以及如何應用它們。這裏須要對用於Hadoop解決方案的大量安全目標進行一些解釋,並且理解最佳實踐取決於對安全顧慮和相關術語的理解。此討論的目的不是給出一個詳盡的清單或者解釋每個安全顧慮,而是提供一個對應於安全目標的簡要信息安全詞彙表,這些都是企業架構師須要瞭解的。每一個目標中都有術語的定義,於是能夠理解它們爲何在Hadoop上下文中很重要。
認證意味着驗證某個主體的身份。主體多是某個系統中的用戶、應用程序、任務或者其餘「執行者」。如第10章的討論,能夠將Hadoop配置爲使用Kerberos來認證用戶、服務和Hadoop集羣中的服務器。認證能夠爲用戶和服務所聲稱的身份提供必定程度的保證,而且阻止用戶、任務和服務被惡意系統冒充。
還應該提到的一點是,並不是每一個組織都有用於在Hadoop以外進行認證的企業級Kerberos部署。企業級應用可能須要將其餘身份和訪問管理基礎設施進一步集成到自身的解決方案中。
受權意味着肯定某個主體有權限作什麼。主體的身份在認證中驗證以後,系統必須肯定主體的受權憑據,並將它們與既定的受權策略相比較來提供對被請求資源的訪問。如第10章中的討論,Hadoop當前提供某個級別的訪問控制,經過使用訪問控制列表(ACL)來表達對Hadoop某些方面的訪問控制策略,並使用相似UNIX的文件訪問權限來表達全部者和組用戶的訪問權限。
除了Hadoop提供的機制以外,大多數企業組織還有用於受權的額外控制。例如,一個組織可能有如下所列舉的一個或多個機制:
● 輕量級目錄訪問協議(LDAP)目錄或活動目錄(AD)實例——用於爲主體保存組、角色和訪問權限。
● 屬性服務——將屬性用做主體的受權憑據。
● 安全令牌服務(STS)——用於發放與主體受權憑據相關的令牌,以及用於發放事務中的受權決策。
● 策略服務——使用一些標準,例如可擴展訪問控制標記語言(XACML)和安全斷言標記語言(SAML),來表達資源的訪問控制策略,併爲主體提供訪問控制決策。
使用Hadoop的企業級解決方案可能須要基於本身組織的企業級訪問控制策略來控制對數據集的訪問,這一般意味着要使用其餘機制來補充Hadoop原生的受權控制。
須要記住的是,在整個數據生命週期中保持一致性的受權很重要。若是原始數據源有對數據的訪問控制策略,那麼對你來講很重要的一點就是爲對這些數據運行查詢的數據科學家們提供相同的訪問控制。對全部後續導入到企業級應用的結果集進行適當的控制,這一點可能甚至是更重要的。但這的確是一個挑戰。
保密性是一種限制敏感信息僅對已受權的參與方可見的安全目標。當在網絡中傳輸敏感信息時,可能的需求是該信息不能在傳輸過程當中被竊聽者看到。這經過網絡加密來作到。某些組織須要磁盤上的加密,或「靜止數據」的加密,其中將加密應用在數據存儲的位置,下降了未保護數據被偷竊的風險。
如第10章中所學,Hadoop提供用於網絡加密的能力和機制。然而,它不提供用於加密靜止數據的能力。本章後面將進一步學習用於達成此目標的策略。
完整性意味着確保數據在傳輸或者靜止時沒有被改動。這一般使用消息摘要、哈希碼或者數字簽名附帶功能等加密機制來實現。當配置Hadoop實現網絡加密時,它會在傳輸中應用數據完整性。
靜態數據的完整性是另一個問題,而幸運的是,因爲要確保數據複製的可靠性,Hadoop中已經內置了大量數據完整性機制。Hadoop健壯、分佈式架構的一個天然的副產品就是數據完整性和可靠性。因爲HDFS被設計爲運行在商用硬件之上,所以爲了容忍故障,它會將數據的副本放置在多個節點上。基於副本的數量,以及校驗和檢查與衝突檢測的機制,它爲保存在HDFS中數據集的完整性提供了一種健壯的機制。
然而,安全架構師們有時會表達這樣的擔心,即若是Hadoop集羣中的某個節點被攻破的話,惡意用戶可能會修改數據,致使數據分析結果的誤差。這固然是一種可能性,但經過使用一種防護縱深的安全策略來補充Hadoop的安全機制(服務器/服務認證、完整性檢查等),企業級解決方案架構師們就能夠下降這種風險。
大多數公司依賴於安全審計來提供合規性問題的保證,以及發現潛在的安全漏洞。固然能夠將Hadoop配置爲記錄全部訪問——NameNode保存本地日誌,爲了確保日誌完整性,能夠配置將審計日誌寫入到受保護的卷。各類組織可能有與認證和受權相關的更進一步的審計需求。
注意:
儘管關於經典安全目標的大多數描述一般都關注於「保密性」、「完整性」和「可用性」,但這裏的討論關注於認證、受權、保密性、完整性和審計,由於這些是企業級應用安全的關鍵方面。可用性(保證對Hadoop的訪問)當然重要——從Hadoop的設計方式上就能夠看出已經考慮了這一點。Hadoop集羣是高可靠性的,對可用性有高度的跟蹤記錄,並且由企業中的其餘安全機制(例如入侵檢測系統)來補充,以防範拒絕服務(DoS)攻擊。這在本章中沒有涵蓋,由於此討論是面向企業級應用開發者的。
如今,你已經掌握了一些上下文和安全術語,從而爲學習本章餘下的內容作好了準備,但理解Hadoop沒有原生提供的某些方面的企業級安全是很重要的。固然,Hadoop確實提供了某種級別的認證(Kerberos)、必定程度的受權(ACL和UNIX級別的文件訪問權限),以及支持網絡加密和完整性的能力。然而,Hadoop卻沒有提供某些方面的安全性。
除了針對HDFS上用戶和組的ACL和基於POSIX的文件訪問權限(讀和寫)以外,Hadoop並不原生地跟蹤其數據的訪問控制策略。如本章所述,許多組織會基於可能很是複雜的策略來限制訪問。可能存在某些狀況,其中Hadoop實現包含一些數據集,必須對這些數據進行保護,以禁止某些可能沒有權限看到MapReduce做業和查詢結果的數據分析師們訪問。
如下是這方面的一些很好的示例:
● 某個健康護理組織可能有這樣的訪問控制需求,即內科醫生只能夠訪問與他本身的病人相關的數據,並且是在正常的工做時間內(上午9點到下午5點)。這意味着要對病人數據進行訪問控制,提供訪問該數據的系統必須基於用戶的角色(內科醫生)、一天中的時間(正常工做時間)以及是不是屬於該內科醫生的病人記錄來限制數據。
● 政府文檔可能要使用被稱爲強制訪問控制(MAC)的策略,基於用戶的公民身份和/或安全許可證來限制訪問。
● 爲特定公司提供建議的商業顧問應該沒有權限訪問爲競爭對手提供的計劃和建議。這一般被稱爲「興趣衝突」或者「長城」策略。
● 大學可能會從其各個部門和下屬組織中收集學生數據,範圍包括財政、醫療記錄和校園警察。大學可能須要基於部門和角色(醫療、警察、財政)來控制對數據的訪問。
在全部這些例子中,都沒法簡單地將Hadoop原生的安全機制用於實施這些訪問控制策略。這些挑戰中的一部分是結構性的,基於MapReduce算法的設計方式。導入的數據可能最初與訪問控制策略相關聯(在使用安全策略「標記」了數據的示例中)。然而,策略和數據之間的關聯性是存在裂縫的,由於數據分佈在HDFS上,並且後續會隨着做業運行而與其餘數據集組合。這可能會產生新的、組合的數據集,其中的訪問控制策略並不徹底清晰。
對於須要提供此級別訪問控制的組織來講,這是一個有挑戰性的問題,本章後面將會考察此問題。
在近40年中,人們已經對無心識地泄露統計數據庫中的信息這一課題,以及與數據挖掘相關的安全和隱私顧慮進行了研究。2006年,微軟研究院的CynthiaDwork博士將該數據科學領域定義爲差分隱私。
差分隱私關注於保護多個數據集和數據庫中的信息,以防止泄露。隨着Hadoop和其餘數據分析平臺已經可以使用大量計算能力處理多個大數據集,差分隱私已經成爲一個很是熱門的主題,涉及嚴重的隱私和法律問題。這一點對於相似《健康保險攜帶和責任法案(HIPAA)》的法令和其餘一些隱私保護數字法律來講是尤爲適用的。
即便經過「匿名化」去除了隱私信息,Hadoop數據集包含的(或者與之耦合的)其餘看上去無害的信息,也可能會泄露個體的身份或者其餘敏感信息,致使違反隱私策略。可能存在的狀況是,以某種方式組合多個Hadoop做業所產生的信息是不能對數據科學家或者Hadoop用戶可見的。然而,Hadoop自身並不提供差分隱私。固然,這不只會影響內部用戶的訪問控制,也會對與其餘組織分享統計結果和數據集的組織產生嚴重的影響。
因爲Hadoop是一個由許多組織使用的強大分析平臺,所以能夠將它用於發現你可能沒有想到的信息。在將數據集發佈給公衆或者本身的商務夥伴以前,組織應該三思而行。組織可能也有對數據的內部控制——這取決於你的環境,要知道,某些Hadoop用戶可能沒有被受權訪問其分析查詢的某些結果。這曾是NSA的顧慮之一,NSA開發並在以後發佈了Accumulo,做爲Apache的開源項目,提供單元格級別的安全。
「差分隱私」問題示例
關於差分隱私的最著名案例之一發生在Netflix公司。2006年,Netflix出價100萬美圓,爲其影片推薦系統尋求10%的改進,併發布了「匿名化」的訓練數據集,數據集中包含50萬訂閱用戶的影片瀏覽歷史,以便參加競賽的開發者們可以使用這些數據。此數據集含有Netflix訂閱用戶已觀看影片的收視率,並刪除了全部我的身份信息。
兩位研究人員,來自Austin Texas大學的Arvind Narayanan博士和Vitaly Shmatikov博士,將Netflix的數據集與互聯網電影資料庫(IMDB)的review數據庫鏈接在一塊兒,實現了一個新的「反匿名化算法」。他們發表了研究論文,闡述了能夠從數學上辨別出Netflix發佈的數據集中大部分用戶的身份。基於用戶在IMDB中僅少數幾部影片的收視率,研究人員展現了他們的算法可以識別出Netflix數據集中相同的個體,並獲取了Netflix訂閱用戶在2005年之前完整的影片瀏覽歷史,致使了與訂閱用戶宗教信仰、性取向和政治傾向相關的潛在的隱私泄露。其結果是,一位Netflix訂閱用戶起訴了Netflix,聲稱其發佈數據的行爲違反了《視頻保護隱私權法案(VPPA)》,並「暴露」了她是女同性戀。Netflix於2010年花費900萬美圓平息了這場訴訟。
與此同時,AOL發佈了一個「匿名化」的搜索引擎日誌數據集,用於研究目的,而紐約時報的一位記者交叉引用該數據集和通訊錄列表,可以識別出用戶的身份。這暴露了AOL用戶三個月內的搜索歷史——其中一些是很是使人尷尬的。其結果是AOL的首席技術官(CTO)辭職、兩名AOL員工被解僱以及一場針對公司的集體訴訟。
還有不勝枚舉的其餘例子——MIT的一位研究人員在將一個「匿名化」的州保險數據庫與公開可用的州選舉註冊記錄一塊兒分析時,發現可以從該數據集中識別出其州長的醫療記錄。
這些例子演示了手頭的問題,以及一塊兒使用數據集中的信息會如何潛在地違反隱私法律、規章,並繞過對用戶的訪問控制。經過使用這些相同的方法,你的內部Hadoop用戶也許可以繞過安全限制,若是沒有設置適當的控制的話。
因爲針對保存在磁盤上和終端用戶設備上信息的保密性存在不少威脅,所以許多有敏感信息的組織都有要求加密靜止數據的策略。此種策略的多數緣由與惡意軟件的威脅、數據的敏感性或保密性、或者法律規章相關。例如,HIPPA具備與加密電子保護的健康信息(EPHI)中靜止數據相關的指導意見,而且其餘保護我的可識別信息(PII)的法律也在發揮做用。
一些組織正在推進加密HDFS上的靜止數據,Hadoop並不原生地提供該功能。然而,能夠將第三方庫和其餘產品與Hadoop一塊兒使用來知足這些需求,並且Rhino項目(如第10章中的討論)也正在致力於解決Hadoop中的這個問題。
大多數公司在企業內部都有各式各樣的安全基礎設施,包括用於認證的公鑰基礎設施(PKI)組件、活動目錄實例、安全令牌服務、屬性服務和用於認證用戶的策略服務器,提供受權憑據,並作出和實施訪問控制決策。Hadoop的原生安全機制並不總能讓你與各個組織的安全基礎設施「適配」或集成。當安全需求指定要將企業級應用與組織的安全基礎設施集成時,安全架構師的工做就是設計一個解決方案,可以在使用Hadoop的同時,使用其餘工具與安全基礎設施相集成。
近來,大量的項目、Hadoop插件和專門的Hadoop發行版已經承諾了要加強Hadoop的安全性。Hortonworks的Knox Gateway、Intel的安全加強型Hadoop發行版和諸如Rhino等開源項目已經發布,並實現了幫助企業級應用開發者知足安全需求的承諾。不管如何,重要的是要記住每一個企業級應用都是不一樣的,並且每一個部署中的安全需求也將是不一樣的。
在討論細節以前,重要的是要理解一些通常的基礎知識和指南,用於爲使用Hadoop的企業級應用提供安全保證。當大量的項目都只關注於特定的安全機制,而不是聽從某些適用於任何項目的、常識性的指導方針時,它們在運行過程當中都會出現問題。
基於客戶的任務和需求,每一個項目的企業安全策略均可能不一樣,但卻都聽從這些常識規則:
● 肯定安全需求——理解安全需求很關鍵。對於認證、訪問控制、審計、加密、完整性和隱私的需求將由組織自身來決定。須要問的一些問題可能會圍繞着Hadoop MapReduce做業結果數據集的安全性,以及Hadoop運行時自身的安全性(爲進行查詢和運行做業的應用程序/用戶提供訪問控制)。與適當的決策制定者會晤來理解哪些是須要的,以即可以作相應的準備。
● 從一開始就設計安全性——這些類型項目最大的問題之一就是到最後才嘗試改進安全性,這樣的實踐致使了短暫且脆弱的架構,一般會註定項目的失敗。若是項目中有本章所討論的安全需求,但卻認爲能夠只關注數據分析然後續再嘗試考慮保證解決方案安全性的話,那麼會有極大的失敗風險。應該關注於開發能夠與有關當局進行討論的初始整體安全架構,以得到概念上的承認。
● 不要使用不須要的安全性——若是沒有要達到本章所討論的某些目標的安全需求,那麼就不要作任何事!不要實現那些不須要的東西來增長複雜性和性能開銷。
● 使用「防護縱深」方案——永遠不要假設使用個別安全方案或機制就可以阻止或預防攻擊或違反安全策略。防護縱深策略包含多層防護。
● 牢記藍圖——瞭解數據的生命週期(如前面圖12-1中所示)。理解提供安全性可能意味着訪問控制,以及在整個數據生命週期(從原始數據源中的數據,到加載到Hadoop集羣中的數據,再到結果數據集)中保持和實施策略。
接下來的幾小節會深刻到知足某些安全需求的具體細節中,並補充Hadoop原生提供的安全機制。討論關注於三個主要方案,在與Hadoop原生機制結合的同時,它們提供了企業級安全的構成組件。在接下來的這些小節中,討論將聚焦於Apache Accumulo。
Apache Accumulo是一個稀疏的、分佈式的、有序的以及多維度的鍵/值存儲,提供單元格級別的細粒度訪問控制屬性。它於2008年由NSA開發,基於Google BigTable的設計,於2011年發佈到Apache開源社區,而且如今是頂級Apache項目。它是構建在Hadoop和Zookeeper之上的、高度可擴展的NoSQL數據庫。開發它的部分緣由是爲了解決大數據安全問題。
Accumulo擴展了BigTable的數據模型,但添加了一個元素,以提供單元格級別的、強制的基於屬性的訪問控制(ABAC)。可使用可見性控制來標記全部導入到Accumulo中的數據,當數據分析師查詢數據時,基於訪問控制策略中的可見性控制,他們將僅能看到你指望他們看到的內容。Accumulo的API爲你提供的能力包括編寫認證用戶的客戶端,以及與企業級屬性服務相集成,並拉取用戶的受權憑證以提供某個級別的訪問控制。Accumulo還提供將用戶和受權信息保存在其自身中的能力。
如圖12-2中所示,Accumulo是一個鍵/值存儲,它的鍵是一個5元組。Accumulo中的鍵由行ID、列族、列限定符、列可見性和時間戳構成。此5個元素的鍵與一個值相關聯。
圖12-2 Accumulo數據模型
該5元組鍵提供原子性、本地性、惟一性、訪問控制和版本化。重要的是要注意鍵中的時間戳維度包含了基於不一樣的時間和日期,提供相同數據多個版本的能力。大致來講,Accumulo的數據模型多數借用了BigTable數據模型,但添加了可見性元素來提供面向數據的安全——它將僅返回那些運行查詢的用戶/應用程序的憑據知足可見性標籤的單元格。
Accumulo和HBase中數據級安全性的差別
HBase和Accumulo是相似的——它們都是在Hadoop之上運行BigTable實現的Apache項目。HBase和Accumulo中的安全性提供相似的數據級安全,但方式不一樣。如第10章中的討論,HBase能夠對數據提供以逐個表或逐個列爲基礎的訪問控制。當前,它還不支持Accumulo能夠作到的單元格安全性,但Rhino項目的Intel發行版正在實施這方面的工做,使得HBase不久後可能會支持基於單元格的安全。
HBase能夠與Hadoop的安全模型輕易地集成(使用Kerberos),並且此方案與Hadoop生態系統的其他部分一致。而另外一方面,Accumulo是一個較新的頂層Apache項目,包含一個內部訪問控制數據庫,並且它實現安全性的方式與Hadoop生態系統中其餘工具不一樣。
HBase和Accumulo都很流行。基於其單元格級別的訪問控制安全特性,Accumulo在高安全環境中是最流行的,並承諾提供與強制訪問控制(MAC)和差別性安全相關的解決方案。
大多數較熟悉關係型數據庫的開發者一般習慣於看到相似於表12-1的表,它是一個二維的模型。
表12-1 關係數據模型中的示例數據
名 字 |
大 學 |
出生所在州 |
籤 名 短 語 |
Billy |
UCLA |
West Virginia |
「Brutal」 |
Jeff |
UVA |
New Jersey |
「C’Mon Man」 |
在Accumulo的結構中,相同的數據看上去會相似於表12-2,其中使用了較細的粒度來保存數據,包括可見性和可以跟蹤數據隨時間變化的時間戳。
表12-2 Accumulo數據模型中的數據
行ID |
族 |
限 定 符 |
可 見 性 |
時 間 戳 |
值 |
Billy |
School |
University |
Public |
20130503 |
UCLA |
Billy |
BirthRecord |
State of Birth |
Admin |
20120503 |
West Virginia |
Billy |
Greeting |
Signature Phrase |
Public |
20120503 |
「Brutal」 |
Jeff |
School |
University |
Public |
20120503 |
UVA |
Jeff |
BirthRecord |
State of Birth |
Admin |
20120503 |
New Jersey |
Jeff |
Greeting |
Signature Phrase |
Public |
20120503 |
「C’Mon Man」 |
注意在表12-2中,可見性被標記了安全標籤。可使用與/或布爾邏輯將這些標籤添加到記錄中。例如,能夠給出相似於表12-3的受權策略,其中能夠建立受權憑據並與用戶關聯,將訪問限定爲表中的每一個單元格。
表12-3 安全策略示例及其安全標籤語法
訪問某條記錄的策略示例 |
安全標籤語法 |
必須是共和黨人並且是美國公民 |
Republican & USCitizen |
必須是警察,或者必須是美國公民且在武裝部隊中 |
Police Officer | (USCitizen & ArmedForces) |
必須是項目管理者並且必須在FGM或White Oak組織中 |
ProjectManager & (FGM | White Oak) |
超過17歲或者父母贊成 |
Over17 | parentalConsent |
在Accumulo的安全模型中,用戶向可信的客戶端(做爲開發人員,能夠編寫這樣的客戶端)進行認證,而客戶端要負責認證用戶並向Accumulo傳遞適當的受權憑據。你的可選方案爲與本身的認證和受權系統相集成,或者使用Accumulo的內部認證/受權組件——能夠在其中保存用戶和他們的受權憑據。本小節爲每種方案都提供了一個示例。
讓咱們考慮一個大學數據庫的示例,其中某大學從各個部門和下屬組織收集了關於其學生的數據。在此示例中,有來自校園醫療中心、財政中心、大學管理處、體育設施和校園警察的數據。你收集了各類各樣的信息,並且整個組織能夠查詢這些信息。你的需求是保護某些信息,例如以下所述:
● 學生醫療檢查記錄應該只對醫護人員和大學管理處可見。
● 田徑學院學生體育相關的記錄應該只對他們的教練可見,有時也可對醫護人員可見。
● 購買記錄、評分以及諸如社會安全號碼等敏感信息應該只對大學管理處可見。
● 學生在校園警察處的記錄應該只對校園警察或者大學管理處可見。
對於本例,讓咱們將一些樣例數據加載到Accumulo數據庫中,如表12-4所示。在這個簡單的例子中,有一位名叫Kirk Rest的學生,你有關於他的各類信息,這些信息均是從大學中的大量數據源收集而來的。
表12-4 大學數據示例中的鍵/值
行ID |
族 |
限 定 符 |
可 見 性 |
時 間 戳 |
值 |
Kirk Rest |
SSN |
999999999 |
ADMIN |
20050612 |
|
Kirk Rest |
Phone |
804-555-0005 |
ADMIN |
20050612 |
|
(續表)
行ID |
族 |
限 定 符 |
可 見 性 |
時 間 戳 |
值 |
Kirk Rest |
Address |
111 Carson Ave, Richmond VA |
ADMIN |
20050612 |
|
Kirk Rest |
Weight |
170 |
MEDICAL | COACH |
20110711 |
|
Kirk Rest |
Running Test |
10K |
COACH |
20110812 |
56 |
Kirk Rest |
Running Test |
10K |
COACH |
20110517 |
58 |
Kirk Rest |
Running Test |
5K |
COACH |
20110716 |
24 |
Kirk Rest |
Running Test |
5K |
COACH |
20110612 |
27 |
Kirk Rest |
Payment |
Semester Payment |
ADMIN |
20111223 |
1000 |
Kirk Rest |
Medical Test Report |
Cholesterol |
MEDICAL |
20111222 |
200 |
Kirk Rest |
Medical Test Report |
Biopsy |
MEDICAL |
20111012 |
Negative |
Kirk Rest |
Grade |
Organic Chem |
ADMIN |
20111201 |
A |
Kirk Rest |
Grade |
Calculus 1 |
ADMIN |
20111201 |
B |
Kirk Rest |
Grade |
Radical Presbyterianism |
ADMIN |
20100612 |
D |
Kirk Rest |
Police Charge |
Curfew Violation |
ADMIN | POLICE |
20071103 |
Pending Hearing |
Kirk Rest |
Police Charge |
DUI Arrest |
ADMIN | POLICE |
20091104 |
Guilty |
假定將此信息加載到已經安裝在測試Hadoop實例上的Accumulo存儲中。爲此,應該使用Accumulo shell,它是一個簡單的客戶端,能夠用於建立和修改表,以及建立用戶併爲這些用戶分配受權憑據。因爲本章關注的是安全,而非Accumulo的更多細節,所以這裏不討論加載數據的詳情。
注意:
因爲不一樣版本的Accumulo須要與不一樣版本的Hadoop和Zookeeper一塊兒工做,所以這有時是對安裝的一個挑戰!上手Accumulo的一種簡單方法是使用已經配置好的虛擬機(VM)。Sqrrl公司的網站上提供一個獨立的亞馬遜機器實例(AMI),用於Apache Accumulo的快速入門,而且該公司還提供一個在Oracle VirtualBox上預先配置好的VM。更多詳情請參見位於http://www.sqrrl.com/的網站,以及位於http://blog.sqrrl.com/post/40578606670/ quick-accumulo-install/的VM。
Accumulo針對快速獲取鍵對應的值作了優化。爲此,開發的Accumulo客戶端(在這種狀況下,客戶端就是Accumulo shell)要建立一個對值進行迭代的掃描器。正如在代碼清單12-1中所看到的那樣,scan命令容許你在建立的新表——universitydata——中對值進行迭代(以root身份運行,而root對錶中的全部內容均有訪問權限)。
代碼清單12-1:查看數據
<span style="font-family:Microsoft YaHei;font-size:14px;">root@accumulo universitydata> scan Kirk Rest Address:111Carson Ave, Richmond VA [ADMIN] Kirk RestGrade:Calculus 1 [ADMIN] B Kirk RestGrade:Organic Chem [ADMIN] A Kirk RestGrade:Radical Presbyterianism [ADMIN] D Kirk Rest MedicalTest Report:Cholesterol [MEDICAL] 200 Kirk Rest NedicalTest Report:Biopsy [MEDICAL] Negative Kirk RestPayment:Semester Payment [ADMIN] 1000 Kirk RestPhone:8045550005 [ADMIN] Kirk Rest PoliceCharge:Curfew Violation [ADMIN|POLICE] Pending Hearing Kirk Rest PoliceCharge:DUI Arrest [ADMIN|POLICE] Guilty Kirk Rest RunningTest:10K [COACH] 56 Kirk Rest RunningTest:5K [COACH] 27 Kirk RestSSN:99999999 [ADMIN] Kirk Rest Weight:170 [MEDICAL|COACH]</span>
爲演示單元格可見性的示例,須要建立下列用戶:
● 醫生(drhouse),爲其分配MEDICAL角色
● 管理員(denyseAccountant),爲其分配ADMIN角色
● 教練(coachTark),爲其分配COACH角色
● 警察局長(chiefDoug),爲其分配POLICE角色
如代碼清單12-2所示,使用shell來爲全部這些可以讀取表的用戶分配訪問權限(授予他們每一個人Table.READ權限),並使用setauths命令爲他們分配用於可見性的適當角色。
代碼清單12-2:分配訪問權限和用戶視圖
<span style="font-family:Microsoft YaHei;font-size:14px;">root@accumulo universitydata> grantTable.READ -t universitydata -u drhouse root@accumulouniversitydata> setauths -s MEDICAL -user drhouse root@accumulouniversitydata> grant Table.READ -t universitydata -u denyseAccountant root@accumulouniversitydata> setauths -s ADMIN -user denyseAccountant root@accumulo universitydata> grant Table.READ -t universitydata -ucoachTark root@accumulouniversitydata> setauths -s COACH -user coachTark root@accumulo universitydata> grant Table.READ -t universitydata -uchiefDoug root@accumulo universitydata>setauths -s POLICE -user chiefDoug</span>
最後,爲展現Accumulo如今將保護對錶的訪問,以每一個用戶的身份登陸並使用Accumulo shell。對universitydata表進行掃描(或迭代)。代碼清單12-3展現瞭如何以用戶coachTark、drHouse、denyseAccountant和chiefDoug的身份登陸,並對錶進行迭代,並且表基於每一個用戶的權限提供了訪問控制。
代碼清單12-3:演示用戶的角色和可見性
<span style="font-family:Microsoft YaHei;font-size:14px;">root@accumulo universitydata> user coachTark Enter password foruser coachTark: ********* coachTark@accumulouniversitydata> scan Kirk Rest RunningTest:10K [COACH] 56 Kirk Rest RunningTest:5K [COACH] 27 Kirk Rest Weight:170[MEDICAL|COACH] root@accumulouniversitydata> user drhouse Enter password foruser drhouse: ******* drhouse@accumulouniversitydata> scan Kirk Rest MedicalTest Report:Cholesterol [MEDICAL] 200 Kirk Rest NedicalTest Report:Biopsy [MEDICAL] Negative Kirk Rest Weight:170[MEDICAL|COACH] drhouse@accumulouniversitydata> user denyseAccountant Enter password foruser denyseAccountant: ****** denyseAccountant@accumulouniversitydata> scan Kirk Rest Address:111Carson [ADMIN] Kirk RestGrade:Calculus 1 [ADMIN] B Kirk Rest Grade:OrganicChem [ADMIN] A Kirk RestGrade:Radical Presbyterianism [ADMIN] D Kirk RestPayment:Semester Payment [ADMIN] 1000 Kirk RestPhone:8045550005 [ADMIN] Kirk Rest PoliceCharge:Curfew Violation [ADMIN|POLICE] Pending Hearing Kirk Rest PoliceCharge:DUI Arrest [ADMIN|POLICE] Guilty Kirk RestSSN:999999999 [ADMIN] denyseAccountant@accumulouniversitydata> user chiefDoug Enter password foruser chiefDoug: ********* chiefDoug@accumulouniversitydata> scan Kirk Rest PoliceCharge:Curfew Violation [ADMIN|POLICE] Pending Hearing Kirk Rest Police Charge:DUI Arrest[ADMIN|POLICE] Guilty</span>
正如從代碼清單12-3中看到的那樣,Accumulo可以基於每一個用戶的受權控制來限制訪問,你已經經過使用Accumuloshell演示了這一點。如今,讓咱們用Java構建一個Accumulo客戶端,該客戶端將爲本例演示相同級別的訪問控制,並與企業中的身份和訪問管理基礎設施相集成。
當涉及與企業基礎設施集成時,Accumulo有一個靈活的模型。如前面提到的,Accumulo客戶端的職責是認證用戶和獲取用戶的受權憑據,並將其展現給Accumulo以供處理之用。只要使用企業屬性存儲中的相同屬性或角色標記了Accumulo表中的數據可見性,它就能夠優雅地工做。若是沒有標記的話,那麼極可能須要對從客戶端屬性存儲中獲取的屬性進行一些處理,以確保它們是徹底相同的角色。
爲了演示這一點,讓咱們瀏覽一個如何編寫簡單客戶端的示例,該客戶端經過自選的認證機制來認證用戶,並從自選的屬性服務或LDAP目錄拉取受權憑據。
代碼清單12-4展現了一個編寫鏈接到Accumulo的Java類的示例。爲了鏈接,必須使用Connector類創建一個Accumulo鏈接。爲此,必須首先經過初始化ZookeeperInstance類,鏈接到跟蹤Accumulo的Zookeeper實例,而ZookeeperInstance類將會返回一個鏈接器。
代碼清單12-4:Accumulo客戶端代碼示例
<span style="font-family:Microsoft YaHei;font-size:14px;">import java.util.Collection; importjava.util.Collections; importjava.util.Map.Entry; import org.apache.accumulo.core.client.Connector; importorg.apache.accumulo.core.client.ZooKeeperInstance; importorg.apache.accumulo.core.client.Scanner; importorg.apache.accumulo.core.data.Key; importorg.apache.accumulo.core.data.Range; importorg.apache.accumulo.core.data.Value; importorg.apache.accumulo.core.security.Authorizations; public classQueryExample { public static void main(String[] args)throws Exception { //Simple Example of the name of youraccumulo instance & zookeeper ZooKeeperInstanceinst = new ZooKeeperInstance("accumulo", "localhost"); //Obviously this is just an example Connector connector =inst.getConnector("root", "secret"); //Scan in the username and password forthis simple example java.util.Scanner in = newjava.util.Scanner(System.in); System.out.println("Username:"); String username = in.nextLine(); System.out.println("Password:"); String password = in.nextLine(); Authorizations auths = null; try { //An example of how you can interactwith other systems (LDAP,etc) CustomAuthenticator authenticator = newCustomAuthenticator(); authenticator.authenticate(username,password); //Retrieve credentials from externalsystem auths =authenticator.getAuthorizationInfo(username); } catch (ExceptionauthenticationException) { System.out.println("AuthenticationFailure."); System.exit(-1); } // Search our university data example& print out everything Scanner scanner =connector.createScanner("universitydata", auths); for (Entry<Key,Value> entry :scanner) { System.out.println( entry.getKey().toString()); } } }</span>
一旦創建了鏈接,就要認證用戶。在這種狀況下,對於這樣一個簡單的示例,從命令行抓取用戶信息,並將其傳遞給一個叫作CustomAuthenticator的外部類,編寫此類僅是爲了展現可使用Accumulo以外的另外一種認證和受權機制。在該類中,將從命令行中掃描到的用戶名和密碼傳入該類的authenticate()方法。若是用戶認證成功,那麼接着從外部存儲拉取用戶的受權憑據,並返回Accumulo指望的org.apache.accumulo.core.security. Authorizations類中的值。最後,如以前示例中所示,建立一個掃描器對相同表中的值進行迭代,並簡單地打印結果。
代碼清單12-5展現了命令行中的結果。在此示例中,設置了一個外部的LDAP目錄,其中包含一個叫作joeUser的用戶,其角色爲ADMIN。
代碼清單12-5:Accumulo客戶端的結果
<span style="font-family:Microsoft YaHei;font-size:14px;">Script started on Fri 03 May 2013 12:45:09 AM EDT $ java QueryExample 13/05/03 00:45:16INFO zookeeper.ZooKeeper: Clientenvironment:zookeeper.version=3.4.3--1, built on 03/20/2012 16:15 GMT 13/05/03 00:45:16INFO zookeeper.ZooKeeper: Client environment:host.name=ubuntu 13/05/03 00:45:16INFO zookeeper.ZooKeeper: Clientenvironment:java.version=1.6.0_27 13/05/03 00:45:16INFO zookeeper.ZooKeeper: Client environment:java.vendor=SunMicrosystems Inc. 13/05/03 00:45:16INFO zookeeper.ZooKeeper: Clientenvironment:java.home=/usr/lib/jvm/java-6-openjdk-amd64/jre 13/05/03 00:45:16INFO zookeeper.ZooKeeper: Client environment:java.class.path=. 13/05/03 00:45:16 INFO zookeeper.ZooKeeper: Clientenvironment:java.library.path=/usr/lib/jvm/java-6-openjdkamd64/ jre/lib/amd64/server:/usr/lib/jvm/java-6-openjdkamd64/ jre/lib/amd64:/usr/lib/jvm/java-6-openjdkamd64/ jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib/x86_64-linuxgnu/ jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linuxgnu:/ usr/lib/jni:/lib:/usr/lib 13/05/03 00:45:16 INFO zookeeper.ZooKeeper: Client environment:java.io.tmpdir=/tmp 13/05/03 00:45:16 INFO zookeeper.ZooKeeper: Client environment:java.compiler=<NA> 13/05/03 00:45:16 INFO zookeeper.ZooKeeper:Client environment:os.name=Linux 13/05/03 00:45:16 INFO zookeeper.ZooKeeper:Client environment:os.arch=amd64 13/05/03 00:45:16 INFO zookeeper.ZooKeeper: Client environment:os.version=3.2.0-29-generic 13/05/03 00:45:16 INFO zookeeper.ZooKeeper: Client environment:user.name=accumulo 13/05/03 00:45:16 INFO zookeeper.ZooKeeper: Client environment:user.home=/usr/lib/accumulo 13/05/03 00:45:16 INFO zookeeper.ZooKeeper: Client environment:user.dir=/usr/lib/accumulo/classes 13/05/03 00:45:16 INFO zookeeper.ZooKeeper:Initiating client connection, connectString=localhost sessionTimeout=30000 watcher=org.apache.accumulo.core.zookeeper .ZooSession$AccumuloWatcher@6791d8c1 13/05/03 00:45:16 INFO zookeeper.ClientCnxn: Opening socket connection to server /127.0.0.1:2181 13/05/03 00:45:16 INFOclient.ZooKeeperSaslClient: Client will not SASL-authenticate because the defaultJAAS configuration section 'Client' could not be found. If youare not using SASL, you may ignore this. On the other hand, if you expected SASL to work, please fix your JAASconfiguration. 13/05/03 00:45:16 INFO zookeeper.ClientCnxn: Socket connection established tolocalhost/127.0.0.1:2181, initiating session 13/05/03 00:45:16 INFO zookeeper.ClientCnxn: Session establishment complete on serverlocalhost/127.0.0.1:2181, sessionid = 0x13e6757677611f1, negotiated timeout = 30000 Username: joeAdmin Password: ****** Kirk Rest Address:111 Carson [ADMIN] 20050612false Kirk Rest Grade:Calculus 1 [ADMIN] 20111201false Kirk Rest Grade:Organic Chem [ADMIN] 20111201false Kirk Rest Grade:Radical Presbyterianism[ADMIN] 20100612 false Kirk Rest Payment:Semester Payment [ADMIN]20111223 false Kirk Rest Phone:804 [ADMIN] 20050612 false Kirk Rest Police Charge:Curfew Violation[ADMIN|POLICE] 20071103 false Kirk Rest Police Charge:DUI Arrest[ADMIN|POLICE] 20091104 false Kirk Rest SSN:99 [ADMIN] 20050612 false</span>
在此示例中進行認證的用戶——joeAdmin,與以前示例中的用戶不一樣,該用戶並無保存在Accumulo中。如這裏所示,能夠編寫一個Java客戶端來認證用戶,從企業存儲拉取受權憑據,並查詢Accumulo。
還有更多關於Apache Accumulo的內容,比此小節中所涵蓋的要多得多。然而,重要的是要意識到對於爲了數據安全而使用Accumulo的組織來講,Accumulo僅是企業安全解決方案的一個方面。企業級安全須要防護縱深,而且必須覆蓋整個數據生命週期的安全——而不是僅當數據在Hadoop中保存時。
Hadoop中靜止數據的加密是許多不一樣項目(一些開源項目和一些商業項目)都在爲之努力的一個主題。Hadoop並不原生支持此功能。當前,大量公司正在使用不一樣的Hadoop發行版來保護敏感數據,這些發行版不只保護敏感信息,並且聽從法律(例如HIPAA)和其餘安全法規。許多組織想要使用靜止數據的加密來防止惡意用戶嘗試獲取對DataNode的未受權訪問。
當前的一些解決方案包括Gazzang zNcrypt,它爲Cloudera CDH發行版提供數據安全性。Intel的Hadoop發行版於2013年初發布,已經在使用Intel公司的Xeon處理器時對加密靜止數據進行了優化。看上去天天都有新的解決方案出現——但到目前爲止,全部這些方案都受專利保護,或者要求使用某個特定的Hadoop發行版。如第10章中提到的,Rhino項目(由Intel貢獻給Apache)包含了一些改進,包括分佈式密鑰管理和實現靜止數據加密的能力。Hadoop開發者社區目前正在針對將其加入到將來的某個Hadoop發行版而進行審查。
不管將何種機制用於實現加密Hadoop中的靜止數據,很是重要的一點是也要理解此功能的意外效果。若是須要一個加密靜止數據的解決方案,那麼要記住加密將會對性能產生影響。若是認爲MapReduce做業可能比如今所指望的更慢,那麼要想象一下加密靜止數據將會對性能產生什麼影響。Intel的Hadoop發行版在使用特定Intel處理器的機器上對加密和解密進行了優化。正是因爲Intel的發行版在開發時考慮了本身的硬件加速器,於是對企業架構師來講,還有很重要的一點是要評估加密應用程序的靜止數據所帶來的成本——若是確實須要此功能,那麼請爲性能作相應的準備。
目前來講,除非迫切須要加密靜止數據,不然在此時,可能會有一些緣由讓你選擇避免這樣作。首先,因爲分佈式數據和密鑰管理的挑戰,這是一個很是複雜的功能領域。第二,Rhino項目在該領域帶來的提高可能即將到來,而在此以前,你可能仍是會被鎖定到某個特定的發行版或提供商。最後,如前文所提到的,會存在與加密靜止數據相關的性能損失。若是數據如此敏感,以至於正在探討加密靜止數據可能性的話,那麼下一小節多是一個潛在的解決方案。
如前面提到的,有保密和敏感數據的組織傳統上將隔離Hadoop集羣網絡做爲一種知足安全需求的方案。這些組織一般基於用戶的受權級別控制對各個集羣的訪問,將物理安全做爲一種保護機制。其餘一些組織則使用一種限制較少的方案,即分隔網絡,但容許可信的服務器和工做站在網絡之間進行一些傳輸。
此種方案仍然是很是可行的選項,這有許多緣由:
● 安全集成的複雜性——若是安全策略很是嚴格並且數據很是敏感,以致於必須將大量非原生的安全控制集成到Hadoop集羣中,那麼請考慮使用網絡隔離——將它與其餘網絡分隔開來,並限制僅有受權的用戶可以訪問。若是這樣作,那麼只須要考慮Hadoop結果數據集的可見性,而不須要考慮Hadoop運行時安全。這將最小化總體風險,並且最有可能下降成本。
● 性能——人們常說,「安全是性能的敵人」。在某個解決方案中實施的安全機制越多,它一般就會變得越慢。對於保證Hadoop安全來講,狀況就是這樣的,尤爲是若是正在考慮使用第三方工具來加密和解密HDFS上的靜止數據的話。許多人將會選擇網絡隔離方案來簡單地避免性能損失。
● 數據的敏感程度不一樣——組織中的某些數據可能只能對某些人羣可見。若是是這種狀況,那麼Hadoop做業的結果集也將是敏感的。儘管Hadoop中的某些工具(例如HBase和Accumulo)能夠提供某種列級別(HBase)和單元格級別(Accumulo)的訪問過濾方式,但Hadoop中的其餘工具則不提供該級別的安全性。若是正在運行構建結果集的JavaMapReduce應用程序,並且正在使用各類各樣的不一樣工具,那麼明智之舉就是考慮基於用戶的可見性來分隔集羣。
● 不斷演進的Hadoop安全範疇——大量的Hadoop新產品、發佈版本和發行版正在提供新的安全特性。如第10章中提到的,Hadoop安全性加強可能即將在將來一年中到來。這些即將到來的變化將會影響使用Hadoop的企業級應用程序,而在瞭解這些變化產生的影響以前,不少組織正在選擇網絡隔離模型。
● 集成以前的數據安全審覈——因爲網絡隔離方案不支持其餘網絡中的企業級應用程序對數據的實時訪問,所以它容許在企業級應用程序使用數據材料以前,對其進行審覈和過濾,以最小化潛在的保密性風險和隱私泄露(這固然是一柄「雙刃劍」,由於網絡隔離一般是實時Hadoop的一個阻礙,並且須要一個發佈供企業級應用程序使用的數據集的處理過程)。
網絡隔離可以以不少方式實現企業級應用程序安全。圖12-3展現了一種作到這一點的方法。某個組織建立了「數據分析」網絡,使用物理的「氣隙」將其從組織的企業網絡中分離,以阻止在兩個網絡之間傳輸任何數據。具備適當訪問控制權限的數據科學家在數據分析網絡中的Hadoop集羣上執行查詢和MapReduce操做,並且對該網絡的訪問由物理安全和/或對用於執行查詢的客戶端機器的認證來控制。
圖12-3 使用導入/導出工做流的「氣隙」網絡隔離
爲了支持使用這些數據集結果的企業級應用程序,必須開發和應用一個重要的工做流處理過程:
(1) 首先,必須從企業網絡適當的數據庫和應用程序中抽取待分析的全部數據,將其寫入媒介,並帶入到隔離的網絡中。
(2) 一旦準備好了分析所用的數據並且已經將其加載到了集羣中,那麼就能夠運行HadoopMapReduce做業,直到生成待審查的結果。
(3) 對於結果來講,必須使用由外部企業級應用程序控制的受權策略來標記結果,或者對結果進行過濾,以便刪除敏感的、保密的或者受隱私保護的數據。
(4) 一旦過濾或使用訪問控制策略標記了此數據集,就能夠將該數據集寫入到媒介並導入到企業級應用程序。
對於許多組織來講,這是一個繁瑣的過程,由於涉及兩個網絡的物理隔離,並且須要一個工做流——從原始網絡中導出數據,將其導入到數據分析網絡,並進行分析、過濾,而後準備結果數據集並加載到企業級應用中。然而,當數據尤爲敏感時,許多組織仍是採起這個方案。
鑑於引入的複雜性,一些組織開始轉向一個相似的模型,即一種將流量限定爲從企業網絡中的可信主機到數據分析網絡的方案,如圖12-4所示。在這種狀況下,ETL過程能夠經過網絡完成,省去了前面所述處理過程的第(1)步。
圖12-4 使用單向傳輸的網絡隔離
將Apache Accumulo主要用於對數據進行訪問控制的一些組織,會對能夠發佈到企業網絡中的結果數據集執行數據過濾——例如,建立「企業網絡用戶」,他們的憑據與網絡中的最低受權等級相同。基於此用戶對待發布數據進行的過濾一般使得結果集更易於在內部發布,而沒必要擔憂不經意的信息泄露。
能夠以其餘無數種方式使用網絡隔離——這些只是其中的一部分。其餘一些方案包括基於所使用數據的類型隔離Hadoop集羣,而某些限制較少的方案包括容許與企業網絡中的機器互聯,使用ACL來限制只有可信主機可以訪問。
企業級安全解決方案的每一個部分都將取決於組織自身的安全需求——沒有任何兩個組織是徹底相同的。不管如何,本章提供的示例和指南應該可以在構建企業級安全解決方案時幫到你。
本章給出了企業級的安全視圖,關注於數據生命週期中的安全策略和以數據爲中心的視角。重要的是安全架構師們要理解這個藍圖,同時可以解決Hadoop和補充安全工具所能提供的不一樣方面的企業級安全。
本章以開發使用Hadoop的企業級應用中對安全顧慮的簡要概述做爲開始。你學習了Hadoop自身沒法解決的一些安全挑戰——包括面向數據的安全、差分隱私和靜止數據的加密。查看了大量用於構建使用Hadoop的企業級安全解決方案的方法,並瀏覽了一些指南和示例。學習瞭如何將ApacheAccumulo用於單元格級別的安全,並深刻考察了靜止數據的加密以及當前可用的一些方案。還學習了一些關於網絡隔離的方案,許多對暴露敏感數據有顧慮的組織都在使用這種方案。
對於Hadoop來講,安全固然是一個不斷演進的話題,並且是Hadoop在將來幾年中將持續增加的領域。第13章關注於Hadoop在一些其餘方面即將到來的改進,並討論當今新興的、且會在將來繼續增加的趨勢。
《Hadoop高級編程——構建與實現大數據解決方案》試讀電子書免費提供,有須要的留下郵箱,一有空即發送給你們。 別忘啦頂哦!