一、Sentry概述
Apache Sentry是一個輕量級的授權和驗證系統,它提供了對數據和計算資源的細粒度訪問控制能力。它可以集成到Hadoop、Hive以及其他多種大數據處理工具中,通過特定的權限管理,保證嚴格且精細的數據安全。
在具體實現中,Sentry通過將訪問權限呈現為一個樹形結構,將不同層次的授權操作映射到相應的樹節點上,從而實現權限細粒度控制。
除此之外,Sentry支持多個訪問方式,如SQL、API、命令行等,同時還提供了訪問控制日誌和跟蹤以及自定義擴展功能等強大特性。
二、Sentry常用場景
Sentry主要應用於大數據場景下對數據安全的需求,通常用於以下幾種場景:
1、Hive Metastore安全控制
在大數據生態系統中,Hive Metastore是一個關鍵組件。許多不同的處理服務都會使用它,因此對該組件的安全控制需要特別關注。Sentry可以對Hive Metastore進行授權管理,實現細粒度對元數據的訪問控制。
2、Hadoop 集群授權管理
Sentry可以集成到Hadoop集群中,提供大數據的授權管理。管理人員可以配置角色、權限和用戶,對集群資源進行管理和保護。
3、雲計算資源授權管理
在雲計算環境下,Sentry可以對數據資源進行授權管理,實現多租戶訪問控制。實現雲計算資源隔離和安全保護。
三、Sentry核心概念涵義
1、權限分層
Sentry權限採用分層結構,每個層次都有自己的權限,子層可以從父層繼承權限或添加自己的權限。如下圖:
[ Action_a ] / | \ [ Role_x] Role_y Role_z / \ [u1] [u2]
上面的示意圖中,」Action_a」代表數據庫表中的一個操作,」Role_x」、「Role_y」、「Role_z」代表了三個不同的角色,分別擁有不同的權限。在子層級中,用戶u1和u2,繼承了父層級角色Role_x的所有權限,同時u1可以擁有自己的權限,而u2沒有特殊權限。
2、Sentry服務
Sentry服務是由多個服務組件協作工作的。Sentry服務可以簡單地被分為兩個部分:Sentry Server和Sentry Client。
[HiveServer2] | [Hive MetaStore] | [Authorization/Object Ownership] | +---------------+ +-----------+ | Sentry | | RDF | +---------------+ +-----------+ | HDFS | | Solr | +---------------+ +-----------+
其中,HiveMetaStore提供數據存儲,而Sentry Server則負責用戶驗證和權限控制。如下圖所示,Sentry Server架構如下:
+------------+ | Sentry | +------------+ | Plugin API | | Policy | | Service | +------------+
其中,Plugin API提供了接口定義,Policy提供了權限管理相關的邏輯實現,Service負責提供後台服務和和管理UI。
3、Sentry權限模型
Sentry權限模型是Sentry實現的核心,可以將訪問控制模型表示為一個典型的可擴展樹形結構,整個樹的每個節點都可以持有訪問控制列表(ACL)
[ Column Level ] | [ Table Level ] | [ Database Level ] | [ Server Level ]
四、Sentry安裝和配置
1、Sentry安裝
(1)下載Sentry源代碼
git clone https://github.com/apache/sentry.git cd sentry
(2)構建Sentry
mvn clean package assembly:assembly -Dmaven.test.skip=true -Pdist
(3)初始化Sentry Schema
sh ./sentry --command schema-tool --confg /etc/sentry/sentry-site.xml --action schema-upgrade
2、Hive集成Sentry權限控制
(1)安裝HiveServer2
(2)將Sentry JAR文件加入到Hive Server2 CLASSPATH當中,以`hive-env.sh`文件為例:
# export SENRTY的路徑,用於相關jar文件的引用 export SENTRY_HOME=/usr/hdp/current/sentry export HADOOP_HOME=/usr/hdp/current/hadoop-client # 將Sentry jar文件加入到Hive CLASSPATH中 export HIVE_SERVER2_CLASSPATH=$SENTRY_HOME/lib/*:$HADOOP_HOME/*:$HIVE_SERVER2_CLASSPATH
(3)在hive-site.xml中添加Sentry授權信息
hive.security.authorization.manager org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdConfOnlyAuthorizerFactory hive.security.authorization.enabled true
3、設置Sentry
首先,我們需要在Sentry中添加用戶、角色和授權規則。
(1)創建管理員角色和用戶
sentry --command createUser -–conf /etc/sentry/sentry-site.xml --user giuseppe sentry --command roleCreate –-conf /etc/sentry/sentry-site.xml --role admin sentry --command roleCreate –-conf /etc/sentry/sentry-site.xml --role dba sentry --command roleCreate –-conf /etc/sentry/sentry-site.xml --role scientist
(2)給管理員用戶授予管理員角色,並創建測試庫
sentry --command grantRoleToGroup --conf /etc/sentry/sentry-site.xml --rolename admin --group giuseppe sentry --command createRole --conf /etc/sentry/sentry-site.xml --role test_role sentry --command grant --conf /etc/sentry/sentry-site.xml ––privilege server=server1 test_role sentry --command grant –-conf /etc/sentry/sentry-site.xml ––privilege server=server1/db=test_database ALL sentry --command grant --conf /etc/sentry/sentry-site.xml –-privilege server=server1/db=test_database/table=test_table
總結
Apache Sentry作為開源的細粒度權限控制系統,能夠有效地保護大數據資源的安全,提供了可靠、高效的數據訪問控制機制,並且與現有的大數據處理框架(如Hadoop、Hive,等)集成良好。它通過細粒度的策略管理,實現了數據安全和可控制,已經成為大數據安全領域的研究熱點和關注重點。
原創文章,作者:WOQCY,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/334125.html