写点什么

Apache 顶级项目 Ranger 和 Alluxio 的最佳实践(附教程)

作者:Alluxio
  • 2022 年 8 月 23 日
    北京
  • 本文字数:5152 字

    阅读完需:约 17 分钟

Apache顶级项目Ranger和Alluxio的最佳实践(附教程)

作者简介:Greg Palmer(Alluxio 首席解决方案工程师)

介绍

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=truealluxio.security.authorization.plugin.name=<plugin name>alluxio.security.authorization.plugin.paths=/opt/alluxio/confalluxio.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 /useralluxio fs chmod 777 /tmpalluxio fs chmod 700 /sensitive_data1alluxio fs chmod 700 /sensitive_data2
复制代码

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

当某个终端链接到 Alluxio 节点,并试图以 non-root 用户的身份访问/sensitive_data1 目录时,应显示类似如下的拒绝访问信息:

$ iduid=1001(user1) gid=1001(alluxio-users)$ alluxio fs ls /sensitive_data1Permission 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 命令,即可成功地显示子目录列表,如下所示:

$ iduid=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.jaralluxio-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.jaralluxio-authorization-ranger-1.1-hdp-3.0-enterprise-2.7.0-2.4.jaralluxio-authorization-ranger-1.2-hdp-3.1-enterprise-2.7.0-2.4.jaralluxio-authorization-ranger-0.6-hdp-2.5-enterprise-2.7.0-2.4.jaralluxio-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 安全性的更多信息,请联系 Alluxio 小助手(VX:Alluxio_Tianyu)查看 Alluxio 文档。


想要获取更多有趣有料的【活动信息】【技术文章】【大咖观点】,请点击关注



发布于: 刚刚阅读数: 4
用户头像

Alluxio

关注

还未添加个人签名 2022.01.04 加入

Alluxio是全球首个面向基于云原生数据分析和人工智能的开源的资料编排技术!能够在跨集群、跨区域、跨国家的任何云中将数据更紧密地编排接近数据分析和AI/ML应用程序,从而向上层应用提供内存速度的数据访问。

评论

发布
暂无评论
Apache顶级项目Ranger和Alluxio的最佳实践(附教程)_Ranger_Alluxio_InfoQ写作社区