Apache頂級項目Ranger和Alluxio的最佳實踐(附教程)

語言: CN / TW / HK
作者簡介:Greg Palmer(Alluxio首席解決方案工程師)

目錄

介紹

一、Apache Ranger

二、Alluxio和Apache Ranger

三、最佳實踐

選項一:Ranger管理Alluxio文件系統權限

選項二:Alluxio執行現有的Ranger策略

四、總 結


 

介紹

Alluxio讓計算引擎實現在任何雲環境中的數據編排。Alluxio統一了本地和跨雲環境下的數據孤島,實現數據本地性、可訪問性和彈性,從而降低大數據和人工智能/機器學習(AI/ML)工作負載的管理數據和訪問數據的難度。

Alluxio可以幫助所有計算框架高性能地訪問任何環境下的數據存儲,讓企業能夠快速地測試和應用新技術,從而保持敏捷性和競爭力。

圖1. Alluxio 數據編排

一、Apache Ranger

目前,許多企業從最初的提取-轉換-加載( ETL)和批處理分析的架構,演進到了集中式的數據湖的架構,這對集中式定義和控制精確的訪問權限提出了要求。越來越多的企業數據管理者通過使用Apache Ranger來滿足這一需求。

Apache Ranger是用於啟用、監控和管理整個Hadoop平台綜合數據安全的框架1,可滿足以下需求:

  • 提供集中的安全管理,在central UI上或通過REST APIs管理所有與安全相關的任務。
  • 為Hadoop組件/工具執行特定的命令和/或操作時提供精細的授權,並通過集中管理工具進行管理。
  • 對所有Hadoop組件中的授權方法進行標準化
  • 支持不同授權方法的——基於角色的訪問控制、基於屬性的訪問控制等。
  • 在Hadoop的所有組件中集中審核用户(與安全有關的)訪問和管理操作。

二、Alluxio和Apache Ranger

Alluxio實現虛擬文件系統,允許對異構數據存儲訪問,並提供統一的命名空間以及元數據緩存、數據緩存和基於策略的數據管理服務。為確保Alluxio虛擬文件系統的安全性,Alluxio提供下述功能:

  • 用户驗證(User Authentication)
  • 用户授權(User Authorization)
  • 權限管理清單(ACLs)
  • 數據路徑授權
  • 客户端側Hadoop用户模擬
  • 審計(Auditing)
  • 加密

Alluxio通過Ranger插件與Apache Ranger集成,支持用户授權和審計,如圖2所示。

圖2.在Alluxio中使用Ranger授權

當Apache Ranger管理員在Ranger中定義集中的訪問策略後,Alluxio master節點可以檢索到這些策略並緩存在本地,當用户向Alluxio虛擬文件系統發出讀寫請求時,Alluxio會強制執行這些策略。

三、最佳實踐

Alluxio支持使用Apache Ranger來管理和控制目錄和文件訪問。在Alluxio中使用Ranger有以下兩種方法:

  1. 使用Ranger來直接管理Alluxio虛擬文件系統路徑的訪問權限。如果Alluxio底層文件系統(UFS)並非HDFS,或者有兩個及兩個以上底層文件系統使用Alluxio的統一命名空間功能,並且Alluxio將成為主要的訪問層時,應使用該方法。例如,HDFS UFS和兼容S3的UFS可能同時通過UNION UFS掛載到Alluxio。
  2. 通過Alluxio對HDFS底層文件系統執行現有的Ranger策略。如果Ranger管理現有的HDFS訪問策略,並且除了HDFS之外沒有其他的底層文件系統,則可以使用該方法。

雖然Alluxio和底層文件系統的權限都可以使用Ranger來管理,但不建議同時啟用二者,因為多個數據源容易造成麻煩。

選項一:Ranger管理Alluxio文件系統權限

如果使用該選項,需要在Ranger管理控制枱中啟用Alluxio服務插件。由於Alluxio使用HDFS Ranger插件類型,可在服務管理器頁面中定義新的HDFS服務。

  • 第一步:創建Alluxio HDFS服務

在Ranger管理控制枱的服務管理器頁面上,點擊加號(+)來創建新的服務。

圖3.在Ranger中創建Alluxio服務

 

Ranger上會顯示創建服務頁面,其中Alluxio master節點將被引用為目標服務。在該頁面中,輸入Alluxio服務的詳細信息,包括唯一的服務名稱。如果存在多個Alluxio環境,例如:一個用於開發,一個用於測試,還有幾個位於不同數據中心的生產環境,那麼Alluxio服務應使用具體的名稱(例如alluxio-datacenter1-test)。同樣,由於Alluxio使用HDFS插件,創建服務頁面會顯示HDFS屬性。在Namenode URL一欄,輸入Alluxio master節點的URI(比如alluxio://alluxio-master:19998)。

圖4.Ranger服務屬性

 

將 “Authorization Enabled(啟用授權)”設置為 “Yes”將需要對所有用户進行驗證,大多數企業會將驗證類型設置為Kerberos。如果Ranger管理服務通過SSL證書進行配置,則應根據SSL證書的通用名稱規範,正確設置證書通用名稱(Common Name for Certificate)屬性,Alluxio master節點應可以訪問這些證書文件。注意,用户名和密碼會設為Ranger管理員用户名和密碼,而不是Alluxio管理員用户名和密碼。點擊創建按鈕後將創建新的HDFS服務並顯示在服務管理器頁面上。

圖5.新HDFS服務

 

  • 第二步:配置Alluxio Master節點

當使用Ranger管理控制枱創建Alluxio Ranger HDFS服務後,就可以將Alluxio master節點配置為使用Ranger HDFS插件來檢索和緩存Ranger策略。首先,將core-site.xml, hdfs-site.xml, ranger-hdfs-security.xml, ranger-hdfs-audit.xml 和ranger-policymgr-ssl.xml文件從HDFS namenode服務器上的$HADOOP_CONF目錄拷貝到Alluxio master節點服務器上的$ALLUXIO_HOME/conf目錄。修改ranger-hdfs-security.xml文件,以命名在上述第一步中使用Ranger管理控制枱定義的Alluxio Ranger HDFS服務。如下所示:

<property>
          <name>ranger.plugin.hdfs.service.name</name>
          <value>alluxio-datacenter1-test</value>
          <description>
               Name of the Ranger service containing
               policies for this Alluxio instance
          </description>
     </property>

為啟用Ranger集成,應修改Alluxio master 節點上的alluxio-site.properties文件,如下所示:

alluxio.security.authorization.plugins.enabled=true
alluxio.security.authorization.plugin.name=<plugin name>
alluxio.security.authorization.plugin.paths=/opt/alluxio/conf
alluxio.security.authorization.permission.umask=077

例如,如果使用的是Privacera 4.7,應將插件命名為ranger-privacera-4.7,如果使用的是Hortonworks HDP 2.6,應將插件命名為ranger-hdp-2.6。

在拷貝Ranger xml文件並修改alluixo-site.properties文件後,重新啟動Alluxio master進程。

  • 第三步 限制Alluxio對敏感目錄的權限

當Ranger策略對特定路徑不可用時,Alluxio會使用自帶的POSIX權限來確定用户是否對目錄或文件有訪問權限。因此,我們建議除了privileged root用户外,所有用户都無權訪問除/tmp目錄外的任何目錄。要執行這一策略,運行以下Alluxio cli命令:

alluxio fs chmod 777 /
alluxio fs chmod 777 /user
alluxio fs chmod 777 /tmp
alluxio fs chmod 700 /sensitive_data1
alluxio fs chmod 700 /sensitive_data2

在所有由Ranger策略管理的子目錄上執行chmod 077 …

當某個終端鏈接到Alluxio節點,並試圖以non-root用户的身份訪問/sensitive_data1 目錄時,應顯示類似如下的拒絕訪問信息:

$ id
uid=1001(user1) gid=1001(alluxio-users)
​
$ alluxio fs ls /sensitive_data1
Permission denied by authorization plugin: alluxio.exception.AccessControlException: Permission denied: user=user1, access=--x, path=/sensitive_data1: failed at /, inode owner=root, inode group=root, inode mode=rwx------
  • 第四步 創建Ranger Allow策略

這一步,數據管理團隊和數據安全團隊應查看底層文件系統(HDFS、S3、GCS等)的各個目錄或文件夾路徑,並確定將各個路徑的訪問權授予哪些用户組或用户。

使用Ranger管理控制枱來定義Allow策略,可點擊alluxio-datacenter1-test HDFS服務鏈接顯示已定義的策略列表。

圖6.Alluxio HDFS 服務

 

默認情況下,Ranger會為管理員用户創建多個策略,但目前沒有針對Alluxio用户的策略。點擊添加新策略按鈕,顯示創建策略頁面。

圖7.Ranger策略清單

 

在創建策略頁面,遞歸地為用户目錄(/sensitive_data1)下的特定用户組定義Allow策略,並只允許Read,Execute(讀取、執行)。在本示例中,使用組名alluxio-users就可為該組的所有用户完成權限設置。

圖8.創建Allow 訪問策略

 

點擊“添加”按鈕,創建新策略,並在列表中顯示新策略。

圖9.新的Ranger策略

 

待Alluxio master節點檢索完畢並緩存該策略後,在Alluxio節點上打開一個終端會話,測試Allow策略。再次運行alluxio fs ls命令,即可成功地顯示子目錄列表,如下所示:

$ id
uid=1001(user1) gid=1001(alluxio-users)
​
$ alluxio fs ls /sensitive_data1/dataset1/
-rw-------  root root 283 PERSISTED 02-01-2022 14:59:45:457 100% /sensitive_data1/dataset1/data-file-001
$ alluxio fs copyFromLocal my_data-file-002 /sensitive_data1/dataset1/
Permission denied by authorization plugin: alluxio.exception.AccessControlException: Permission denied: user=user1, access=--x, path=/sensitive_data1/dataset1/my_data-file-002: failed at /, inode owner=root, inode group=root, inode mode=rwx------

請注意,Ranger策略允許對/sensitive_data1/dataset1/目錄進行讀取訪問,但不允許對其進行寫入訪問(copyFromLocal命令失敗)。這是因為Ranger策略只對/sensitive_data1目錄樹設置了Read,Execute的權限。

之後,使用Ranger在Allow和Deny策略中添加或刪除用户組或特定用户。Alluxio會重新掃描這些策略,並更新其本地策略緩存,當用户對Alluxio虛擬文件系統進行讀寫請求時將執行這些策略。

選項二:Alluxio執行現有的Ranger策略

如果配置該選項,由於Alluxio可使用現有HDFS服務中定義的策略,因此不需要在Ranger管理控制枱中啟用Alluxio服務插件。HDFS服務應當已經存在於管理控制枱中,如圖10所示。

圖10.現有的HDFS Ranger服務

 

這裏需要將Alluxio master節點配置為使用Ranger授權。

  • 第一步:配置Alluxio Master節點

將Alluxio master節點配置為使用Ranger HDFS插件來檢索和緩存Ranger策略4。將HDFS namenode服務器上的$HADOOP_CONF目錄中的core-site.xml, hdfs-site.xml, ranger-hdfs-security.xml, ranger-hdfs-audit.xml 和 ranger-policymgr-ssl.xml文件拷貝到Alluxio master節點服務器的$ALLUXIO_HOME/conf目錄裏。

接下來,修改Alluxio master節點上的alluxio-site.properties文件,步驟如下:

首先,啟用Ranger集成,操作如下:

alluxio.master.mount.table.root.option.alluxio.underfs.security.authorization.plugin.name=<plugin name>
alluxio.master.mount.table.root.option.alluxio.underfs.security.authorization.plugin.paths=/opt/alluxio/conf如果HDFS並非掛載為根UFS,而是使用嵌套(nested)掛載方法,則Alluxio掛載命令應包括指定Ranger插件名稱和插件路徑的選項,如下所示:
alluxio fs mount \

如果HDFS並非掛載為根UFS,而是使用嵌套(nested)掛載方法,則Alluxio掛載命令應包括指定Ranger插件名稱和插件路徑的選項,如下所示:

alluxio fs mount \
--option alluxio.underfs.security.authorization.plugin.name=<plugin name> \
--option alluxio.underfs.security.authorization.plugin.paths=/opt/alluxio/conf \
--option alluxio.underfs.version=2.7 \
/my_hdfs_mount \
hdfs://<name node>:<port>/

插件名稱會提示Alluxio使用的特定Ranger HDFS插件(位於$ALLUXIO_HOME/lib目錄下的.jar文件中)。Alluxio支持幾個不同版本的Apache Ranger,並通過以下jar文件實現:

alluxio-authorization-ranger-2.0-cdp-7.1-enterprise-2.7.0-2.4.jar
alluxio-authorization-ranger-0.5-hdp-2.4-enterprise-2.7.0-2.4.jar
​alluxio-authorization-ranger-0.7-hdp-2.6-enterprise-2.7.0-2.4.jar
alluxio-authorization-ranger-1.1-hdp-3.0-enterprise-2.7.0-2.4.jar
alluxio-authorization-ranger-1.2-hdp-3.1-enterprise-2.7.0-2.4.jar
alluxio-authorization-ranger-0.6-hdp-2.5-enterprise-2.7.0-2.4.jar
alluxio-authorization-ranger-2.1-privacera-4.7-enterprise-2.7.0-2.4.jar

例如,如果使用的是Privacera 4.7,應將插件命名為ranger-privacera-4.7,如果使用的是Hortonworks HDP 2.6,應將插件命名為ranger-hdp-2.6。

在拷貝Ranger xml文件並修改alluixo-site.properties文件後,重新啟動Alluxio master進程。

  • 第二步 重新格式化Alluxio Masters

為了使以上修改生效,需要使用以下命令重新格式化Alluxio master節點。

alluxio formatJournal

如果使用嵌入式日誌(alluxio.master.journal.type=EMBEDDED),則應在每個master節點上運行該命令。如果使用UFS日誌類型,則只需在任一master節點上運行一次該命令。

現在,Alluxio應使用現有的Ranger HDFS服務策略來設置對HDFS UFS目錄和文件的訪問權限。

四、總 結

隨着企業中數據管理團隊和安全團隊越來越多地擴展對數據湖的訪問,擁有集中式精細的訪問策略管理變得越來越重要。Alluxio可以通過兩種方式使用Apache Ranger的集中式訪問策略。1)直接控制對Alluxio虛擬文件系統中的虛擬路徑的訪問,或者2)對HDFS底層存儲執行現有的訪問策略。

如果您希望獲取部署Alluxio和Apache Ranger的實踐經驗,可使用Alluxio Ranger最佳實踐沙盒在個人電腦上部署Alluxio和Apache Ranger。

想要獲取更多有趣有料的【活動信息】【技術文章】【大咖觀點】,請點擊關注[Alluxio智庫]