介紹
Aapche Ranger是以插件的形式集成到HDFS中,由Ranger Admin管理訪問(wèn)策略,Ranger插件定期輪詢Admin更新策略到本地,并根據(jù)策略信息進(jìn)行用戶訪問(wèn)權(quán)限的判定。其中提供管理員管理策略、插件的Ranger web和Ranger Plugin,與Admin之間的通信是基于HTTP的RESTful架構(gòu)。Ranger集成HDFS的架構(gòu)圖如下:
Ranger對(duì)HDFS訪問(wèn)控制的實(shí)現(xiàn)原理
HDFS本身是有訪問(wèn)控制機(jī)制的,即在身份認(rèn)證機(jī)制之后通過(guò)查詢ACLs來(lái)對(duì)用戶的權(quán)限檢查,該權(quán)限檢查的實(shí)現(xiàn)代碼是INodeAttributeProvider抽象類中接口AccessControlEnforcer的checkPermission方法。Ranger將HDFS NameNode 的Inode attribute的提供類即INodeAttributeProvider抽象類修改為Ranger自己寫(xiě)的類,該類繼承了INodeAttributeProvider抽象類。即在hdfs-site.xml文件中修改如下配置項(xiàng)。
<name>dfs.namenode.inode.attributes.provider.class</name><value>org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer</value>
Ranger 插件的初始化過(guò)程
動(dòng)態(tài)加載類
在Namenode啟動(dòng)過(guò)程中編譯RangerHdfsAuthorizerorizer類(包名為ranger-hdfs-plugin-shim),將RangerHdfs的相關(guān)類動(dòng)態(tài)加載進(jìn)虛擬機(jī),并實(shí)例化具體實(shí)現(xiàn)類RangerHdfsAuthorizerorizer(包名為ranger-hdfs-plugin)。
1 rangerPluginClassLoader = RangerPluginClassLoader.getInstance(RANGER_PLUGIN_TYPE, this.getClass());2 @SuppressWarnings("unchecked")3 Class<INodeAttributeProvider> cls = (Class<INodeAttributeProvider>) Class.forName(RANGER_HDFS_AUTHORIZER_IMPL_CLASSNAME, true, rangerPluginClassLoader);4 activatePluginClassLoader();5