一、介紹
1.1 什么是Ranger
Apache Ranger是一個用來在Hadoop平臺上進行監控,啟用服務,以及全方位數據安全訪問管理的安全框架。
Ranger的愿景是在Apache Hadoop生態系統中提供全面的安全管理。隨著企業業務的拓展,企業可能在多用戶環境中運行多個工作任務,這就要求Hadoop內的數據安全性需要擴展為同時支持多種不同的需求進行數據訪問,同時還需要提供一個可以對安全策略進行集中管理,配置和監控用戶訪問的框架。Ranger由此產生!
Ranger的官網:https://ranger.apache.org/
1.2 Ranger的目標
- 允許用戶使用UI或REST API對所有和安全相關的任務進行集中化的管理
- 允許用戶使用一個管理工具對操作Hadoop體系中的組件和工具的行為進行細粒度的授權
- 支持Hadoop體系中各個組件的授權認證標準
- 增強了對不同業務場景需求的授權方法支持,例如基于角色的授權或基于屬性的授權
- 支持對Hadoop組件所有涉及安全的審計行為的集中化管理
1.3 Ranger支持的框架
- Apache Hadoop
- Apache Hive:Hive支持多種模式的鑒權,如自己寫鑒權代碼,打jar包后放到lib目錄下。這種就沒有Ranger方便快捷。
- Apache HBase
- Apache Storm
- Apache Knox
- Apache Solr
- Apache Kafka
- YARN
- NIFI
1.4 Ranger工作原理
Ranger主要由三個組件組成:
Ranger Admin
Ranger的核心是Web應用程序,也稱為RangerAdmin模塊,此模塊由管理策略,審計日志和報告等三部分組成。管理員角色的用戶可以通過RangerAdmin提供的web界面或REST APIS來定制安全策略。您可以創建和更新安全訪問策略,這些策略被存儲在數據庫中。各個組件的Plugin定期對這些策略進行輪詢。這些策略會由Ranger提供的輕量級的針對不同Hadoop體系中組件的插件來執行。插件會在Hadoop的不同組件的核心進程啟動后,啟動對應的插件進程來進行安全管理!Ranger Plugins
Plugin嵌入在各個集群組件的進程里,是一個輕量級的Java程序。例如,Ranger對Hive的組件,就被嵌入在Hiveserver2里。這些Plugin從Ranger Admin服務端拉取策略,并把它們存儲在本地文件中。當接收到來自組件的用戶請求時,對應組件的Plugin會攔截該請求,并根據安全策略對其進行評估。Ranger UserSync
Ranger提供了一個用戶同步工具。您可以從Unix或者LDAP中拉取用戶和用戶組的信息。這些用戶和用戶組的信息被存儲在Ranger Admin的數據庫中,可以在定義策略時使用。
二、源碼編譯
需要從官網下載ranger源碼,通過maven編譯后進行使用。
ranger2.0.0源碼 下載地址
Ranger2.0要求對應的Hadoop為3.x以上,Hive為3.x以上版本,JDK為1.8以上版本!
推薦在Linux 系統上進行編譯,比較方便,需要進行如下準備
- 安裝maven-3.6.3(這是ranger2.0.0推薦的maven版本);
- 安裝gcc:yum install -y gcc (需要對C語言進行編譯,如果不安裝,編譯Unix Native Authenticator模塊時會報錯找不到gcc命令);
- 安裝python2:如果系統自帶python2,那么直接忽略,如centos7.x;
解壓源碼包,進入ranger-2.0.0父項目的路徑下,執行如下命令(mvn命令沒有寫到環境變量的話需要寫全mvn的路徑)
mvn -DskipTests clean compile package install assembly:assembly
編譯開始,需要等待下載依賴和完成編譯打包,耗時個把小時。如果某一個模塊編譯出錯了,可以單獨進入該模塊進行編譯,啟動編譯命令時加上-X參數,顯示debug信息,方便找到錯誤。
編譯完成后,可以在父項目的target文件中找到所有組件的壓縮文件
[root@bigdata2 target]# ll
total 1605360
drwxr-xr-x 2 root root 28 Sep 10 15:28 antrun
drwxr-xr-x 2 root root 116 Sep 10 15:40 archive-tmp
drwxr-xr-x 3 root root 22 Sep 10 15:28 maven-shared-archive-resources
-rw-r--r-- 1 root root 248578820 Sep 10 15:37 ranger-2.0.0-admin.tar.gz
-rw-r--r-- 1 root root 249667518 Sep 10 15:38 ranger-2.0.0-admin.zip
-rw-r--r-- 1 root root 27796446 Sep 10 15:39 ranger-2.0.0-atlas-plugin.tar.gz
-rw-r--r-- 1 root root 27832766 Sep 10 15:39 ranger-2.0.0-atlas-plugin.zip
-rw-r--r-- 1 root root 31560169 Sep 10 15:40 ranger-2.0.0-elasticsearch-plugin.tar.gz
-rw-r--r-- 1 root root 31606662 Sep 10 15:40 ranger-2.0.0-elasticsearch-plugin.zip
-rw-r--r-- 1 root root 26643418 Sep 10 15:34 ranger-2.0.0-hbase-plugin.tar.gz
-rw-r--r-- 1 root root 26666456 Sep 10 15:34 ranger-2.0.0-hbase-plugin.zip
-rw-r--r-- 1 root root 23972037 Sep 10 15:33 ranger-2.0.0-hdfs-plugin.tar.gz
-rw-r--r-- 1 root root 23998268 Sep 10 15:33 ranger-2.0.0-hdfs-plugin.zip
-rw-r--r-- 1 root root 23831930 Sep 10 15:33 ranger-2.0.0-hive-plugin.tar.gz
-rw-r--r-- 1 root root 23855462 Sep 10 15:34 ranger-2.0.0-hive-plugin.zip
-rw-r--r-- 1 root root 39940594 Sep 10 15:35 ranger-2.0.0-kafka-plugin.tar.gz
-rw-r--r-- 1 root root 39984673 Sep 10 15:35 ranger-2.0.0-kafka-plugin.zip
-rw-r--r-- 1 root root 90990768 Sep 10 15:38 ranger-2.0.0-kms.tar.gz
-rw-r--r-- 1 root root 91107780 Sep 10 15:39 ranger-2.0.0-kms.zip
-rw-r--r-- 1 root root 28391293 Sep 10 15:34 ranger-2.0.0-knox-plugin.tar.gz
-rw-r--r-- 1 root root 28411851 Sep 10 15:34 ranger-2.0.0-knox-plugin.zip
-rw-r--r-- 1 root root 23947177 Sep 10 15:40 ranger-2.0.0-kylin-plugin.tar.gz
-rw-r--r-- 1 root root 23980871 Sep 10 15:40 ranger-2.0.0-kylin-plugin.zip
-rw-r--r-- 1 root root 34222 Sep 10 15:38 ranger-2.0.0-migration-util.tar.gz
-rw-r--r-- 1 root root 37740 Sep 10 15:38 ranger-2.0.0-migration-util.zip
-rw-r--r-- 1 root root 26393845 Sep 10 15:35 ranger-2.0.0-ozone-plugin.tar.gz
-rw-r--r-- 1 root root 26421956 Sep 10 15:35 ranger-2.0.0-ozone-plugin.zip
-rw-r--r-- 1 root root 40301292 Sep 10 15:40 ranger-2.0.0-presto-plugin.tar.gz
-rw-r--r-- 1 root root 40342416 Sep 10 15:40 ranger-2.0.0-presto-plugin.zip
-rw-r--r-- 1 root root 22234270 Sep 10 15:39 ranger-2.0.0-ranger-tools.tar.gz
-rw-r--r-- 1 root root 22248968 Sep 10 15:39 ranger-2.0.0-ranger-tools.zip
-rw-r--r-- 1 root root 42210 Sep 10 15:38 ranger-2.0.0-solr_audit_conf.tar.gz
-rw-r--r-- 1 root root 45636 Sep 10 15:38 ranger-2.0.0-solr_audit_conf.zip
-rw-r--r-- 1 root root 26974799 Sep 10 15:36 ranger-2.0.0-solr-plugin.tar.gz
-rw-r--r-- 1 root root 27010869 Sep 10 15:36 ranger-2.0.0-solr-plugin.zip
-rw-r--r-- 1 root root 23952172 Sep 10 15:39 ranger-2.0.0-sqoop-plugin.tar.gz
-rw-r--r-- 1 root root 23986865 Sep 10 15:39 ranger-2.0.0-sqoop-plugin.zip
-rw-r--r-- 1 root root 4012596 Sep 10 15:39 ranger-2.0.0-src.tar.gz
-rw-r--r-- 1 root root 6257752 Sep 10 15:39 ranger-2.0.0-src.zip
-rw-r--r-- 1 root root 37239595 Sep 10 15:34 ranger-2.0.0-storm-plugin.tar.gz
-rw-r--r-- 1 root root 37269537 Sep 10 15:34 ranger-2.0.0-storm-plugin.zip
-rw-r--r-- 1 root root 32770865 Sep 10 15:38 ranger-2.0.0-tagsync.tar.gz
-rw-r--r-- 1 root root 32782295 Sep 10 15:38 ranger-2.0.0-tagsync.zip
-rw-r--r-- 1 root root 16260331 Sep 10 15:38 ranger-2.0.0-usersync.tar.gz
-rw-r--r-- 1 root root 16281055 Sep 10 15:38 ranger-2.0.0-usersync.zip
-rw-r--r-- 1 root root 23962337 Sep 10 15:35 ranger-2.0.0-yarn-plugin.tar.gz
-rw-r--r-- 1 root root 23993168 Sep 10 15:35 ranger-2.0.0-yarn-plugin.zip
-rw-r--r-- 1 root root 166727 Sep 10 15:28 rat.txt
-rw-r--r-- 1 root root 5 Sep 10 15:32 version
如果編譯的是ranger-2.2.0源碼,需要安裝phthon3; 且編譯命令不能加assembly:assembly,會有沖突。
三、部署
3.1 數據庫配置
創建數據庫
mysql> create database ranger;
創建用戶
mysql> grant all privileges on ranger.* to ranger@'%' identified by 'bigdata123';
3.2 安裝組件
3.2.1 RangerAdmin
安裝RangerAdmin
①創建目錄mkdir /opt/module/ranger-2.0.0
解壓ranger-2.0.0-admin.tar.gz到該目錄下
[root@bigdata1 ranger-2.0.0]# tar -zxvf /opt/software/ranger-2.0.0-admin.tar.gz -C /opt/module/ranger-2.0.0/
②配置文件install.properties
#mysql驅動
SQL_CONNECTOR_JAR=/opt/module/ranger-2.0.0/ranger-2.0.0-admin/mysql-connector-java-5.1.45.jar
#mysql的主機名和root用戶的用戶名密碼
db_root_user=root
db_root_password=Password@123
db_host=192.168.101.174
#ranger需要的數據庫名和用戶信息,和2.2.1創建的信息要一一對應
db_name=ranger
db_user=ranger
db_password=bigdata123
#其他ranger admin需要的用戶密碼
rangerAdmin_password=bigdata123
rangerTagsync_password=bigdata123
rangerUsersync_password=bigdata123
keyadmin_password=bigdata123
#ranger存儲審計日志的路徑,默認為solr,這里為了方便暫不設置
audit_store=
#策略管理器的url,rangeradmin安裝在哪臺機器,主機名就為對應的主機名,不能寫ip
policymgr_external_url=http://bigdata1:6080
#啟動ranger admin進程的linux用戶信息
unix_user=hxr
unix_user_pwd=bigdata123
unix_group=hxr
#hadoop的配置文件目錄
hadoop_conf=/opt/module/hadoop-3.1.3/etc/hadoop
③切換到用戶root進行安裝
./setup.sh
注意:如果使用
sudo ./setup.sh
安裝會找不到JAVA_HOME,但是使用sudo echo ${JAVA_HOME}
是可以正常打印的,很奇怪???
④root用戶下軟路由配置文件
只需要執行./set_globals.sh
就會自動進行軟路由
執行結果如下
[root@cos-bigdata-hadoop-01 ranger-2.0.0-admin]# sudo -u -i ranger ./set_globals.sh
usermod:無改變
[2021/08/03 15:27:25]: [I] Soft linking /etc/ranger/admin/conf to ews/webapp/WEB-INF/classes/conf
啟動Ranger Admin
安裝時會自動將啟動腳本放到/usr/bin目錄下,同時根據配置的install.properties自動生成配置文件ranger-admin-site.xml。
執行鏈接命令時會將/etc/ranger/admin/conf目錄鏈接到ews/webapp/WEB-INF/classes/conf目錄。
也會將服務設為開機自啟,所以無需我們設置開機自啟。
但是自動生成的配置文件有兩處錯誤,我們需要手動修改。
①修改配置文件 /etc/ranger/admin/conf/ranger-admin-site.xml
<property>
<name>ranger.jpa.jdbc.password</name>
<value>bigdata123</value>
<description />
</property>
<property>
<name>ranger.service.host</name>
<value>192.168.101.179</value>
</property>
②啟動和關閉RangerAdmin
ranger-admin start/stop/restart
啟動后其后臺進程名為EmbeddedServer
③訪問UI
管理員賬號密碼為admin/bigdata123
http://192.168.101.179:6080
3.2.2 RangerUsersync
安裝
RangerUsersync作為Ranger提供的一個管理模塊,可以將Linux機器上的用戶和組信息同步到RangerAdmin的數據庫中進行管理。也可以同步LDAP等公司現有的用戶框架體系中的用戶到Ranger Admin中。
①解壓
[root@bigdata1 ranger-2.0.0]# tar -zxvf /opt/software/ranger-2.0.0-usersync.tar.gz -C /opt/module/ranger-2.0.0/
②修改配置文件install.properties
這里既可以配置同步linux上的用戶,也可以配置同步ldap上的用戶
Ⅰ. 同步linux用戶
#rangeradmin的url
POLICY_MGR_URL =http://192.168.101.179:6080
#同步間隔時間,單位(分鐘)
SYNC_INTERVAL = 1
#運行此進程的linux用戶
unix_user=hxr
unix_group=hxr
#rangerUserSync的用戶密碼,參考rangeradmin中install.properties的配置
rangerUsersync_password=bigdata123
#hadoop的配置文件目錄
hadoop_conf=/opt/module/hadoop-3.1.3/etc/hadoop
Ⅱ.同步ldap用戶
#rangeradmin的url
POLICY_MGR_URL =http://192.168.101.179:6080
#同步間隔時間,單位(分鐘)
SYNC_INTERVAL = 60
#運行此進程的linux用戶
unix_user=hxr
unix_group=hxr
#rangerUserSync的用戶密碼,參考rangeradmin中install.properties的配置
rangerUsersync_password=bigdata123
#hadoop的配置文件目錄
hadoop_conf=/opt/module/hadoop-3.1.3/etc/hadoop
# 同步的數據源類型,unix為同步linux用戶,ldap為同步ldap用戶
SYNC_SOURCE = ldap
# 同步時間,單位為min(不能小于60min)
SYNC_INTERVAL = 60
# ldap地址
SYNC_LDAP_URL = ldap://192.168.101.174:389
# ldap管理員用戶密碼
SYNC_LDAP_BIND_DN = cn=admin,dc=ldap,dc=chenjie,dc=asia
SYNC_LDAP_BIND_PASSWORD = bigdata123
# 同步用戶所在的路徑
SYNC_LDAP_SEARCH_BASE = ou=hive,dc=ldap,dc=chenjie,dc=asia
③在root用戶下安裝
./setup.sh
④修改配置文件 conf/ranger-ugsync-site.xml
<property>
<name>ranger.usersync.enabled</name>
<value>true</value>
</property>
啟動
ranger-usersync start/stop/restart
ranger-usersync服務也是開機自啟動的,因此之后不需要手動啟動!
3.2.3 Ranger Hive-plugin
安裝
①解壓ranger-2.0.0-hive-plugin.tar.gz
[root@bigdata1 ranger-2.0.0]# tar -zxvf /opt/software/ranger-2.0.0-hive-plugin.tar.gz -C /opt/module/ranger-2.0.0
②修改配置文件inistall.propreties
#策略管理器的url地址
POLICY_MGR_URL=http://192.168.101.179:6080
#組件名稱可以自定義
REPOSITORY_NAME=hivedev
#hive的安裝目錄
COMPONENT_INSTALL_DIR_NAME=/opt/module/hive-3.1.2
#hive組件的啟動用戶
CUSTOM_USER=hxr
#hive組件啟動用戶所屬組
CUSTOM_GROUP=hxr
③將hive配置文件軟連接到Ranger Hive-plugin目錄下
ln -s /opt/module/hive-3.1.2/conf /opt/module/ranger-2.0.0/ranger-2.0.0-hive-plugin
啟動
使用root用戶啟動Ranger Hive-plugin
./enable-hive-plugin.sh
執行./disable-hive-plugin.sh 可以關閉插件
會在hive的conf目錄下生成配置文件hiveserver2-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?><!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
--><configuration>
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.security.authorization.manager</name>
<value>org.apache.ranger.authorization.hive.authorizer.RangerHiveAuthorizerFactory</value>
</property>
<property>
<name>hive.security.authenticator.manager</name>
<value>org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator</value>
</property>
<property>
<name>hive.conf.restricted.list</name>
<value>hive.security.authorization.enabled,hive.security.authorization.manager,hive.security.authenticator.manager</value>
</property>
</configuration>
重啟hiveserver2生效
3.2.4 Ranger HDFS-plugin
安裝
①解壓ranger-2.0.0-hdfs-plugin.tar.gz
tar -zxvf /opt/software/ranger-2.0.0-hdfs-plugin.tar.gz -C /opt/module/ranger-2.0.0
②修改配置文件inistall.propreties
#策略管理器的url地址
POLICY_MGR_URL=http://192.168.101.179:6080
#組件名稱可以自定義
REPOSITORY_NAME=hdfsdev
#hdfs的安裝目錄
COMPONENT_INSTALL_DIR_NAME=/opt/module/hadoop-3.1.3
#hdfs組件的啟動用戶
CUSTOM_USER=hxr
#hdfs組件啟動用戶所屬組
CUSTOM_GROUP=hxr
③創建軟連接
ln -s /opt/module/hadoop-3.1.3/etc/hadoop /opt/module/ranger-2.0.0/ranger-2.0.0-hive-plugin/conf
/opt/module/ranger-2.0.0/ranger-2.0.0-hive-plugin/conf
ln -s /opt/module/hadoop-3.1.3/
啟動
[root@bigdata1 ranger-2.0.0-hdfs-plugin]# ./enable-hdfs-plugin.sh
關閉hdfs插件命令為
./disable-hdfs-plugin.sh
。除了關閉插件外,還需要刪除hadoop配置文件中ranger相關的配置文件,并且刪除hdfs-site.xml中插件添加的相關配置。
重啟hdfs生效
三、權限配置
3.1 Hive權限管理
3.1.1 添加hive組件
在Ranger Admin上配置hive插件。
在首頁上點擊Hive標簽的加號,跳轉到hive配置頁面
- Service Name:hivedev (必須與配置文件中的REPOSITORY_NAME一致)
- Username:hxr
- Password:無密碼可以隨便填
- jdbc.driverClassName:org.apache.hive.jdbc.HiveDriver
- jdbc.url:jdbc:hive2://192.168.101.179:10000
需要注意的是:
- hiveserver2需要進行重啟才能正常的使用Ranger Hive插件。在UI中配置hive完成后,先進行save,save完成后才會生成權限,否則所有用戶都沒有任何權限。
- username需要在core-site.xml中設置代理。
3.1.2 使用Ranger對Hive進行權限管理
save之后可以進入配置中,為每個用戶進行更細粒度的權限配置。
3.1.2.1 權限配置示例
在ACCESS中可以對權限進行配置
3.1.2.2 脫敏配置示例
在Masking可以指定用戶和字段,用戶在查詢表是將返回的該字段進行脫敏。
3.1.2.3 行級過濾示例
可以指定用戶和需要過濾掉的行,該用戶查詢時不會返回過濾掉的行記錄。
3.2 HDFS權限管理
3.2.1 添加hdfs組件
3.2.2 使用Ranger對hdfs進行權限管理
注:因為配置了網頁端代理用戶hxr,所以單獨使用沒有什么效果,需要配合Kerberos使用。
四、整合Kerberos完成認證鑒權
以上配置的是通過LDAP完成認證,Ranger完成鑒權。
也可以通過Kerberos完成認證,Ranger完成鑒權。
如果Hadoop集群中已經配置了Kerberos安全認證,Ranger也可以與Kerberos配合使用完成用戶的認證和權限控制。
配置見文章: Kerberos認證管理
4.1 創建系統用戶和Kerberos主題
Ranger的啟動和運行需使用特定的用戶,故須在Ranger所在節點創建所需系統用戶并在Kerberos中創建所需主體。
- 創建ranger系統用戶
useradd ranger -G hadoop
echo ranger | passwd --stdin ranger
參數-G表示創建的ranger同時屬于hadoop組和ranger組。
- 檢查HTTP主體是否正常(該主體在Hadoop開啟Kerberos時已創建)
kinit -kt /etc/security/keytab/spnego.service.keytab HTTP/bigdata1@IOTMARS.COM
-
創建rangeradmin主體
1)創建主體kadmin -padmin/admin -wPassword@123 -q "addprinc -randkey rangeradmin/bigdata1"
2)生成keytab文件
kadmin -padmin/admin -wPassword@123 -q "xst -k /etc/security/keytab/rangeradmin.keytab rangeradmin/bigdata1"
3)修改keytab文件所有者
chown ranger:ranger /etc/security/keytab/rangeradmin.keytab
-
創建rangerlookup主體
1)創建主體kadmin -padmin/admin -wPassword@123 -q "addprinc -randkey rangerlookup/bigdata1"
2)生成keytab文件
kadmin -padmin/admin -wPassword@123 -q "xst -k /etc/security/keytab/rangerlookup.keytab rangerlookup/bigdata1"
3)修改keytab文件所有者
chown ranger:ranger /etc/security/keytab/rangerlookup.keytab
-
創建rangerusersync主體
1)創建主體kadmin -padmin/admin -wPassword@123 -q "addprinc -randkey rangerusersync/bigdata1"
2)生成keytab文件
kadmin -padmin/admin -wPassword@123 -q "xst -k /etc/security/keytab/rangerusersync.keytab rangerusersync/bigdata1"
3)修改keytab文件所有者
chown ranger:ranger /etc/security/keytab/rangerusersync.keytab
4.2 安裝和啟動RangerAdmin
安裝RangerAdmin
①創建目錄mkdir /opt/module/ranger-2.0.0
解壓ranger-2.0.0-admin.tar.gz到該目錄下
[root@bigdata1 ranger-2.0.0]# tar -zxvf /opt/software/ranger-2.0.0-admin.tar.gz -C /opt/module/ranger-2.0.0/
②配置文件install.properties
#mysql驅動
SQL_CONNECTOR_JAR=SQL_CONNECTOR_JAR=/opt/module/ranger-2.0.0/ranger-2.0.0-admin/mysql-connector-java-5.1.45.jar
#mysql的主機名和root用戶的用戶名密碼
db_root_user=root
db_root_password=Password@123
db_host=192.168.101.174
#ranger需要的數據庫名和用戶信息,和2.2.1創建的信息要一一對應
db_name=ranger
db_user=ranger
db_password=bigdata123
#其他ranger admin需要的用戶密碼
rangerAdmin_password=bigdata123
rangerTagsync_password=bigdata123
rangerUsersync_password=bigdata123
keyadmin_password=bigdata123
#ranger存儲審計日志的路徑,默認為solr,這里為了方便暫不設置
audit_store=
#策略管理器的url,rangeradmin安裝在哪臺機器,主機名就為對應的主機名,不能寫ip地址
policymgr_external_url=http://bigdata1:6080
#啟動ranger admin進程的linux用戶信息。會將目錄所屬用戶改為ranger
unix_user=ranger
unix_user_pwd=ranger
unix_group=ranger
#hadoop的配置文件目錄
hadoop_conf=/opt/module/hadoop-3.1.3/etc/hadoop
#Kerberos相關配置
spnego_principal=HTTP/bigdata1@IOTMARS.COM
spnego_keytab=/etc/security/keytab/spnego.service.keytab
token_valid=30
cookie_domain=
cookie_path=/
admin_principal=rangeradmin/bigdata1@IOTMARS.COM
admin_keytab=/etc/security/keytab/rangeradmin.keytab
lookup_principal=rangerlookup/bigdata1@IOTMARS.COM
lookup_keytab=/etc/security/keytab/rangerlookup.keytab
③在root用戶下進行安裝
[root@bigdata1 ranger-2.0.0-admin]# ./setup.sh
出現如下信息表示安裝成功
2021-10-08 14:43:27,184 [I] Ranger all admins default password has already been changed!!
Installation of Ranger PolicyManager Web Application is completed.
注意:如果使用
sudo ./setup.sh
安裝會找不到JAVA_HOME,但是使用sudo echo ${JAVA_HOME}
是可以正常打印的,很奇怪???
啟動Ranger Admin
安裝時會自動將啟動腳本放到/usr/bin目錄下,同時根據配置的install.properties自動生成配置文件ranger-admin-site.xml。
執行鏈接命令時會將/etc/ranger/admin/conf目錄鏈接到ews/webapp/WEB-INF/classes/conf目錄。
也會將服務設為開機自啟,所以無需我們設置開機自啟。
但是自動生成的配置文件有兩處錯誤,我們需要手動修改。
①修改配置文件 /etc/ranger/admin/conf/ranger-admin-site.xml
<property>
<name>ranger.jpa.jdbc.password</name>
<value>bigdata123</value>
<description />
</property>
<property>
<name>ranger.service.host</name>
<value>192.168.101.179</value>
</property>
②啟動和關閉RangerAdmin
使用ranger用戶啟動/關閉/重啟 ranger-admin
[root@bigdata1 ranger-2.0.0-admin]# sudo -i -u ranger ranger-admin start/stop/restart
啟動后其后臺進程名為EmbeddedServer
③訪問UI
管理員賬號密碼為admin/bigdata123
http://192.168.101.179:6080
訪問路徑還是為 http://192.168.101.179:6080/login.jsp
4.3 安裝RangerUsersync
安裝
RangerUsersync作為Ranger提供的一個管理模塊,可以將Linux機器上的用戶和組信息同步到RangerAdmin的數據庫中進行管理。也可以同步LDAP等公司現有的用戶框架體系中的用戶到Ranger Admin中。
①解壓
[root@bigdata1 ranger-2.0.0]# tar -zxvf /opt/software/ranger-2.0.0-usersync.tar.gz -C /opt/module/ranger-2.0.0/
②修改配置文件install.properties
這里既可以配置同步linux上的用戶,也可以配置同步ldap上的用戶
Ⅰ. 同步linux用戶
#rangeradmin的url
POLICY_MGR_URL=http://192.168.101.179:6080
#同步linux用戶
SYNC_SOURCE = unix
#同步間隔時間,單位(分鐘)
SYNC_INTERVAL = 1
#運行此進程的linux用戶
unix_user=hxr
unix_group=hxr
#rangerUserSync的用戶密碼,參考rangeradmin中install.properties的配置
rangerUsersync_password=bigdata123
#hadoop的配置文件目錄
hadoop_conf=/opt/module/hadoop-3.1.3/etc/hadoop
#Kerberos相關配置
usersync_principal=rangerusersync/bigdata1@IOTMARS.COM
usersync_keytab=/etc/security/keytab/rangerusersync.keytab
需要配置Kerberos。
Ⅱ. 同步ldap用戶
#rangeradmin的url
POLICY_MGR_URL=http://192.168.101.179:6080
#運行此進程的linux用戶
unix_user=ranger
unix_group=ranger
#rangerUserSync的用戶密碼,參考rangeradmin中install.properties的配置
rangerUsersync_password=bigdata123
#hadoop的配置文件目錄
hadoop_conf=/opt/module/hadoop-3.1.3/etc/hadoop
#Kerberos相關配置
usersync_principal=rangerusersync/bigdata1@IOTMARS.COM
usersync_keytab=/etc/security/keytab/rangerusersync.keytab
# 日志保存路徑
logdir=/opt/module/ranger-2.2.0/ranger-2.2.0-usersync/logs
# 同步ldap數據
## 同步的數據源類型,默認為unix,同步linux用戶;這里配置為ldap,同步ldap用戶
SYNC_SOURCE = ldap
## 同步時間,單位為min (不能小于60min)
SYNC_INTERVAL = 60
## ldap地址
SYNC_LDAP_URL = ldap://192.168.101.174:389
## ldap管理員用戶密碼
SYNC_LDAP_BIND_DN = cn=admin,dc=ldap,dc=chenjie,dc=asia
SYNC_LDAP_BIND_PASSWORD = bigdata123
## 定義一個路徑
SYNC_LDAP_SEARCH_BASE = ou=hive,dc=ldap,dc=chenjie,dc=asia
# PID保存路徑
USERSYNC_PID_DIR_PATH=/var/run/ranger
# 同步用戶
## 同步用戶所在的路徑,默認值為SYNC_LDAP_SEARCH_BASE
SYNC_LDAP_USER_SEARCH_BASE =
## 查找用戶的范圍,可選base/one/sub,默認為sub
SYNC_LDAP_USER_SEARCH_SCOPE = sub
## default value: person
SYNC_LDAP_USER_OBJECT_CLASS = person
## default value is empty
SYNC_LDAP_USER_SEARCH_FILTER =
## 用戶名的屬性,默認為 cn
SYNC_LDAP_USER_NAME_ATTRIBUTE = cn
## default value is memberof,ismemberof
SYNC_LDAP_USER_GROUP_NAME_ATTRIBUTE = memberof,ismemberof
## possible values: none, lower, upper
SYNC_LDAP_USERNAME_CASE_CONVERSION=lower
SYNC_LDAP_GROUPNAME_CASE_CONVERSION=lower
# 同步用戶組
## 是否同步用戶的所在組,默認值為 false
SYNC_GROUP_SEARCH_ENABLED=true
SYNC_GROUP_USER_MAP_SYNC_ENABLED=true
## 同步用戶組所在的路徑,默認值為SYNC_LDAP_SEARCH_BASE
SYNC_GROUP_SEARCH_BASE=
## default value: sub
SYNC_GROUP_SEARCH_SCOPE=
## default value: groupofnames
SYNC_GROUP_OBJECT_CLASS=posixGroup
## default value is empty
SYNC_LDAP_GROUP_SEARCH_FILTER=
## default value: cn
SYNC_GROUP_NAME_ATTRIBUTE=
## 組中的用戶屬性,默認為 member
SYNC_GROUP_MEMBER_ATTRIBUTE_NAME=memberUid
在ldap中添加用戶時,在Membership中指定用戶組。
③在root用戶下安裝
./setup.sh
④修改配置文件 conf/ranger-ugsync-site.xml
<property>
<name>ranger.usersync.enabled</name>
<value>true</value>
</property>
啟動/關閉/重啟
sudo -i -u ranger ranger-usersync start/stop/restart
ranger-usersync服務也是開機自啟動的,因此之后不需要手動啟動!
4.4 安裝Ranger Hive-plugin
安裝
①解壓ranger-2.0.0-hive-plugin.tar.gz
[root@bigdata1 ranger-2.0.0]# tar -zxvf /opt/software/ranger-2.0.0-hive-plugin.tar.gz -C /opt/module/ranger-2.0.0
②修改配置文件inistall.propreties
#策略管理器的url地址
POLICY_MGR_URL=http://192.168.101.179:6080
#組件名稱可以自定義
REPOSITORY_NAME=hivedev
#hive的安裝目錄
COMPONENT_INSTALL_DIR_NAME=/opt/module/hive-3.1.2
#hive組件的啟動用戶
CUSTOM_USER=hive
#hive組件啟動用戶所屬組
CUSTOM_GROUP=hadoop
啟動
[root@bigdata1 ranger-2.0.0-hive-plugin]# ./enable-hive-plugin.sh
關閉hive插件命令為
./disable-hive-plugin.sh
,除了執行命令外,還需要刪除hive配置文件目錄下ranger相關的配置文件。
會在hive的conf目錄下生成多個配置文件
- ranger-hive-audit.xml
- ranger-hive-security.xml
- ranger-policymgr-ssl.xml
- ranger-security.xml
- hiveserver2-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?><!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
--><configuration>
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.security.authorization.manager</name>
<value>org.apache.ranger.authorization.hive.authorizer.RangerHiveAuthorizerFactory</value>
</property>
<property>
<name>hive.security.authenticator.manager</name>
<value>org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator</value>
</property>
<property>
<name>hive.conf.restricted.list</name>
<value>hive.security.authorization.enabled,hive.security.authorization.manager,hive.security.authenticator.manager</value>
</property>
</configuration>
重啟hiveserver2生效
[root@bigdata1 ranger-2.0.0-hive-plugin]# sudo -i -u hive nohup hiveserver2 1>/opt/module/hive-3.1.2/logs/hive-on-spark.log 2>/opt/module/hive-3.1.2/logs/hive-on-spark.err &
在ranger admin上配置hive插件
授予hive用戶在Ranger中的Admin角色
添加hive用戶,并將hive用戶的角色設置為Admin,組設置為hadoop。-
配置hive插件
image.png
此時點擊Test Connection,會報錯如下
Connection Failed.
Unable to retrieve any files using given parameters, You can still save the repository and start creating policies, but you would not be able to use autocomplete for resource names. Check ranger_admin.log for more info.
org.apache.ranger.plugin.client.HadoopException: Unable to execute SQL [show databases like "*"]..
Unable to execute SQL [show databases like "*"]..
Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [rangerlookup] does not have [USE] privilege on [Unknown resource!!].
Permission denied: user [rangerlookup] does not have [USE] privilege on [Unknown resource!!].
說明連接是正常的,只是沒有訪問權限(即是這個訪問不通也沒有影響,最終hiveserver2會拉取配置的規則緩存到本地目錄下)。
配置訪問規則即可,規則配置同上。
- 添加訪問權限
五、總結
5.1 UI和進程
UI界面:http://192.168.101.179:6080 (admin/bigdata123)
組件 | 進程名 | 啟動命令 |
---|---|---|
Ranger Admin | EmbeddedServer | ranger-admin start/stop/restart |
RangerUsersync | UnixAuthenticationService(root用戶可見) | ranger-usersync start/stop/restart(root用戶下啟動) |
Hive Plugin啟動命令: ./enable-hive-plugin.sh
./disable-hive-plugin.sh
5.2 異常
- 現象:使用Ranger的hive組件后報錯
User: root is not allowed to impersonate root
- 原因:可能是root用戶啟動的Ranger Hive Plugin,該插件通過權限判斷后最終提交任務時是以root用戶提交的,所以hadoop需要允許root用戶進行外部訪問。
- 解決:core-site.xml中添加root代理
<!-- 配置root允許通過代理訪問主機節點 -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<!-- 配置root允許通過代理用戶所屬組 -->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
5.3 添加用戶流程
5.3.1 創建Kerberos用戶
為用戶添加kerberos主體,設置密碼
kadmin.local -q "addprinc chenjie"
導出keytab(如果希望導出keytab且密碼不改變,需要在KDC所在節點執行如下命令)
kadmin.local -q "xst -norandkey -k ./chenjie.keytab chenjie@IOTMARS.COM"
5.3.2 創建Ranger用戶
如果配置了ranger-usersync插件,可以在對應的ldap中添加用戶等待同步;也可以直接在Ranger UI中添加用戶。
添加用戶后為其設置對應的hive/hdfs權限。
5.3.3 beeline連接hiveserver2
首先需要在節點上認證身份
kinit chenjie
然后通過beeline連接
beeline -u "jdbc:hive2://bigdata1:10000/;principal=hive/bigdata1@IOTMARS.COM"
5.3.4 訪問NameNode UI
安裝Kerberos客戶端,配置配置文件 C:\ProgramData\MIT\Kerberos5\krb5.ini
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
forwardable = true
rdns = false
default_realm = IOTMARS.COM
[realms]
IOTMARS.COM = {
kdc = 192.168.101.174
admin_server = 192.168.101.174
}
[domain_realm]
配置完成后,啟動Kerberos客戶端,認證用戶;
最后配置火狐瀏覽器在訪問bigdata1節點時使用Kerberos認證
about:config
network.negotiate-auth.trusted-uris = bigdata1
network.auth.use-sspi = false
5.3.5 DataGrip連接
5.3.5.1 DataGrip客戶端
DataGrip中的Hive連接驅動沒有整合Kerberos認證,所以需要自定義Hive驅動。
5.3.5.2 新建Driver
-
創建Driver
image.png 配置Driver
URL templates:jdbc:hive2://{host}:{port}/{database}[;<;,{:identifier}={:param}>]
5.3.5.3 新建連接
1)基礎配置
url:jdbc:hive2://bigdata1:10000/;principal=hive/bigdata1@IOTMARS.COM
2)高級配置
配置參數:
-Djava.security.krb5.conf="C:\\ProgramData\\MIT\\Kerberos5\\krb5.ini"
-Djava.security.auth.login.config="C:\\ProgramData\\MIT\\Kerberos5\\chenjie.conf"
-Djavax.security.auth.useSubjectCredsOnly=false
3)編寫JAAS(Java認證授權服務)配置文件chenjie.conf,內容如下,文件名和路徑須和上圖中java.security.auth.login.config參數的值保持一致。
com.sun.security.jgss.initiate{
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
useTicketCache=false
keyTab="C:\\ProgramData\\MIT\\Kerberos5\\chenjie.keytab"
principal="hxr@IOTMARS.COM";
};
4)將第一步生成的chenjie.keytab文件放到chenjie.conf中配置的keytab的路徑下
5)測試連接
六、Ranger整合LDAP
在原先的基礎上,繼續修改ranger的配置文件ranger-admin-site.xml
authentication_method=LDAP
xa_ldap_url=ldap://192.168.101.174:389
xa_ldap_userDNpattern=uid={0},ou=hive,dc=ldap,dc=chenjie,dc=asia
xa_ldap_groupSearchBase=
xa_ldap_groupSearchFilter=
xa_ldap_groupRoleAttribute=
xa_ldap_base_dn=ou=hive,dc=ldap,dc=chenjie,dc=asia
xa_ldap_bind_dn=cn=admin,dc=ldap,dc=chenjie,dc=asia
xa_ldap_bind_password=bigdata123
xa_ldap_referral=
xa_ldap_userSearchFilter=
在root用戶下 ./setup.sh 進行安裝,然后重啟 ranger-admin restart
。
在配置文件中配置的admin的密碼仍然有效,登錄后仍然是管理員用戶。ldap中的用戶也可以進行登陸,這些都是普通用戶。
七、總結
至此完成了一下功能
- 通過ranger來對hiveserver2的權限進行驗證
- usersync組件定時同步LDAP的hive用戶到Ranger中
- Ranger的UI可以使用LDAP的ranger組的用戶進行登陸
Hive整合LDAP進行登陸認證,翻看文章 LDAP