Hadoop生態圈-Ranger數據安全管理框架
作者:尹正傑
版權聲明:原創作品,謝絕轉載!否則將追究法律責任。
一.Ranger簡介
Apache Ranger是一款被設計成全面掌握Hadoop生態系統的數據安全管理框架。它為Hadoop生態系統中眾多的組件提供了一個統一的數據授權和管理界面。使得系統管理員只需面對Ranger一個系統,就能對Hadoop整個生態體系進行數據授權,數據管理與審計。詳情請參考官網:http://ranger.apache.org/index.html。
Ranger從架構上看主要由三大部分組成:
1>.User sync:
Ranger系統有自己的內部用戶,從門戶系統的登陸到權限策略的分配都是基於這些內部用戶進行的。Ranger是一個統一Hadoop生態系統的安全管理框架,所以它面對的是Hadoop生態的眾多組件。而這些組件使用的是服務器上的Linux用戶,所以我們需要映射一份linux用戶數據成為Ranger的內部用戶。用戶同步服務就是專門來做這件事情的,Ranger 通過用戶同步服務實時的從Linux服務器中同步用戶數據。
2>.Admin Portol:
管理員門戶是一個Web UI控制台,用戶通過它可以創建和更新權限策略。每個組件(如HDFS,HBase等)的插件定期以輪詢的方式查詢這些策略。門戶系統還包括一個審計系統,mooed組件的插件會定期向審計系統發送收集到的操作日志。
3>.Plugins:
Ranger通過插件機制來實現並擴展自己的能力,這些插件本質上一些嵌入在每個集群服務中的輕量級Java程序。例如Apache Hive的Ranger插件就是嵌入在HiveServer2里面。這些插件會攔截請求並進行權檢查。同時這些插件還能收集用戶的操作日志並發送給管理門戶的審計系統。
二.安裝Ranger
現在開始安裝Ranger組件,我們依舊會借助Ambari來進行安裝。
1>.登陸Ambari,通過點擊首頁左下角的Actions按鈕我們會看到新建服務選項,如下圖所示:
2>.點擊新建服務之后會進入新建服務向導頁面。我們勾選Ranger和Ranger KMS這兩個服務並點擊下一步,如下圖所示:
3>.接着我們會看到一條提示信息,要求我們配置Ambari-Server的JDBC驅動信息,如下圖所示。因為Ranger需要使用關系型數據庫存儲一些元數據信息,這里我們選擇使用MySQL數據庫。將MySQL驅動jar包上傳到Ambari-Server所在的服務器,然后執行以下命令。

[root@node101 ~]# ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java.jar Using python /usr/bin/python Setup ambari-server Copying /usr/share/java/mysql-connector-java.jar to /var/lib/ambari-server/resources If you are updating existing jdbc driver jar for mysql with mysql-connector-java.jar. Please remove the old driver jar, from all hosts. Restarting services that need the driver, will automatically copy the new jar to the hosts. JDBC driver was successfully initialized. Ambari Server 'setup' completed successfully. [root@node101 ~]#
4>.將3個服務安裝在同一台機器上
5>.分配Tagsync,從客戶端和客戶端組件的分配。
6>.Ranger Admin的配置

[root@node101 ~]# mysql -uroot -pyinzhengjie Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 71 Server version: 5.6.42 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | ambari | | mysql | | performance_schema | +--------------------+ 4 rows in set (0.00 sec) mysql> CREATE DATABASE ranger; Query OK, 1 row affected (0.00 sec) mysql> GRANT ALL PRIVILEGES ON ranger.* TO 'ranger'@'node101.yinzhengjie.org.cn' IDENTIFIED BY 'yinzhengjie' WITH GRANT OPTION; Query OK, 0 rows affected (0.01 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) mysql> select Host,User,Password from mysql.user where user='ranger'; +----------------------------+--------+-------------------------------------------+ | Host | User | Password | +----------------------------+--------+-------------------------------------------+ | node101.yinzhengjie.org.cn | ranger | *BD0B1F48FDC55BD27555FC2F22FF29A68A25A1D7 | +----------------------------+--------+-------------------------------------------+ 1 row in set (0.00 sec) mysql> quit Bye [root@node101 ~]#

[root@node101 ~]# mysql -h node101.yinzhengjie.org.cn -uranger -pyinzhengjie Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 80 Server version: 5.6.42 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | ranger | +--------------------+ 2 rows in set (0.00 sec) mysql> quit Bye [root@node101 ~]#
7>.Ranger的配置
8>.配置RangerKMS

[root@node101 ~]# mysql -uroot -pyinzhengjie Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 84 Server version: 5.6.42 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> CREATE DATABASE rangerkms; Query OK, 1 row affected (0.00 sec) mysql> GRANT ALL PRIVILEGES ON rangerkms.* TO 'rangerkms'@'node101.yinzhengjie.org.cn' IDENTIFIED BY 'yinzhengjie' WITH GRANT OPTION; Query OK, 0 rows affected (0.01 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.01 sec) mysql> select Host,User,Password from mysql.user where user='rangerkms'; +----------------------------+-----------+-------------------------------------------+ | Host | User | Password | +----------------------------+-----------+-------------------------------------------+ | node101.yinzhengjie.org.cn | rangerkms | *BD0B1F48FDC55BD27555FC2F22FF29A68A25A1D7 | +----------------------------+-----------+-------------------------------------------+ 1 row in set (0.00 sec) mysql> quit Bye [root@node101 ~]#

[root@node101 ~]# mysql -h node101.yinzhengjie.org.cn -urangerkms -pyinzhengjie Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 85 Server version: 5.6.42 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | rangerkms | +--------------------+ 2 rows in set (0.00 sec) mysql> quit Bye [root@node101 ~]#
接着往下拉,需要你輸入一個密碼,如下圖所示,輸入后點擊下一步:
9>.配置完畢后,會彈出一個Dependent Configurations對話框,如下圖所示,點擊OK即可~
10>.忽略警告(我的電腦內存有限,分配的少點僅僅用於測試)
11>.確認配置無誤后,點擊Depoly按鈕
12>. 安裝服務成功
13>.點擊完成
14>.安裝完成后,需要陸續重啟已經部署的服務
三.配置服務
安裝完畢之后我們需要配置Ranger以讓它能夠正常工作,通過點擊Configs按鈕來到配置界面。如下圖所示,Ranger到配置項有很多分為了六大類,他們分別是管理員配置,用戶信息配置,插件配置,審計配置,標簽同步配置和高級配置。這里我們主要關注插件配置和審計配置,其他配置項保持默認即可。
1>.對Ranger的插件配置
2>.對Ranegr的審計配置
3>.保存配置信息
4>.點擊保存
5>.點擊Proceed Anyway
6>.點擊ok
7>.如下圖所示,按照提示重啟相應的服務即可
8>.重啟相應的服務之后,我們就可以去看看Ranger的Web UI管理控制台啦
四.Ranger功能介紹-查看Ranger用戶
1>.如下圖所示,通過Ambari的Quick Links功能進入Ranger的管理控制台,輸入默認的用戶名和密碼進行登陸(默認的用戶名和密碼均為“admin”)。
2>.單擊Settings設置按鈕進入Ranger用戶管理界面
3>.如下圖所示,點擊Setting之后,在這里可以看到Ranger的所有用戶。我們發現Ranger已經預建好來一批用戶,這些用戶是不是很眼熟呢?他們是Ambari用戶管理里面的集群組件用戶如出一轍。沒錯,這些用戶就是從Hadoop集群的Linux用戶同步過來的。
Ranger將用戶分為兩類來源,內部用戶和外部擴展用戶。
內部用戶:
是指Ranger自己單方面創建的用戶,主要用來做系統內部管理相關工作,與外部用戶沒有關聯。
外部用戶:
是指通過同步程序從集群服務中同步而來的用戶,是Ranger用戶和集群服務用戶的一層映射,主要用於權限策略的分配。如上圖所示,admin用戶屬於內部用戶,而所有同步過來的集群服務用戶均屬於外部擴展用戶。
五.Ranger功能介紹-權限策略
1>.現在我們開始介紹如何通過Ranger進行數據授權。如下圖所示,首先單擊“Access Manager”進入服務管理頁面。
2>.如下圖所示,我們會看到一個格柵布局的列表,他們是Ranger目前能夠支持的所有子系統。因為在安裝Ranger的時候已經開啟了HDFS的插件,所以我們在HDFS組件下可以看到“yinzhengjie_cluster_hadoop”服務。它是Ranger根據開啟的插件預建的服務項,以Ambari集群名稱 + 組件名稱的規則命名。
3>.點擊上圖中的“yinzhengjie_cluster_hadoop”進入HDFS的權限策略列表頁面。如下圖所示,這里可以查看,新建,修改根刪除HDFS的權限策略,單擊“Add New Pollicy”進入新建策略頁面:
4>.點擊上圖中的“Add New Pollicy”按鈕后,就可以進入下圖的界面,授權策略頁面分為Pollicy Detail和Allow Conditions兩個部分,下圖中針對各個參數都進行了標注:
5>.如上圖所示,點擊“Add”后我們就會在HDFS的策略界面中看到對應的規則,如下圖所示:
6>.接下來我們需要驗證下權限策略是否生效,首先通過ssh登陸到集群服務器並切換成ranger用戶。具體操作如下:
[root@node101 ~]# hostname node101.yinzhengjie.org.cn [root@node101 ~]# [root@node101 ~]# id ranger uid=1009(ranger) gid=1003(hadoop) groups=1003(hadoop),1006(ranger) [root@node101 ~]# [root@node101 ~]# su ranger [ranger@node101 root]$ [ranger@node101 root]$ hdfs dfs -ls / Found 9 items drwxrwxrwx - yarn hadoop 0 2018-12-08 03:46 /app-logs drwxr-xr-x - yarn hadoop 0 2018-12-08 03:46 /ats drwxr-xr-x - hdfs hdfs 0 2018-12-08 03:46 /hdp drwxr-xr-x - mapred hdfs 0 2018-12-08 03:46 /mapred drwxrwxrwx - mapred hadoop 0 2018-12-08 03:46 /mr-history drwxr-xr-x - hdfs hdfs 0 2018-12-08 22:07 /ranger drwxrwxrwx - hdfs hdfs 0 2018-12-08 03:46 /tmp drwxr-xr-x - hdfs hdfs 0 2018-12-07 16:12 /user drwxrwxrwx - hdfs hdfs 0 2018-12-07 22:19 /yinzhengjie [ranger@node101 root]$ [ranger@node101 root]$ hdfs dfs -mkdir /test mkdir: Permission denied: user=ranger, access=WRITE, inode="/test":hdfs:hdfs:drwxr-xr-x #看到沒?說是權限被拒絕!這是符合我們預期的,因為我們給他ranger用戶授權僅僅授權了READ。創建文件屬於寫操作! [ranger@node101 root]$
7>.接下來,我們需要編輯咱們之前自定義的策略,修改ranger用戶的權限,如下圖所示,首先點擊編輯:
8>.修改ranger的策略為讀寫,如下圖所示,別忘記點擊保存喲!
9>.修改授權成功后,我們繼續在之前的終端執行相同的操作(不需要退出之前的終端,只要授權修改后立即就生效啦!),發現可以成功創建文件和刪除文件,具體操作如下:
[ranger@node101 root]$ hostname node101.yinzhengjie.org.cn [ranger@node101 root]$ [ranger@node101 root]$ hdfs dfs -mkdir /test [ranger@node101 root]$ [ranger@node101 root]$ hdfs dfs -ls / Found 10 items drwxrwxrwx - yarn hadoop 0 2018-12-08 03:46 /app-logs drwxr-xr-x - yarn hadoop 0 2018-12-08 03:46 /ats drwxr-xr-x - hdfs hdfs 0 2018-12-08 03:46 /hdp drwxr-xr-x - mapred hdfs 0 2018-12-08 03:46 /mapred drwxrwxrwx - mapred hadoop 0 2018-12-08 03:46 /mr-history drwxr-xr-x - hdfs hdfs 0 2018-12-08 22:07 /ranger drwxr-xr-x - ranger hdfs 0 2018-12-09 00:53 /test drwxrwxrwx - hdfs hdfs 0 2018-12-08 03:46 /tmp drwxr-xr-x - hdfs hdfs 0 2018-12-07 16:12 /user drwxrwxrwx - hdfs hdfs 0 2018-12-07 22:19 /yinzhengjie [ranger@node101 root]$ [ranger@node101 root]$ hdfs dfs -rm /test #注意這里刪除目錄時,我們千萬別加“-R”參數,因為我們在給ranger用戶授權時,指定的路徑為根路徑,並沒有勾選遞歸按鈕! rm: `/test': Is a directory [ranger@node101 root]$ [ranger@node101 root]$ hdfs dfs -ls / Found 10 items drwxrwxrwx - yarn hadoop 0 2018-12-08 03:46 /app-logs drwxr-xr-x - yarn hadoop 0 2018-12-08 03:46 /ats drwxr-xr-x - hdfs hdfs 0 2018-12-08 03:46 /hdp drwxr-xr-x - mapred hdfs 0 2018-12-08 03:46 /mapred drwxrwxrwx - mapred hadoop 0 2018-12-08 03:46 /mr-history drwxr-xr-x - hdfs hdfs 0 2018-12-08 22:07 /ranger drwxr-xr-x - ranger hdfs 0 2018-12-09 00:53 /test drwxrwxrwx - hdfs hdfs 0 2018-12-08 03:46 /tmp drwxr-xr-x - hdfs hdfs 0 2018-12-07 16:12 /user drwxrwxrwx - hdfs hdfs 0 2018-12-07 22:19 /yinzhengjie [ranger@node101 root]$
六.Ranger功能介紹-審計日志
作為一個企業大數據平台,它的基礎服務會被大量上層應用使用(例如HDFS,HBase等)。對平台中基礎組件對操作進行追溯也是一項必不可少對功能,Ranger就能幫助實現審計日志對功能。Ranger為我們提供了四類審計日志功能,即訪問日志,管理員日志,登陸會話日志,插件日志。
1>.訪問日志
訪問日志主要記錄對是用戶對資源對訪問情況。還記得剛才使用ranger用戶執行了那些HDFS操作嗎?現在通過Audit審計菜單進入訪問日志頁面。
2>.管理員日志
管理員日志主要記錄的是管理員的操作,例如新建用戶,新建或者修權限策略這些操作都會被管理員日志記錄下來。
3>.登陸會話日志
登陸會話日志會記錄所有用戶的登陸行為,包括登陸人,登陸方式,登陸時間,登陸人的IP地址等信息。
4>.插件日志
Ranger的插件會定期從管理門戶獲取權限策略,插件日志就記錄了這些插件同步策略的軌跡。什么插件在哪個時間點更新何種策略都能清晰的在日志中體現。