Apache Eagle:eBay開源分布式實時Hadoop數據安全引擎
2016-02-20 19:34:17 來源: 陳浩 高效運維 評論:0 點擊:
作者介紹
陳浩
Apache Eagle Committer 和 PMC 成員,eBay 分析平臺基礎架構部門高級軟件工程師,負責Eagle的產品設計、技術架構、核心實現以及開源社區推廣等。
消息
日前,eBay公司隆重宣布正式向開源業界推出分布式實時安全監控方案:Apache Eagle,該項目已于2015年10月26日正式加入Apache基金會成為孵化器項目。
- http://goeagle.io
Apache Eagle提供一套高效分布式的流式策略引擎,具有高實時、可伸縮、易擴展、交互友好等特點,同時集成機器學習對歷史模型訓練建立用戶畫像以實現智能實時地保護Hadoop生態系統中大數據的安全。
Eagle在eBay的使用場景
目前,Eagle的數據行為監控系統已經部署到一個擁有2500多個節點的Hadoop集群之上,用以保護數百PB數據的安全,并正計劃于2015年年底之前擴展到其他上十個Hadoop集群上,從而覆蓋eBay所有主要Hadoop的10000多臺節點。
在我們的生產環境中,我們已針對HDFS、Hive 等集群中的數據配置了一些基礎的安全策略,并將于年底之前不斷引入更多的策略,以確保重要數據的絕對安全。
目前,Eagle的策略涵蓋多種模式,包括從訪問模式、頻繁訪問數據集,預定義查詢類型、Hive 表和列、HBase 表以及基于機器學習模型生成的用戶Profile相關的所有策略等。
同時,我們也有廣泛的策略來防止數據的丟失、數據被拷貝到不安全地點、敏感數據被未授權區域訪問等。Eagle策略定義上極大的靈活性和擴展性使得我們未來可以輕易地繼續擴展更多更復雜的策略以支持更多多元化的用例場景。
項目背景
隨著大數據的發展,越來越多的成功企業或者組織開始采取數據驅動商業的運作模式。在eBay,我們擁有數千名工程師、分析師和數據科學家,他們每天訪問分析數PB級的數據,以為我們的用戶帶來無與倫比的體驗。在全球業務中,我們也廣泛地利用海量大數據來連接我們數以億計的用戶。
近年來,Hadoop已經逐漸成為大數據分析領域最受歡迎的解決方案,eBay也一直在使用Hadoop技術從數據中挖掘價值。例如,我們通過大數據提高用戶的搜索體驗,識別和優化精準廣告投放,充實我們的產品目錄,以及通過點擊流分析以理解用戶如何使用我們的在線市場平臺等。
目前,eBay的Hadoop集群總節點數據超過10000多個,存儲容量超過170PB,活躍用戶超過2000多。現在相關規模還在不斷增長中,同時為了支持多元化需求,我們引入越來越多樣的數據存儲和分析方案,比如Hive、MapReduce、Spark和HBase等,隨之帶來的管理和監控的挑戰越來越嚴峻,數據安全問題亦是其中最重要的之一。
大數據時代,安全問題開始變得空前的關鍵,特別eBay作為全球領先的電子商務公司,我們必須保證Hadoop中用戶數據的絕對安全。
通常我們的安全措施根據如下幾點:訪問控制、安全隔離、數據分類、數據加密以及實時數據行為監控。
然而經過廣泛的嘗試和研究,我們意識到沒有任何已經存在的產品或者解決方案,能夠充分滿足我們面臨海量實時數據流和多元化用例場景下數據行為監控的需求。為了逾越這道鴻溝,eBay決定從頭開始構建Eagle。
“Eagle 是開源分布式實時Hadoop數據安全方案,支持數據行為實時監控,能立即監測出對敏感數據的訪問或惡意的操作,并立即采取應對的措施”
我們相信Eagle將成為Hadoop數據安全領域的核心組件之一,因此我們決定將它的功能分享給整個社區。
目前我們已經將Eagle捐贈給Apache軟件基金會作為Apache孵化器項目開源,期望能夠同開源社區一同協作開發,使得Eagle不斷發展壯大,共同滿足開源社區中更廣泛的需求。
Eagle的數據行為監控方案可用于如下幾類典型場景:
◆監控Hadoop中的數據訪問流量
◆檢測非法入侵和違反安全規則的行為
◆檢測并防止敏感數據丟失和訪問
◆實現基于策略的實時檢測和預警
◆實現基于用戶行為模式的異常數據行為檢測
Eagle具有如下特點:
◆高實時:我們充分理解安全監控中高度實時和快速反應的重要性,因此設計Eagle之初,我們竭盡可能地確保能在亞秒級別時間內產生告警,一旦綜合多種因素確訂為危險操作,立即采取措施阻止非法行為。
◆可伸縮:在eBay,Eagle 被部署在多個大型Hadoop集群上,這些集群擁有數百PB的數據,每天有8億以上的數據訪問時間,因此Eagle必須具有處理海量實時數據的高度可伸縮能力。
◆簡單易用:可用性也是Eagle產品的核心設計原則之一。通過Eagle的Sandbox,使用者僅需數分鐘便可以設置好環境并開始嘗試。為了使得用戶體驗盡可能簡單,我們內置了許多很好的例子,只需簡單地點擊幾步鼠標,便可以輕松地完成策略地創建和添加。
◆用戶Profile:Eagle內置提供基于機器學習算法對Hadoop中用戶行為習慣建立用戶Profile的功能。我們提供多種默認的機器學習算法供你選擇用于針對不同HDFS特征集進行建模,通過歷史行為模型,Eagle可以實時地檢測異常用戶行為并產生預警。
◆開源:Eagle一直根據開源的標準開發,并構建于諸多大數據領域的開源產品之上,因此我們決定以Apache許可證開源Eagle,以回饋社區,同時也期待獲得社區的反饋、協作與支持。
Eagle概覽
1.Eagle Architecture 數據流接入和存儲(Data Collection and Storage)
Eagle提供高度可擴展的編程API,可以支持將任何類型的數據源集成到Eagle的策略執行引擎中。例如:
◆在Eagle HDFS審計事件(Audit)監控模塊中,通過Kafka來實時接收來自Namenode Log4j Appender 或者 Logstash Agent 收集的數據;
◆在Eagle Hive 監控模塊中,通過YARN API 收集正在運行Job的Hive查詢日志,并保證比較高的可伸縮性和容錯性。
2.數據實時處理(Data Processing)
流處理API(Stream Processing API):Eagle 提供獨立于物理平臺而高度抽象的流處理API,目前默認支持Apache Storm,但是也允許擴展到其他任意流處理引擎,比如Flink 或者 Samza等。
該層抽象允許開發者在定義監控數據處理邏輯時,無需在物理執行層綁定任何特定流處理平臺,而只需通過復用、拼接和組裝例如數據轉換、過濾、外部數據Join等組件,以實現滿足需求的DAG(有向無環圖),同時,開發者也可以很容易地以編程地方式將業務邏輯流程和Eagle策略引擎框架集成起來。
Eagle框架內部會將描述業務邏輯的DAG編譯成底層流處理架構的原生應用,例如Apache Storm Topology 等,從事實現平臺的獨立。
以下是一個Eagle如何處理事件和告警的示例:
- StormExecutionEnvironment env =
- ExecutionEnvironmentFactory.getStorm(config); // storm env
- StreamProducer producer = env.newSource(new
- KafkaSourcedSpoutProvider().getSpout(config)).renameOutputFields(1)
- // declare kafka source
- .flatMap(new AuditLogTransformer()) // transform event
- .groupBy(Arrays.asList(0)) // group by 1st field
- .flatMap(new UserProfileAggregatorExecutor()); // aggregate one-hour data by user
- .alertWithConsumer(“userActivity“,”userProfileExecutor“) // ML policy evaluation env.execute(); // execute stream processing and
- alert
告警框架(Alerting Framework): Eagle 告警框架由流元數據API、策略引擎服務提供API、策略Partitioner API 以及預警去重框架等組成:
1.流元數據API:允許用戶聲明事件的Schema,包括事件由哪些屬性構成、每個屬性的類型,以及當用戶配置策略時如何在運行時動態解析屬性的值等。
2.策略引擎服務提供API:允許開發者很容易地以插件的形式擴展新的策略引擎。WSO2 Siddhi CEP 引擎是Eagle 優先默認支持的策略引擎,同時機器學習算法也可作為另一種策略引擎執行。
3.擴展性:Eagle的策略引擎服務提供API允許你插入新的策略引擎
- public interface PolicyEvaluatorServiceProvider { public String
- getPolicyType(); // literal string to identify one type of
- policy public Class<? extends PolicyEvaluator> getPolicyEvaluator();
- // get policy evaluator implementation public List
- getBindingModules(); // policy text with json format to object
- mapping } public interface PolicyEvaluator { public void
- evaluate(ValuesArray input) throws Exception; // evaluate input event
- public void onPolicyUpdate(AlertDefinitionAPIEntity newAlertDef); //
- invoked when policy is updated public void onPolicyDelete(); //
- invoked when policy is deleted }
1.策略 Partitioner API:允許策略在不同的物理節點上并行執行。也允許你自定義策略Partitioner類。這些功能使得策略和事件完全以分布式的方式執行。
2.可伸縮性:Eagle 通過支持策略的分區接口來實現大量的策略可伸縮并發地運行
- public interface PolicyPartitioner extends Serializable { int
- partition(int numTotalPartitions, String policyType, String policyId);
- // method to distribute policies }
可伸縮的Eagle策略執行框架
3.機器學習模塊:
Eagle 支持根據用戶在Hadoop平臺上歷史使用行為習慣來定義行為模式或用戶Profile的能力。
擁有了這個功能,不需要在系統中預先設置固定臨界值的情況下,也可以實現智能地檢測出異常的行為。Eagle中用戶Profile是通過機器學習算法生成,用于在用戶當前實時行為模式與其對應的歷史模型模式存在一定程度的差異時識別用戶行為是否為異常。
目前,Eagle內置提供以下兩種算法來檢測異常,分別為特征值分解(Eigen-Value Decomposition)和 密度估計(Density Estimation)。
這些算法從HDFS 審計日志中讀取數據,對數據進行分割、審查、交叉分析,周期性地為每個用戶依次創建Profile 行為模型。一旦模型生成,Eagle的實時流策略引擎能夠近乎實時地識別出異常,分辨當前用戶的行為可疑的或者與他們的歷史行為模型不相符。
下圖簡單描述了目前Eagle中用戶Profile的離線訓練建模和在線實時監測的數據流:
用戶Profile離線訓練以及異常監測架構
基于用戶 Profile的Eagle在線實時異常監測是根據Eagle的通用策略框架實現的,用戶Profile只是被定義為Eagle系統中一個策略而已,用戶Profile的策略是通過繼承自Eagle統一策略執行接口的機器學習Evaluator來執行,其策略的定義中包括異常檢測過程中需要的特征向量等(在線檢測與離線訓練保持一致)。
此外,Eagle 提供自動訓練調度器,可根據文件或者UI配置的時間周期和粒度來調度這個基于Spark的離線訓練程序,用于批量創建用戶Profile和行為模型,默認該訓練系統以每月的頻率更新模型,模型粒度為一分鐘。
Eagle 內置的機器學習算法基本思想如下:
核密度估計算法 (Density Estimation)
該算法的基本思想是根據檢測的訓練樣本數據針對每個用戶計算出對應的概率密度分布函數。
首先,我們對訓練數據集的每個特征均值標準化,標準化可以使得所有數據集轉化為相同尺度。然后,在我們的隨機變量概率分布估計中,我們采用高斯分布式函數來計算概率密度。假設任意特征彼此相互獨立,那么最終的高斯概率密度就可以通過分解各個特征的概率密度而計算得到。
在線實時檢測階段,我們可以首先計算出每個用戶實時行為的概率。如果用戶出現當前行為的可能性低于某個臨界值,我們標識為異常警告,而這個臨界值完全由離線訓練程序通過稱為“馬修斯相關系數”(Mathews Correlation Coefficient)的方法計算而得。
單一維度上用戶行為直方圖
特征值分解算法(Eigen-Value Decomposition)
該算法中,我們認為生成用戶Profile的主要目的是為了從中發現有價值的用戶行為模式。為了實現這個目的,我們可以考慮對特征依次進行組合,然后觀察他們相互之間是如何影響的。
當數據集非常巨大時,正如通常我們所遇到的場景,由于正常模式的數量非常之多,以至于特征集的異常的模式很容易被忽視。也由于正常的行為模式通常處于非常低維的子空間內,因此我們也許可以通過降低數據集的維度來更好的理解用戶的真正的行為模式。
該方法同樣可以對于訓練數據集進行降噪。根據對大量用戶特征數據方差的進行運算,通常在我們的用例場景中選取方差為95%作為基準,我們可以得到方差為95%的主成分的數量為k,因此我們將前k個主成分認為是用戶的正常子空間,而剩下的(n-k)個主成分則被視為異常子空間。
當線實時異常檢測時,如果用戶行為模式位于正常子空間附近,則認為該行為正常,否則,如果用戶行為模式位于異常子空間附近,則會立即報警,因為我們相信通常用戶行為一般應該位于正常子空間內。至于如何計算用戶當前行為接近正常還是異常子空間,我們采用的是歐氏距離法(Euclidian distance method)。
展示重要的用戶行為模式成分
Eagle 服務
策略管理器:Eagle策略管理器提供交互友好的用戶界面和REST。
API 供用戶輕松地定義和管理策略,一切只需幾次鼠標點擊而已。Eagle的用戶界面使得策略的管理、敏感元數據的標識和導入、HDFS或Hive 的資源瀏覽以及預警儀表等功能都非常易于使用。
Eagle 策略引擎默認支持WSO2的Siddhi CEP引擎和機器學習引擎,以下是幾個基于Siddi CEP的策略示例:
◆單一事件執行策略(用戶訪問Hive中的敏感數據列)
- from hiveAccessLogStream[sensitivityType==’PHONE_NUMBER’] select *
- insert into outputStream;
◆基于窗口的策略(用戶在10分鐘內訪問目錄 /tmp/private 多余 5次)
- hdfsAuditLogEventStream[(src ==
- ‘/tmp/private’)]#window.externalTime(timestamp,10 min) select user,
- count(timestamp) as aggValue group by user having aggValue >= 5 insert
- into outputStream;
查詢服務(Query Service):
Eagle 提供類SQL的REST API用來實現針對海量數據集的綜合計算、查詢和分析的能力,支持例如過濾、聚合、直方運算、排序、top、算術表達式以及分頁等。Eagle優先支持HBase 作為其默認數據存儲,但是同時也支持基JDBC的關系型數據庫。
特別是當選擇以HBase作為存儲時,Eagle便原生擁有了HBase存儲和查詢海量監控數據的能力,Eagle 查詢框架會將用戶提供的類SQL查詢語法最終編譯成為HBase 原生的Filter 對象,并支持通過HBase Coprocessor進一步提升響應速度。
query=AlertDefinitionService[@dataSource=”hiveQueryLog”]{@policyDef}&pageSize=100000
后續計劃
過去兩年中,在eBay 除了被用于數據行為監控以外,Eagle 核心框架還被廣泛用于監控節點健康狀況、Hadoop應用性能指標、Hadoop核心服務以及整個Hadoop集群的健康狀況等諸多領域。
我們還建立一系列的自動化機制,例如節點修復等,幫助我們平臺部門極大得節省了我們人工勞力,并有效地提升了整個集群資源地利用率。
以下是我們目前正在開發中地一些特性:
◆擴展機器學習模型對Hive和HBase支持
◆提供高度可擴展的API,以方便集目前業界廣泛使用的其他監控預警平臺或者工具,如Ganglia和Nagios等,同時支持敏感數據的導入,如與Dataguise
集成等。
◆此外,我們正在積極整理其他Hadoop 集群監控模塊,期望在后續發布中開源給社區,例如:
◆HBase 監控
◆Hadoop 作業性能監控
◆Hadoop 節點監控
感謝
感謝以下來自Apache Eagle社區和eBay公司的聯合作者們對本文的貢獻:
張勇,Apache Eagle Committer和首席架構師,eBay Sr. MTS 資深架構師
孫立斌,Apache Eagle Committer和PMC,eBay 軟件工程師
蔣吉林,Apache Eagle Committer和PMC,eBay 軟件工程師
趙晴雯,Apache Eagle Committer和PMC,eBay 軟件工程師
eBay 分析平臺基礎架構部(Analytics Data Infrastructure)是eBay的全球數據及分析基礎架構部門,負責eBay在數據庫、數據倉庫、Hadoop、商務智能以及機器學習等各個數據平臺開發、管理等,支持eBay全球各部門運用高端的數據分析解決方案作出及時有效的作業決策,為遍布全球的業務用戶提供數據分析解決方案。
參考資料
Apache Eagle 文檔:
- http://goeagle.io
Apache Eagle 源碼:
- http://github.com/ebay/eagle
Apache Eagle 項目:
- http://incubator.apache.org/projects/eagle.html
如何一起愉快地發展
“高效運維”公眾號(如下二維碼)值得您的關注,作為高效運維系列微信群(國內領先的運維垂直社區)的唯一官方公眾號,每周發表多篇干貨滿滿的 原創好文:來自于系列群的討論精華、運維講壇精彩分享及群友原創等。“高效運維”也是互聯網專欄《高效運維最佳實踐》及運維2.0官方公眾號。
重要提示:除非事先獲得授權,請在本公眾號發布2天后,才能轉載本文。尊重知識,請必須全文轉載,并包括本行及如下二維碼。
【編輯推薦】
