![](/wp-content/uploads/2022/05/640-1024x309.png)
作者简介
![](/wp-content/uploads/2022/05/640-1.png)
Greg Palmer
Alluxio 首席解决方案工程师
介绍
Alluxio让计算引擎实现在任何云环境中的数据编排。Alluxio统一了本地和跨云环境下的数据孤岛,实现数据本地性、可访问性和弹性,从而降低大数据和人工智能/机器学习(AI/ML)工作负载的管理数据和访问数据的难度。
Alluxio可以帮助所有计算框架高性能地访问任何环境下的数据存储,让企业能够快速地测试和应用新技术,从而保持敏捷性和竞争力。
![](/wp-content/uploads/2022/05/640-2.png)
图1. Alluxio 数据编排
1. Apache Ranger
目前,许多企业从最初的提取-转换-加载( ETL)和批处理分析的架构,演进到了集中式的数据湖的架构,这对集中式定义和控制精确的访问权限提出了要求。越来越多的企业数据管理者通过使用Apache Ranger来满足这一需求。
Apache Ranger是用于启用、监控和管理整个Hadoop平台综合数据安全的框架1,可满足以下需求:
· 提供集中的安全管理,在central UI上或通过REST APIs管理所有与安全相关的任务。
· 为Hadoop组件/工具执行特定的命令和/或操作时提供精细的授权,并通过集中管理工具进行管理。
· 对所有Hadoop组件中的授权方法进行标准化
· 支持不同授权方法的——基于角色的访问控制、基于属性的访问控制等。
· 在Hadoop的所有组件中集中审核用户(与安全有关的)访问和管理操作。
2. Alluxio和Apache Ranger
Alluxio实现虚拟文件系统,允许对异构数据存储访问,并提供统一的命名空间以及元数据缓存、数据缓存和基于策略的数据管理服务。为确保Alluxio虚拟文件系统的安全性,Alluxio提供下述功能:
· 用户验证(User Authentication)
· 用户授权(User Authorization)
· 权限管理清单(ACLs)
· 数据路径授权
· 客户端侧Hadoop用户模拟
· 审计(Auditing)
· 加密
Alluxio通过Ranger插件与Apache Ranger集成,支持用户授权和审计,如图2所示。
![](/wp-content/uploads/2022/05/640-3.png)
图2.在Alluxio中使用Ranger授权
当Apache Ranger管理员在Ranger中定义集中的访问策略后,Alluxio master节点可以检索到这些策略并缓存在本地,当用户向Alluxio虚拟文件系统发出读写请求时,Alluxio会强制执行这些策略。
3. 最佳实践
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管理控制台的服务管理器页面上,点击加号(+)来创建新的服务。
![](/wp-content/uploads/2022/05/640-4.png)
图3.在Ranger中创建Alluxio服务
Ranger上会显示创建服务页面,其中Alluxio master节点将被引用为目标服务。在该页面中,输入Alluxio服务的详细信息,包括唯一的服务名称。如果存在多个Alluxio环境,例如:一个用于开发,一个用于测试,还有几个位于不同数据中心的生产环境,那么Alluxio服务应使用具体的名称(例如alluxio-datacenter1-test)。同样,由于Alluxio使用HDFS插件,创建服务页面会显示HDFS属性。在Namenode URL一栏,输入Alluxio master节点的URI(比如alluxio://alluxio-master:19998)。
![](/wp-content/uploads/2022/05/640-5.png)
图4.Ranger服务属性
将 “Authorization Enabled(启用授权)”设置为 “Yes”将需要对所有用户进行验证,大多数企业会将验证类型设置为Kerberos。如果Ranger管理服务通过SSL证书进行配置,则应根据SSL证书的通用名称规范,正确设置证书通用名称(Common Name for Certificate)属性,Alluxio master节点应可以访问这些证书文件。注意,用户名和密码会设为Ranger管理员用户名和密码,而不是Alluxio管理员用户名和密码。点击创建按钮后将创建新的HDFS服务并显示在服务管理器页面上。
![](/wp-content/uploads/2022/05/640-6.png)
图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服务链接显示已定义的策略列表。
![](/wp-content/uploads/2022/05/640-7.png)
图6.Alluxio HDFS 服务
默认情况下,Ranger会为管理员用户创建多个策略,但目前没有针对Alluxio用户的策略。点击添加新策略按钮,显示创建策略页面。
![](/wp-content/uploads/2022/05/640-8.png)
图7.Ranger策略清单
在创建策略页面,递归地为用户目录(/sensitive_data1)下的特定用户组定义Allow策略,并只允许Read,Execute(读取、执行)。在本示例中,使用组名alluxio-users就可为该组的所有用户完成权限设置。
![](/wp-content/uploads/2022/05/640-9.png)
图8.创建Allow 访问策略
点击“添加”按钮,创建新策略,并在列表中显示新策略。
![](/wp-content/uploads/2022/05/640-10.png)
图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虚拟文件系统进行读写请求时将执行这些策略。
选项2:Alluxio执行现有的Ranger策略
如果配置该选项,由于Alluxio可使用现有HDFS服务中定义的策略,因此不需要在Ranger管理控制台中启用Alluxio服务插件。HDFS服务应当已经存在于管理控制台中,如图10所示。
![](/wp-content/uploads/2022/05/640-11.png)
图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
--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目录和文件的访问权限。
4. 总结
随着企业中数据管理团队和安全团队越来越多地扩展对数据湖的访问,拥有集中式精细的访问策略管理变得越来越重要。Alluxio可以通过两种方式使用Apache Ranger的集中式访问策略。1)直接控制对Alluxio虚拟文件系统中的虚拟路径的访问,或者2)对HDFS底层存储执行现有的访问策略。
如果您希望获取部署Alluxio和Apache Ranger的实践经验,可使用Alluxio Ranger最佳实践沙盒在个人电脑上部署Alluxio和Apache Ranger。要了解有关Alluxio安全性的更多信息,请联系Alluxio小助手查看Alluxio文档。