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