什么是 Apache Sentry , Apache Sentry 介绍
Apache Sentry是Hadoop中的一個(gè)基于角色的細(xì)粒度授權(quán)組件。Sentry可以在Hadoop集群上對通過身份認(rèn)證的用戶和應(yīng)用程序控制數(shù)據(jù)訪問權(quán)限。Sentry開箱即用的支持Hive,Hive Metastore/HCatalog,Solr,Impala,HDFS(僅限Hive表數(shù)據(jù)),Kafka和Kudu(通過Impala)。
?
Sentry旨在成為Hadoop各組件的可插拔授權(quán)引擎。它允許您定義授權(quán)規(guī)則以驗(yàn)證用戶或應(yīng)用程序?qū)adoop資源的訪問請求。Sentry是高度模塊化的,可以支持Hadoop中各種數(shù)據(jù)模型的授權(quán)。
?
1?架構(gòu)概述
?
1.1?Sentry組件
?
授權(quán)過程涉及三個(gè)組件:
?
-
Sentry Server
Sentry的RPC服務(wù)管理授權(quán)元數(shù)據(jù)。它支持安全檢索和操作元數(shù)據(jù)的接口。在CDH5.13及更高版本中,您可以配置多個(gè)Sentry服務(wù)以實(shí)現(xiàn)高可用性。
?
-
Data Engine
這是一個(gè)數(shù)據(jù)處理應(yīng)用程序,比如Hive或Impala,它們需要授權(quán)訪問數(shù)據(jù)或元數(shù)據(jù)資源。數(shù)據(jù)引擎(data engine)加載Sentry插件,攔截所有客戶端訪問資源的請求并將其路由到Sentry插件進(jìn)行驗(yàn)證。
?
-
Sentry Plugin
Sentry plugin在data engine中運(yùn)行。它提供了操作存儲在Sentry Server中的授權(quán)元數(shù)據(jù)的接口,包括授權(quán)策略引擎,該引擎使用從服務(wù)器檢索的授權(quán)元數(shù)據(jù)來評估訪問請求。
?
1.2?關(guān)鍵概念
?
-
Authentication - 驗(yàn)證憑據(jù)以識別用戶
-
Authorization - 限制用戶訪問指定的資源
-
User - 由認(rèn)證系統(tǒng)識別的用戶
-
Group - 由認(rèn)證系統(tǒng)維護(hù)的一組用戶
-
Privilege - 允許訪問對象的指令或規(guī)則
-
Role - 一組privilege,用于組合多個(gè)訪問規(guī)則的模板
-
Authorization models - 定義要受授權(quán)規(guī)則約束的對象以及允許的操作粒度。例如,在SQL中,對象可以是數(shù)據(jù)庫或表,操作是SELECT,INSERT和CREATE。在Solr中,對象是indexes,configs,collections和documents;訪問模式包括query和update。
?
1.3?用戶身份和組映射
?
Sentry依賴底層的身份認(rèn)證系統(tǒng),比如Kerberos或LDAP來識別用戶。它還使用Hadoop中配置的組映射(group mapping)機(jī)制來確保Sentry看到與Hadoop生態(tài)系統(tǒng)的其他組件相同的組映射(group mapping)。
?
假設(shè)有一個(gè)組織機(jī)構(gòu),用戶Alice和Bob屬于名為finance-department的Active Directory(AD)組。Bob同時(shí)也屬于一個(gè)名為finance-managers的組。在Sentry中,首先創(chuàng)建角色,然后為這些角色授予權(quán)限。例如,您可以創(chuàng)建一個(gè)名為Analyst的角色,并將表Customer和Sales上的SELECT授予此角色。
?
1.4?基于角色的訪問控制
?
基于角色的訪問控制(Role-based access control, RBAC)是一種典型的用于管理企業(yè)中大量用戶和數(shù)據(jù)對象授權(quán)的強(qiáng)大機(jī)制。經(jīng)常發(fā)生的新數(shù)據(jù)對象添加或刪除,用戶加入,移動或離開。RBAC可以使這些管理更加容易。我們繼續(xù)繼續(xù)上章提到的例子,如果新員工Carol加入財(cái)務(wù)部門,您需要做的就是將她添加到AD中的finance-managers組。這就可以實(shí)現(xiàn)Carol訪問Sales和Customer表中的數(shù)據(jù)。
?
2?Sentry與Hadoop生態(tài)系統(tǒng)的集成
?
?
如上圖所示,Apache Sentry可以與多個(gè)Hadoop組件一起工作。從本質(zhì)上講,您擁有存儲授權(quán)元數(shù)據(jù)的Sentry Server,并提供API工具以安全地檢索和修改此元數(shù)據(jù)。
?
請注意,Sentry Server主要用于管理元數(shù)據(jù)。實(shí)際的授權(quán)決策由在Hive或Impala等數(shù)據(jù)處理應(yīng)用程序中運(yùn)行的策略引擎判斷。每個(gè)組件都加載Sentry插件,其中包括用于處理Sentry服務(wù)的客戶端和用于驗(yàn)證授權(quán)請求的策略引擎。
?
2.1?Hive和Sentry
?
舉一個(gè)例子來說明Hive獲取客戶端以特定模式訪問對象的請求。如果Bob提交以下Hive查詢:
?
select?*?from?production.sales?
Hive將識別用戶Bob正在請求對Sales表的SELECT訪問。此時(shí),Hive將要求Sentry插件驗(yàn)證Bob的訪問請求。該插件將檢索Bob與Sales表相關(guān)的權(quán)限,策略引擎將確定該請求是否有效。
?
?
Sentry服務(wù)和策略文件都可以管理Hive權(quán)限。Cloudera建議您使用Sentry服務(wù),這樣可以更輕松地管理用戶權(quán)限。
?
2.2?Impala和Sentry
?
Impala中的授權(quán)處理與Hive中的授權(quán)處理類似。主要區(qū)別在于權(quán)限的緩存。Impala的Catalog服務(wù)管理緩存schema元數(shù)據(jù)并將其傳播到所有Impala Daemon節(jié)點(diǎn)。此Catalog服務(wù)也緩存Sentry元數(shù)據(jù)。因此,Impala的授權(quán)在本地就可以實(shí)現(xiàn),速度更快。
?
?
2.3?Sentry-HDFS同步
?
Sentry-HDFS授權(quán)主要針對Hive倉庫數(shù)據(jù) - 也即Hive或Impala中表的數(shù)據(jù)。Sentry與HDFS的集成的真正目標(biāo)是將相同的授權(quán)檢查擴(kuò)展到從任何其他組件(如Pig,MapReduce或Spark)訪問Hive倉庫數(shù)據(jù)。基于這一點(diǎn)可以利用HDFS已有的ACL功能,但與Sentry無關(guān)的表將保留其舊ACL。
?
?
Sentry權(quán)限與HDFS ACL的映射關(guān)系如下:
-
SELECT -> 文件的Read權(quán)限
-
INSERT -> 文件的Write權(quán)限
-
ALL -> 文件的Read和Write權(quán)限
?
NameNode會加載一個(gè)Sentry插件,用于緩存Sentry權(quán)限以及Hive元數(shù)據(jù)。這有助于HDFS保持文件權(quán)限和Hive表權(quán)限同步。Sentry插件定期輪詢Sentry以保持元數(shù)據(jù)更改同步。
?
例如,如果Bob運(yùn)行從Sales表讀取數(shù)據(jù)文件的Pig作業(yè),Pig將嘗試從HDFS獲取文件句柄。此時(shí),NameNode上的Sentry插件將確定該文件是Hive數(shù)據(jù)的一部分,并在文件ACL之上覆蓋Sentry權(quán)限。因此,跟Hive執(zhí)行SQL一樣,HDFS會為該P(yáng)ig客戶端強(qiáng)制實(shí)施相同的權(quán)限檢查。
?
2.4?Solr和Sentry
?
Sentry可以對各種Solr任務(wù)實(shí)施權(quán)限管控,包括訪問數(shù)據(jù)和創(chuàng)建collection。無論用戶嘗試執(zhí)行何種操作,Sentry都會進(jìn)行權(quán)限管控。例如,不管查詢是來自命令行,瀏覽器還是管理控制臺,都會對collection中的數(shù)據(jù)進(jìn)行相同的權(quán)限檢查。
?
Sentry對Solr的權(quán)限控制信息可以保存到Sentry服務(wù)的數(shù)據(jù)庫中,也可以以策略文件形式保存,該文件存儲在HDFS中,比如:hdfs://ha-nn-uri/user/solr/sentry/sentry-provider.ini。
?
? ? Solr集成Sentry不支持為多個(gè)服務(wù)配置同一個(gè)策略文件。如果選擇使用策略文件而不是Sentry服務(wù)的數(shù)據(jù)庫,則必須為每個(gè)啟用Sentry的服務(wù)使用單獨(dú)的策略文件。比如,如果Hive和Solr都使用策略文件授權(quán),如果你把這2個(gè)服務(wù)的授權(quán)放到同一個(gè)策略文件中,將導(dǎo)致配置無效并且兩個(gè)服務(wù)商的授權(quán)失敗。
?
Sentry服務(wù)和策略文件都可以管理Solr權(quán)限。Cloudera建議您使用Sentry服務(wù),這樣可以更輕松地管理用戶權(quán)限。
?
2.5?授權(quán)管理
?
Sentry Server支持API以安全地操縱角色和權(quán)限。Hive和Impala都支持SQL語句管理權(quán)限。Sentry會認(rèn)為運(yùn)行HiveServer2和Impala服務(wù)的用戶為超級管理員,通常為hive和impala。如果要管理權(quán)限,必須使用超級管理員登錄Sentry。您可以使用Beeline或Impala shell來執(zhí)行以下示例語句:
?
GRANT?ROLE?Analyst?TO?GROUP?finance_managers?
2.5.1?禁用Hive CLI
?
要執(zhí)行Hive查詢,您必須使用Beeline。Sentry不支持Hive CLI,因此必須禁用其對Hive Metastore的訪問權(quán)限。如果Hive Metastore中有敏感數(shù)據(jù),尤其需要注意這一點(diǎn)。因此需要在Cloudera Manager配置Hive服務(wù)的Hive Metastore Access Control and Proxy User Groups Override屬性。例如,讓hive用戶僅模擬hive和hue組成員的權(quán)限,請將該屬性設(shè)置為:hive,hue。
?
2.5.2?使用Hue管理Sentry權(quán)限
?
Hue中有一個(gè)安全模塊可以提供界面化管理Sentry授權(quán)。這允許用戶瀏覽和更改表權(quán)限。
?
參考:
https://www.cloudera.com/documentation/enterprise/latest/topics/sg_sentry_overview.html#sentry_overview
總結(jié)
以上是生活随笔為你收集整理的什么是 Apache Sentry , Apache Sentry 介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 掌握技能
- 下一篇: 线程和std::shared_ptr智能