Apache Ranger是一個用來在Hadoop平臺上進行監控,啓用服務,以及全方位數據安全存取管理的安全框架。
Ranger的願景是在Apache Hadoop生態系統中提供全面的安全管理。隨着企業業務的拓展,企業可能在多使用者環境中執行多個工作任務,這就要求Hadoop內的數據安全性需要擴充套件爲同時支援多種不同的需求進行數據存取,同時還需要提供一個可以對安全策略進行集中管理,設定和監控使用者存取的框架。Ranger由此產生!
Ranger的官網:https://ranger.apache.org/
Ranager的核心是web應用程式,也成爲RangerAdmin模組,此模組由管理策略,審計日誌和報告等三部分組成。
管理員角色的使用者可以通過RangerAdmin提供的web介面或REST APIS來定製安全策略。這些策略會由Ranger提供的輕量級的針對不同Hadoop體系中元件的外掛來執行。外掛會在Hadoop的不同組件的核心進程啓動後,啓動對應的外掛進程來進行安全管理!
Ranger2.0要求對應的Hadoop爲3.x以上,Hive爲3.x以上版本,JDK爲1.8以上版本!
在Mysql數據庫中建立Ranger儲存數據的數據庫:
mysql> create database ranger;
建立使用者:
mysql> grant all privileges on ranger.* to ranger@'%' identified by 'ranger';
解壓軟體:
[zhouchen@hadoop103 target]tar -zxvf ranger-2.0.0-admin.tar.gz -C /opt/module/ranger
進行設定:
[zhouchen@hadoop103 ranger-2.0.0-admin]$ vim install.properties
修改以下設定內容:
#mysql驅動
SQL_CONNECTOR_JAR=/opt/module/hbase-1.3.1/lib/mysql-connector-java-5.1.27-bin.jar
#mysql的主機名和root使用者的使用者名稱密碼
db_root_user=root
db_root_password=000000
db_host=hadoop103
#ranger需要的數據庫名和使用者資訊,和2.2.1建立的資訊要一一對應
db_name=ranger
db_user=ranger
db_password=ranger
#其他ranger admin需要的使用者密碼
rangerAdmin_password=ranger123
rangerTagsync_password=ranger123
rangerUsersync_password=ranger123
keyadmin_password=ranger123
#ranger儲存審計日誌的路徑,預設爲solr,這裏爲了方便暫不設定
audit_store=
#策略管理器的url,rangeradmin安裝在哪臺機器,主機名就爲對應的主機名
policymgr_external_url=http://hadoop103:6080
#啓動ranger admin進程的linux使用者資訊
unix_user=zhouchen
unix_user_pwd=zhou59420
unix_group=zhouchen
#hadoop的組態檔目錄
hadoop_conf=/opt/module/hadoop-3.1.3/etc/hadoop
之後切換到root使用者,執行安裝
[root@hadoop103 ranger-2.0.0-admin]# ./setup.sh
出現以下資訊,說明安裝完成
2020-04-30 13:58:18,051 [I] Ranger all admins default password change request processed successfully..
Installation of Ranger PolicyManager Web Application is completed.
建立ranger的組態檔軟連線到web應用下:
[root@hadoop103 ranger-2.0.0-admin]# ./set_globals.sh
usermod:無改變
[2020/04/30 13:58:47]: [I] Soft linking /etc/ranger/admin/conf to ews/webapp/WEB-INF/classes/conf
設定RangerAdmin web應用的設定資訊:
[root@hadoop103 ranger-2.0.0-admin]# cd /etc/ranger/admin/conf/
[root@hadoop103 conf]# vim ranger-admin-site.xml
<property>
<name>ranger.jpa.jdbc.password</name>
<value>ranger</value>
<description />
</property>
<property>
<name>ranger.service.host</name>
<value>hadoop103</value>
</property>
啓動:
[root@hadoop103 conf]# ranger-admin start
Starting Apache Ranger Admin Service
Apache Ranger Admin Service with pid 7058 has started.
ranger-admin在安裝時已經配設定爲開機自啓動,因此之後無需再手動啓動!
檢視啓動後的進程:
[root@hadoop103 ranger-2.0.0-usersync]# jps
7058 EmbeddedServer
8132 Jps
停止:
[root@hadoop103 conf]# ranger-admin stop
之後可以通過存取http://hadoop103:6080,如出現以下介面,說明ranger-admin啓動完成!
預設可以使用使用者名稱:admin,密碼爲之前設定的ranger123進行登錄!登錄後介面如下:
RangerUsersync作爲Ranger提供的一個管理模組,可以將Linux機器上的使用者和組資訊同步到RangerAdmin的數據庫中進行管理!
解壓軟體:
[root@hadoop103 conf]# tar -zxvf /opt/software/apache-ranger-2.0.0/target/ranger-2.0.0-usersync.tar.gz -C /opt/module/ranger/
設定軟體:
[root@hadoop103 ranger-2.0.0-usersync]# vim install.properties
修改以下設定資訊:
#rangeradmin的url
POLICY_MGR_URL =http://hadoop103:6080
#同步間隔時間,單位(分鐘)
SYNC_INTERVAL = 1
#執行此進程的linux使用者
unix_user=zhouchen
unix_group=zhouchen
#rangerUserSync的使用者密碼,參考rangeradmin中install.properties的設定
rangerUsersync_password=ranger123
#hadoop的組態檔目錄
hadoop_conf=/opt/module/hadoop-3.1.3/etc/hadoop
使用root使用者進行安裝
[root@hadoop103 ranger-2.0.0-usersync]# ./setup.sh
出現以下資訊,說明安裝完成
ranger.usersync.policymgr.password has been successfully created.
Provider jceks://file/etc/ranger/usersync/conf/rangerusersync.jceks was updated.
[I] Successfully updated password of rangerusersync user
啓動之前,在ranger admin的web-UI介面,檢視使用者資訊如下:
使用root使用者啓動
[root@hadoop103 ranger-2.0.0-usersync]# ranger-usersync start
Starting Apache Ranger Usersync Service
Apache Ranger Usersync Service with pid 7510 has started.
啓動後,再次檢視使用者資訊:
說明ranger-usersync工作正常!
ranger-usersync服務也是開機自啓動的,因此之後不需要手動啓動!
Ranger Hive-plugin是Ranger對hive進行許可權管理的外掛。Ranger Hive-plugin只能對使用jdbc方式存取hive的請求進行許可權管理,hive-cli並不受限制!
解壓軟體:
[root@hadoop103 ranger-2.0.0-usersync]# tar -zxvf /opt/software/apache-ranger-2.0.0/target/ranger-2.0.0-hive-plugin.tar.gz -C /opt/module/ranger/
設定軟體:
[root@hadoop103 ranger-2.0.0-hive-plugin]# vim install.properties
#策略管理器的url地址
POLICY_MGR_URL=http://hadoop103:6080
#元件名稱可以自定義
REPOSITORY_NAME=hivedev
#hive的安裝目錄
COMPONENT_INSTALL_DIR_NAME=/opt/module/hive
#hive元件的啓動使用者
CUSTOM_USER=zhouchen
#hive元件啓動使用者所屬組
CUSTOM_GROUP=zhouchen
將hive的組態檔作爲軟連線安裝到Ranger Hive-plugin目錄下:
[root@hadoop103 ranger-2.0.0-hive-plugin]# ln -s /opt/module/hive/conf/ conf
使用root使用者啓用Ranger Hive-plugin
[root@hadoop103 ranger-2.0.0-hive-plugin]# ./enable-hive-plugin.sh
之後需要重新啓動hive才能 纔能生效!
啓動hiveserver2:
[zhouchen@hadoop103 hive]$ hive --service metastore &
[zhouchen@hadoop103 hive]$ hiveserver2
測試外掛是否可以連線hiveserver2
出現以下提示說明連線成功!
檢視預設的存取策略,此時只有admin使用者擁有對所有庫、表和函數的存取許可權
驗證:使用zhouchen/zhouchen使用者嘗試進行登錄,登錄成功後,執行查詢語句:
beeline> !connect jdbc:hive2://hadoop202:10000
Connecting to jdbc:hive2://hadoop202:10000
Enter username for jdbc:hive2://hadoop202:10000: zhouchen
Enter password for jdbc:hive2://hadoop202:10000: ********(zhouchen)
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://hadoop202:10000> show tables;
INFO : Compiling command(queryId=zhouchen_20200810163301_bcd91adf-071e-4356-aaf9-944b92b36f12): show tables
INFO : Concurrency mode is disabled, not creating a lock manager
INFO : Semantic Analysis Completed (retrial = false)
INFO : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:tab_name, type:string, comment:from deserializer)], properties:null)
INFO : Completed compiling command(queryId=zhouchen_20200810163301_bcd91adf-071e-4356-aaf9-944b92b36f12); Time taken: 0.027 seconds
INFO : Concurrency mode is disabled, not creating a lock manager
INFO : Executing command(queryId=zhouchen_20200810163301_bcd91adf-071e-4356-aaf9-944b92b36f12): show tables
INFO : Starting task [Stage-0:DDL] in serial mode
INFO : Completed executing command(queryId=zhouchen_20200810163301_bcd91adf-071e-4356-aaf9-944b92b36f12); Time taken: 0.021 seconds
INFO : OK
INFO : Concurrency mode is disabled, not creating a lock manager
+-----------+
| tab_name |
+-----------+
| demo_src |
| demo_tgt |
| dept |
| emp |
+-----------+
4 rows selected (0.268 seconds)
之後使用zhouchen/ranger123使用者進行登錄,可以完成Hive的所有操作
Beeline version 3.1.2 by Apache Hive
beeline> !connect jdbc:hive2://hadoop202:10000
Connecting to jdbc:hive2://hadoop202:10000
Enter username for jdbc:hive2://hadoop202:10000: zhouchen
Enter password for jdbc:hive2://hadoop202:10000: *********(ranger123)
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://hadoop202:10000> show tables;
INFO : Compiling command(queryId=zhouchen_20200810165508_87344cf3-0994-4f8f-ad99-8d2e2df84307): show tables
INFO : Concurrency mode is disabled, not creating a lock manager
INFO : Semantic Analysis Completed (retrial = false)
INFO : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:tab_name, type:string, comment:from deserializer)], properties:null)
INFO : Completed compiling command(queryId=zhouchen_20200810165508_87344cf3-0994-4f8f-ad99-8d2e2df84307); Time taken: 0.033 seconds
INFO : Concurrency mode is disabled, not creating a lock manager
INFO : Executing command(queryId=zhouchen_20200810165508_87344cf3-0994-4f8f-ad99-8d2e2df84307): show tables
INFO : Starting task [Stage-0:DDL] in serial mode
INFO : Completed executing command(queryId=zhouchen_20200810165508_87344cf3-0994-4f8f-ad99-8d2e2df84307); Time taken: 0.011 seconds
INFO : OK
INFO : Concurrency mode is disabled, not creating a lock manager
+-----------+
| tab_name |
+-----------+
| demo_src |
| demo_tgt |
| dept |
| emp |
+-----------+
4 rows selected (0.21 seconds)
例如爲zhouchen使用者設定default庫emp和dept表的所有列的讀許可權,爲jack使用者設定default庫emp和dept表的所有列的讀寫許可權。
點選Add New Policy按鈕:
填寫策略名稱,以及此策略設計的庫、表、列等資訊:
填寫設計此策略的允許的使用者許可權:
之後點選Add新增按鈕,發現在面板上已經新增完成:
測試:beeline無需重新連線hiveserver2,再次執行查詢,發現zhouchen使用者已經可以進行查詢,但是隻能查詢自己有許可權查詢的表資訊
對以下兩個表,有讀許可權,沒有寫許可權:
再次測試jack使用者,嘗試向dept表寫入數據後查詢:
0: jdbc:hive2://hadoop103:10000> insert into table dept values(50,‘SECURITY’,1800);
0: jdbc:hive2://hadoop103:10000> select * from dept;
通過脫敏操作可以限制使用者對某一列的存取,將敏感數據不暴露給使用者!
案例:指定zhouchen使用者在查詢emp表時,對hiredate的年月部分脫敏!
首先需要保證使用者對指定的列有存取許可權,可以參考5.2進行設定!
點選Masing標籤,再點選Add New Policy
指定表和列
指定使用者和脫敏操作:
之後點選save按鈕!那麼只有zhouchen使用者在查詢時,會觸發此策略!
通過行級別過濾可以將表中的數據進行條件過濾後再暴露給使用者!
例如:zhouchen使用者只允許查詢emp表中job型別爲SALESMAN的使用者資訊。
同理,行級別過濾也要求使用者對指定表有access許可權!參考5.2的設定!
選擇Row Level Filter標籤,點選Add New Policy:
選擇對應的庫和表:
新增過濾規則和使用者:
之後點選add按鈕!
驗證:
更多設定,可以參考官網介紹:https://cwiki.apache.org/confluence/display/RANGER/Row-level+filtering+and+column-masking+using+Apache+Ranger+policies+in+Apache+Hive