介绍
Alluxio 支持任何云中的计算数据编排。它统一了本地和跨云环境的数据孤岛,以提供降低与当今大数据和 AI/ML 工作负载编排数据相关的复杂性所需的数据局部性、可访问性和弹性。
Alluxio 旨在帮助任何框架以高性能访问任何数据,无论环境如何,这使组织能够在采用和试验新技术和现有技术时保持敏捷和竞争力。
图 1:Alluxio 数据编排
阿帕奇游侠
许多组织已经扩展了对数据湖的访问权限,超出了最初的 ETL 和批处理分析用户,他们需要一种方法来集中定义和执行细粒度访问权限的方式。越来越多的企业数据经理正在采用 Apache Ranger 来满足这一需求。
Apache Ranger 是一个跨 Hadoop 平台启用、监控和管理综合数据安全性的框架。Ranger 的创建是为了实现以下目标:
- 提供集中式安全管理,以在中央 UI 中或使用 REST API 管理所有与安全相关的任务
- 提供细粒度授权以使用 Hadoop 组件/工具执行特定操作和/或操作,并通过中央管理工具进行管理
- 跨所有 Hadoop 组件标准化授权方法
- 增强对不同授权方式的支持:基于角色的访问控制、基于属性的访问控制等。
- 在 Hadoop 的所有组件中集中审核用户访问和管理操作(与安全相关)
Alluxio 和 Apache Ranger
Alluxio 实现了一个虚拟文件系统,提供对异构数据存储的访问,提供统一的命名空间以及元数据缓存、数据缓存和策略驱动的数据管理服务。为了使 Alluxio 虚拟文件系统安全,Alluxio 提供了以下功能:
- 用户认证
- 用户授权
- 访问控制列表 (ACL)
- 数据路径授权
- 客户端 Hadoop 模拟
- 审计
- 加密
Alluxio 使用 Ranger 插件与 Apache Ranger 集成,以支持用户授权和审计机制,如下图 2 所示。
图 2:使用 Alluxio 的 Ranger 授权
由于 Apache Ranger 管理员在 Ranger 中定义了集中访问策略,这些策略由 Alluxio 主节点在本地检索和缓存,并在用户向 Alluxio 虚拟文件系统发出读取或写入请求时由 Alluxio 强制执行。
最佳实践
Alluxio 支持使用 Apache Ranger 来管理和强制访问目录和文件。有两种方法可以将 Ranger 与 Alluxio 一起使用:
- 使用 Ranger 直接管理 Alluxio 虚拟文件系统路径的访问权限:当 Alluxio under file system (UFS) 不是 HDFS 或 Alluxio 有两个或多个 under 文件系统时,应使用此方法。
- 使用 Alluxio 的统一命名空间特性,Alluxio 将是主要的访问层:例如,Alluxio 可能有一个 HDFS UFS 和一个 S3 兼容的 UFS,它们使用 UNION UFS 挂载。
- 让 Alluxio 为文件系统下的 HDFS 强制执行现有的 Ranger 策略:当 Ranger 中管理现有的 HDFS 访问策略并且除了 HDFS 之外没有其他文件系统下时使用此方法。
虽然可以使用 Ranger 来管理 Alluxio 和底层文件系统的权限,但不建议同时启用两者,因为拥有多个事实来源可能会造成混淆。
选项 1:Ranger 管理 Alluxio 文件系统权限
使用此选项,需要在 Ranger 管理控制台中启用 Alluxio 服务插件。由于 Alluxio 使用 HDFS Ranger 插件类型,因此可以在 Service Manager 页面上定义新的 HDFS 服务。
第 1 步:创建 Alluxio HDFS 服务
在 Ranger 管理控制台的服务管理器页面中,单击加号 (+) 以创建新服务。
图 3:在 Ranger 中创建 Alluxio 服务
Ranger 将显示创建服务页面,其中将引用 Alluxio 主节点作为目标服务。在该页面上,输入 Alluxio 服务的详细信息,包括唯一的服务名称。如果存在多个Alluxio环境(即,一个用于开发,一个用于测试,以及不同数据中心的多个生产环境),则应使用Alluxio服务的特定名称(例如alluxio-datacenter1-test
)。同样,由于 Alluxio 使用 HDFS 插件,因此 Create Service 页面会显示 HDFS 属性。在 Namenode URL 属性中,输入 Alluxio 主节点 URI(例如alluxio://alluxio-master:19998
)。
图 4:游侠服务属性
将授权启用设置为“是”将要求所有用户都经过身份验证,并且大多数组织会将身份验证类型设置为 Kerberos。如果 Ranger Admin 服务配置了 SSL 证书,那么证书的 Common Name 属性应该设置正确(基于 SSL 证书的 CN 规范)并且 Alluxio 主节点应该可以访问这些证书文件。请注意,用户名和密码设置为 Ranger 管理员用户名和密码,而不是 Alluxio 管理员用户名和密码。单击 Create 按钮将创建新的 HDFS 服务并将其显示在 Service Manager 页面上。
第 2 步:配置 Alluxio 主节点
使用 Ranger 管理控制台创建 Alluxio Ranger HDFS 服务后,可以将 Alluxio 主节点配置为使用 Ranger HDFS 插件来检索和缓存 Ranger 策略。首先,从 HDFS 名称节点服务器上的 $HADOOP_CONF 目录中复制 core-site.xml、hdfs-site.xml、ranger-hdfs-security.xml、ranger-hdfs-audit.xml 和 ranger-policymgr-ssl.xml 文件到 Alluxio 主节点服务器上的 $ALLUXIO_HOME/conf 目录。应该修改 ranger-hdfs-security.xml 文件以命名使用上述步骤 1 中的 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>
alluxio-site.properties
应该更改 Alluxio 主节点上的文件以启用 Ranger 集成,如下所示:
alluxio.security.authorization.plugins.enabled=true alluxio.security.authorization.plugin.name=<插件名称> alluxio.security.authorization.plugin.paths=/opt/alluxio/conf alluxio.security.authorization.permission.umask=077
插件名称告诉 Alluxio 使用特定的 Ranger HDFS 插件,该插件位于 $ALLUXIO_HOME/lib 目录中的 .jar 文件中。支持多个版本的 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 主守护进程。
第 3 步:限制对敏感目录的 Alluxio 权限
当 Ranger 策略不适用于特定路径时,Alluxio 将回退到其自己的 POSIX 样式权限,以确定用户是否具有目录或文件的访问权限。因此,建议禁止除特权 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
chmod 077
在应由 Ranger 策略管理的任何子目录上执行。
当终端会话打开到一个 Alluxio 节点并尝试以/sensitive_data1
非 root 用户身份访问该目录时,应该显示如下“permission denied”消息:
$ 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------
第 4 步:创建 Ranger 允许策略
此时,数据管理团队和数据安全团队应审查底层文件系统(HDFS、S3、GCS 等)中的每个目录或文件夹路径,并确定应授予哪些用户组或用户访问每个路径。
使用 Ranger 管理控制台通过单击alluxio-datacenter1-test
HDFS 服务链接来定义允许策略以显示已定义策略的列表。
图 6:Alluxio HDFS 服务
默认情况下,Ranger 将为管理员用户创建多个策略,但尚无针对 Alluxio 用户的策略。单击添加新策略按钮以显示创建策略页面。
图 7:游侠政策列表
/sensitive_data1
在 Create Policy 页面上,以递归方式为用户目录 ( ) 上的特定用户组定义 Allow 策略。允许Read
,Execute
只有权限。在此示例中,使用组名可以为该组alluxio-users
中的所有用户完成此操作。
图 8:创建允许访问策略
单击添加按钮以创建新策略并在列表中显示新策略。
图 9:新 Ranger 政策
等待一分钟,Alluxio 主节点将检索和缓存该策略。然后在 Alluxio 节点上打开一个终端会话来测试允许策略。再次运行该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 策略只指定了对目录树Read
的Execute
权限。/sensitive_data1
稍后,使用 Ranger 从“允许”和“拒绝”策略中添加或删除用户组或特定用户。Alluxio 将重新扫描策略并更新其本地策略缓存,并在用户向 Alluxio 虚拟文件系统发出读取或写入请求时强制执行这些策略。
选项 2:Alluxio 执行现有的 Ranger 策略
使用此选项,无需在 Ranger 管理控制台中启用 Alluxio 服务插件,因为 Alluxio 可以使用现有 HDFS 服务中定义的策略。HDFS 服务应该已经存在于管理控制台中,如图 10 所示。
图 10:现有 HDFS Ranger 服务
但是,Alluxio 主节点需要配置为使用 Ranger 作为授权方。
第 1 步:配置 Alluxio 主节点
Alluxio 主节点可以配置为使用 Ranger HDFS 插件来检索和缓存 Ranger 策略。将HDFS 名称节点服务器上的 $HADOOP_CONF 目录中的core-site.xml
、hdfs-site.xml
、ranger-hdfs-security.xml
和文件复制ranger-hdfs-audit.xml
到ranger-policymgr-ssl.xml
Alluxio 主节点服务器上的 $ALLUXIO_HOME/conf 目录中。
然后,alluxio-site.properties
Alluxio 主节点上的文件应该通过两种方式进行更改。
首先,应该启用 Ranger 集成,如下所示:
alluxio.security.authorization.plugins.enabled=true
alluxio.security.authorization.permission.umask=077
然后,如果 HDFS 作为根 UFS 挂载,则应该将 Ranger 插件引用为用于根 UFS 的插件,如下所示:
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 挂载,而是使用嵌套挂载方法挂载,则 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 文件中。支持多个版本的 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 主守护进程。
第 2 步:重新格式化 Alluxio Masters
要使这些更改生效,需要使用以下命令重新格式化 Alluxio 主节点:
alluxio formatJournal
如果使用嵌入式日志 ( alluxio.master.journal.type=EMBEDDED
),请在每个主节点上运行该命令。如果使用日志类型UFS
,则只需在任何主节点上运行该命令一次。
现在 Alluxio 应该使用现有的 Ranger HDFS 服务策略来确定对 HDFS UFS 目录和文件的访问权限。
概括
随着数据管理员和安全团队为其组织的数据湖环境提供更广泛的访问权限,采用集中方式管理细粒度访问策略变得越来越重要。Alluxio 可以通过两种方式使用 Apache Ranger 的集中访问策略:
- 直接控制对 Alluxio 虚拟文件系统中的虚拟路径的访问,或者
- 对存储下的 HDFS 执行现有访问策略。
为了获得一些使用 Alluxio 和Apache Ranger的实践经验,您可以使用Alluxio Ranger Best Practices 沙箱在您自己的计算机上部署 Alluxio 和 Apache Ranger 。要了解有关Alluxio 安全性的更多信息,请参阅Alluxio 文档。
文章评论