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智庫]