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大數據挖掘從入門到進階實戰》,喜歡的朋友或同學, 可以在公告欄那里點擊購買鏈接購買博主的書進行學習,在此感謝大家的支持。關注下面公眾號,根據提示,可免費獲取書籍的教學視頻。