Ranger權限管理

一、介紹

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的數據庫中,可以在定義策略時使用。

image.png


二、源碼編譯

需要從官網下載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配置頁面


配置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

需要注意的是:

  1. hiveserver2需要進行重啟才能正常的使用Ranger Hive插件。在UI中配置hive完成后,先進行save,save完成后才會生成權限,否則所有用戶都沒有任何權限。
  2. username需要在core-site.xml中設置代理。

3.1.2 使用Ranger對Hive進行權限管理

save之后可以進入配置中,為每個用戶進行更細粒度的權限配置。

3.1.2.1 權限配置示例

在ACCESS中可以對權限進行配置


image.png

3.1.2.2 脫敏配置示例

在Masking可以指定用戶和字段,用戶在查詢表是將返回的該字段進行脫敏。


image.png

3.1.2.3 行級過濾示例

可以指定用戶和需要過濾掉的行,該用戶查詢時不會返回過濾掉的行記錄。


image.png


3.2 HDFS權限管理

3.2.1 添加hdfs組件

image.png

3.2.2 使用Ranger對hdfs進行權限管理

image.png

注:因為配置了網頁端代理用戶hxr,所以單獨使用沒有什么效果,需要配合Kerberos使用。


四、整合Kerberos完成認證鑒權

以上配置的是通過LDAP完成認證,Ranger完成鑒權。
也可以通過Kerberos完成認證,Ranger完成鑒權。

如果Hadoop集群中已經配置了Kerberos安全認證,Ranger也可以與Kerberos配合使用完成用戶的認證和權限控制。

配置見文章: Kerberos認證管理

4.1 創建系統用戶和Kerberos主題

Ranger的啟動和運行需使用特定的用戶,故須在Ranger所在節點創建所需系統用戶并在Kerberos中創建所需主體。

  1. 創建ranger系統用戶
useradd ranger -G hadoop
echo ranger | passwd --stdin ranger

參數-G表示創建的ranger同時屬于hadoop組和ranger組。

  1. 檢查HTTP主體是否正常(該主體在Hadoop開啟Kerberos時已創建)
kinit -kt /etc/security/keytab/spnego.service.keytab HTTP/bigdata1@IOTMARS.COM
  1. 創建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
    
  2. 創建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
    
  3. 創建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插件

  1. 授予hive用戶在Ranger中的Admin角色
    添加hive用戶,并將hive用戶的角色設置為Admin,組設置為hadoop。

  2. 配置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會拉取配置的規則緩存到本地目錄下)。

配置訪問規則即可,規則配置同上。

  1. 添加訪問權限


五、總結

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

  1. 創建Driver


    image.png
  2. 配置Driver

image.png

URL templates:jdbc:hive2://{host}:{port}/{database}[;<;,{:identifier}={:param}>]

5.3.5.3 新建連接

1)基礎配置


image.png

url:jdbc:hive2://bigdata1:10000/;principal=hive/bigdata1@IOTMARS.COM

2)高級配置


image.png

配置參數:

-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中的用戶也可以進行登陸,這些都是普通用戶。


七、總結

至此完成了一下功能

  1. 通過ranger來對hiveserver2的權限進行驗證
  2. usersync組件定時同步LDAP的hive用戶到Ranger中
  3. Ranger的UI可以使用LDAP的ranger組的用戶進行登陸

Hive整合LDAP進行登陸認證,翻看文章 LDAP


參考

詳細信息可以瀏覽官網
usersync for ldap
ranger 配置(如LDAP驗證登陸)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,755評論 2 371

推薦閱讀更多精彩內容