1.概述
Apache Ranger提供了一個集中式的安全管理框架,使用者可以通過操作Ranger Admin頁面來配置各種策略,從而實現對Hadoop生成元件,比如HDFS、YARN、Hive、HBase、Kafka等進行細粒度的資料訪問控制。本篇部落格,筆者將為大家介紹如何Apache Ranger的安裝部署、以及使用。
2.內容
Apache Ranger提供以下核心功能,它們分別是:
- 通過統一的中心化管理介面或者REST介面來管理所有安全任務,從而實現集中化的安全管理;
- 通過統一的中心化管理介面,對Hadoop生態圈元件或者工具的操作進行更加細粒度級別的控制;
- 提供了統一的、標準化的授權方式;
- 支援基於角色的訪問控制,基於屬性的訪問控制等多種訪問控制手段;
- 支援對使用者訪問和管理操作的集中審計。
2.1 架構
Ranger的主要由以下幾個核心模組組成,它們分別是:
- Ranger Admin:該模組是Ranger的核心,它內建了一個Web管理介面,使用者可以通過這個Web管理介面或者REST介面來制定安全策略;
- Agent Plugin:該模組是嵌入到Hadoop生態圈元件的外掛,它定期從Ranger Admin拉取策略並執行,同時記錄操作以供審計使用;
- User Sync:該模組是將作業系統使用者/組的許可權資料同步到Ranger資料庫中。
它們之間的流程關係,如下圖所示:
2.2 工作流程
Ranger Admin是Apache Ranger和使用者互動的主要介面,使用者登入Ranger Admin時,可以針對不同的Hadoop元件定製不同的安全策略,當策略制定並儲存後,Agent Plugin會定期從Ranger Admin拉取該元件配置的所有策略,並快取到本地。
這樣,當有使用者來請求Hadoop元件的資料服務時,Agent Plugin就提供鑑權服務,並將鑑權結果反饋給相應的元件,從而實現了資料服務的許可權控制功能。當使用者在Ranger Admin中修改了配置策略後,Agent Plugin會拉取新策略並更新,如果使用者在Ranger Admin中刪除了配置策略,那麼Agent Plugin的鑑權服務也無法繼續使用。
以Hive為例子,具體流程如下所示:
3.安裝部署
3.1 基礎環境準備
3.2 下載原始碼
下載原始碼地址渠道,如下所示:
- 官網:https://ranger.apache.org/download.html
- Github:https://github.com/apache/ranger
3.3 編譯原始碼
Apache Ranger原始碼使用Java語言開發,編譯時需要使用Java環境,這裡我們使用Maven命令來進行編譯。Apache Ranger儲存資料庫支援MySQL資料庫,我們直接使用MySQL資料庫來作為Apache Ranger系統的儲存資料庫即可。
# 使用Maven命令編譯 mvn -DskipTests=true clean package
編譯成功後,會出現如下所示的截圖:
3.4 安裝Ranger Admin
編輯install.properties檔案,具體內容如下所示:
# 指明使用資料庫型別 DB_FLAVOR=MYSQL # 資料庫連線驅動 SQL_CONNECTOR_JAR=/appcom/ranger-admin/jars/mysql-connector-java-5.1.32-bin.jar # 資料庫root使用者名稱 db_root_user=root # 資料庫密碼 db_root_password=Hive123@ # 資料庫主機 db_host=nns:3306 # 以下三個屬性是用於設定ranger資料庫的 #資料庫名 db_name=ranger # 管理該資料庫使用者 db_user=root # 管理該資料庫密碼 db_password=Hive123@ # 不需要儲存,為空,否則生成的資料庫密碼為'_' cred_keystore_filename= # 審計日誌,如果沒有安裝solr,對應的屬性值為空即可 audit_store= audit_solr_urls= audit_solr_user= audit_solr_password= audit_solr_zookeepers= # 策略管理配置,配置ip和埠,預設即可 policymgr_external_url=http://nna:6080 # 配置hadoop叢集的core-site.xml檔案,把core-site.xml檔案拷貝到該目錄 hadoop_conf=/data/soft/new/hadoop-conf # rangerAdmin、rangerTagSync、rangerUsersync、keyadmin密碼配置。 # 預設為空,可以不配,對應的內部元件該屬性也要為空 rangerAdmin_password=ranger123 rangerTagsync_password=ranger123 rangerUsersync_password=ranger123 keyadmin_password=ranger123
執行setup.sh指令碼命令後,如果成功,會出現如圖所示的結果:
然後,執行set_globals.sh指令碼命令,會出現如下所示的結果。
[root@nna ranger-admin]# ./set_globals.sh usermod: no changes [2022/03/26 21:45:26]: [I] Soft linking /etc/ranger/admin/conf to ews/webapp/WEB-INF/classes/conf [root@nna ranger-admin]#
然後,在登入介面輸入“admin/ranger123”,成功進入主介面,如下圖所示:
3.5 安裝ranger-usersync
編輯install.properties檔案,具體內容如下所示:
# 配置ranger admin的地址 POLICY_MGR_URL = http://nna:6080 # 同步源系統型別 SYNC_SOURCE = unix # 同步間隔時間,1分鐘 SYNC_INTERVAL = 1 # usersync程式執行的使用者和使用者組 unix_user=ranger unix_group=ranger # 修改rangerusersync使用者的密碼。注意,此密碼應與ranger-admin中 # install.properties的rangerusersync_password相同。 # 此處可以為空,同樣ranger-admin的也要為空 rangerUsersync_password=ranger123 # 配置hadoop的core-site.xml路徑 hadoop_conf=/data/soft/new/hadoop-config # 配置usersync的log路徑 logdir=logs
執行setup.sh指令碼命令後,如果成功,會出現如圖所示的結果:
在Ranger Admin管理介面,出現如下所示的截圖,表名安裝成功。
4.配置Hive外掛
4.1 啟動外掛
編輯install.properties檔案,具體內容如下所示:
# 配置ranger admin的地址 POLICY_MGR_URL = http://nna:6080 # 配置hive的倉庫名 REPOSITORY_NAME=hive-ranger # 配置hive元件的HIVE_HOME COMPONENT_INSTALL_DIR_NAME=/data/soft/new/hive # 配置ranger-hive-plugin的所屬使用者、使用者組 CUSTOM_USER=hadoop CUSTOM_GROUP=hadoop
執行enable-hive-plugin.sh指令碼命令,使HDFS外掛生效。結果如下圖所示:
4.2 建立新使用者
在一臺Hadoop的Client節點上建立一個新使用者(hduser1024),具體操作命令如下所示:
# 新增一個使用者 [hadoop@nna ~]$ adduser hduser1024 # 將新增的使用者新增到已有的hadoop組中 [hadoop@nna ~]$ usermod -a -G hadoop hduser1024 # 複製hadoop使用者下的環境變數 [hadoop@nna ~]$ cp /home/hadoop/.bash_profile /home/hduser1024/
進入Ranger Admin管理介面新增新使用者,如下圖所示:
4.3 配置Hive策略
在Ranger Admin中選擇Hive策略模組,配置內容如下圖所示:
這裡策略名稱、使用者名稱和密碼可以任意填寫,JDBC驅動類和URL地址填寫內容如下所示:
# 驅動類 org.apache.hive.jdbc.HiveDriver # URL地址,使用Zookeeper模式連線方式 jdbc:hive2://dn1:2181,dn2:2181,dn3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2
接著,進入到具體的資料庫、表以及列的許可權設定頁面,如下圖所示:
4.4 Hive表許可權驗證
設定資料庫game_user_db,選擇表user_visit_pv,然後指定該表下的所有列(使用*號)授予hduser1024使用者擁有查詢許可權(select)。接著,我們可以在Hive的客戶端中執行查詢語句驗證許可權:
# 進入到Hive客戶端,並切換到指定資料庫 hive> use game_user_db; # 查詢表內容 hive> select * from user_visit_pv limit 2;
結果如下所示:
然後,我們進入到Hive策略中,修改只授予hduser1024使用者讀取uid欄位的許可權:
接著,我們可以在Hive的客戶端中執行查詢語句驗證許可權:
# 進入到Hive客戶端,並切換到指定資料庫 hive> use game_user_db; # 查詢表內容 hive> select uid from user_visit_pv limit 2; hive> select uid,pv from user_visit_pv limit 2;
結果如下圖所示:
可以看到hduser1024使用者只擁有讀取uid欄位的許可權,讀取pv欄位則會丟擲許可權異常的錯誤。
5.總結
綜合考慮,Apache Ranger能夠很好的和現有系統整合,比如:
- 支援多元件,比如HDFS、Hive、Kafka等,基本能覆蓋現有大資料元件;
- 支援日誌審計,便於問題排查;
- 用於自己的使用者管理體系,方便和其他系統整合。
6.結束語
這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行討論或傳送郵件給我,我會盡我所能為您解答,與君共勉!
另外,博主出書了《Kafka並不難學》和《Hadoop大資料探勘從入門到進階實戰》,喜歡的朋友或同學, 可以在公告欄那裡點選購買連結購買博主的書進行學習,在此感謝大家的支援。關注下面公眾號,根據提示,可免費獲取書籍的教學視訊。