在前两篇文章中,我们介绍了 EMR 原生 Ranger 与 OpenLDAP 和 Windows AD 的集成解决方案。在本文中,我们将介绍开源 Ranger 集成。本文将讨论“OpenLDAP + Open-Source Ranger”。
1. OpenLDAP + 开源游侠解决方案概述
1.1 解决方案架构
在此解决方案中,OpenLDAP 扮演身份验证提供程序,所有用户帐户数据存储在其上,Ranger扮演授权控制器。它将从OpenLDAP同步帐户数据,以授予针对来自Open LDAP的用户帐户的权限。同时,EMR 集群需要安装一系列 Ranger 插件。这些插件将与 Ranger 服务器进行检查,以确保当前用户有权执行操作。EMR 集群还将通过 SSSD 从 OpenLDAP 同步账户数据,以便用户可以登录 EMR 集群的节点并提交作业。作为最终用户,他们可以使用她/他的OpenLDAP帐户登录EMR集群的SSH节点。如果 Hue 可用,他们也可以使用此帐户登录 Hue。
1.2 游侠详情
让我们深入了解游侠以获取更多详细信息;其体系结构如下所示:
安装程序将完成以下作业:
- 安装 安装 Solr 作为 Ranger 的审核存储。
- 安装游侠管理员。
- 安装 Ranger UserSync。
- 安装 HDFS Ranger 插件。
- 安装 Hive Ranger 插件。
- 安装程序会将本地主机视为 Ranger 服务器,以在 Ranger 上安装所有内容。对于非Ranger操作,即安装OpenLDAP,它将通过SSH启动远程操作。因此,您可以留在Ranger服务器上执行命令行。无需在多个主机之间切换。
- 尽管这不是必需的,但我们建议您始终使用 FQDN 作为主机地址。不建议同时使用不带域名的 IP 和主机名。
REGION
:AWS 区域,即cn-north-1
、us-east-1
等。ACCESS_KEY_ID
:您的 IAM 账户的 AWS 访问密钥 ID。确保您的帐户具有足够的权限;最好拥有管理员权限。SECRET_ACCESS_KEY
:您的 IAM 账户的 AWS 秘密访问密钥。SSH_KEY
:您刚刚上传的本地主机上的 SSH 私钥文件路径。OPENLDAP_HOST
:OpenLDAP 服务器的 FQDN。- 如果要更改默认组织名称:或默认密码:
dc=example,dc=com
Admin1234!
,请运行全参数版本,并将其替换为您自己的值。 - 如果您需要与外部工具集成,即集中式OpenLDAP或现有的MySQL或Solr,请添加相应的
--skip-xxx-xxx
选项并将其设置为true
。 - 如果您有另一个预定义的 Hue、Ranger 和 SSSD 绑定 DN,请添加相应的
--xxx-bind-dn
和--xxx-bind-password
选项来设置它们
2. 安装和集成
通常,安装和集成过程可以分为三个阶段:
1. 先决条件
2. 多合一安装
3. 创建 EMR 集群
下图详细说明了进度:
在第一阶段,我们需要做一些准备工作。在第 2 阶段,我们将开始安装和集成。在此阶段有两个选项:一个是由基于命令行的工作流驱动的一体化安装。另一个是分步安装。在大多数情况下,多合一安装始终是最佳选择;但是,您的安装工作流程可能会因不可预见的错误而中断。如果要从上一个失败的步骤继续安装,请尝试分步安装。您可能希望使用不同的参数值重试步骤以找到正确的步骤;循序渐进也是更好的选择。在第 3 阶段,我们需要创建一个 EMR 集群。如果已有,请跳过此作业。在大多数情况下,我们需要在现有集群上安装 Ranger,而不是新集群。对于 EMR 原生 Ranger,不可能在现有集群上安装(因为 EMR 原生 Ranger 插件只能在创建集群时安装),但开源 Ranger 没有这个问题。您可以自由地将其安装在现有或新的 EMR 集群上。
阶段 2 和阶段 3 之间的执行顺序略有重叠。在步骤 2.4 中,安装进度将挂起,安装程序将指示用户创建自己的集群并继续监控目标集群的状态com/articles/java-springboot-rest-api-to-uploaddownload-file-on“>REST actions.
作为设计原则,安装程序不包括创建 EMR 集群的任何操作。您应始终自行创建集群,因为 EMR 集群可能具有不可预测的设置,即特定于应用程序的(HDFS、Yarn 等)配置、步骤脚本、引导脚本等;不建议将 Ranger 的安装与 EMR 集群的创建相结合。
注释:
2.1 先决条件
2.1.1 将 EC2 实例创建为 Ranger 和 OpenLDAP 服务器
首先,我们需要准备两个 EC2 实例。一个作为Ranger的服务器,另一个作为OpenLDAP的服务器。创建实例时,请选择 Amazon Linux 2
镜像,并保证实例与待创建的集群之间的网络连接畅通。
作为最佳实践,建议将 Ranger 服务器添加到安全组中 ElasticMapReduce-master
,因为 Ranger 非常靠近 EMR 集群;它可以被视为非 EMR 内置主服务。对于 OpenLDAP,我们必须确保其端口 389 可从 Ranger 和要创建的 EMR 集群的所有节点访问。简单起见,您还可以将OpenLDAP添加到安全组中 ElasticMapReduce-master
。
2.1.2 下载安装程序
EC2 实例准备就绪后,选择 Ranger 服务器,通过 SSH 登录,然后运行以下命令以下载安装程序包:
sudo yum -y install git
git clone https://github.com/bluishglc/ranger-emr-cli-installer.git
2
3 上传 SSH 密钥文件
如前所述,安装程序基于本地主机(Ranger 服务器)。要在 OpenLDAP 或 EMR 集群上执行远程安装操作,需要 SSH 私钥,因此我们应该将其上传到 Ranger 服务器并记下文件路径;它将是变量 SSH_KEY
的值。
2.1.4 导出特定于环境的变量
在安装过程中,将多次传递以下特定于环境的参数;建议先导出它们,然后所有命令行都将引用这些变量而不是文字。
export REGION='TO_BE_REPLACED'
export ACCESS_KEY_ID='TO_BE_REPLACED'
export SECRET_ACCESS_KEY='TO_BE_REPLACED'
export SSH_KEY='TO_BE_REPLACED'
export OPENLDAP_HOST='TO_BE_REPLACED'
以下是上述变量的注释:
请根据您的环境仔细替换上述变量的值,并记住使用 FQDN 作为主机名,即 OPENLDAP_HOST
.以下是该示例的副本:
export REGION='cn-north-1'
export ACCESS_KEY_ID='<change-to-your-aws-access-key-id>'
export SECRET_ACCESS_KEY='<change-to-your-aws-secret-access-key>'
export SSH_KEY='/home/ec2-user/key.pem'
export OPENLDAP_HOST='ip-10-0-14-0.cn-north-1.compute.internal'
2.2 多合一安装
2.2.1 快速入门
现在,让我们开始一个多合一安装。执行以下命令行:
sudo sh ./ranger-emr-cli-installer/bin/setup.sh install \
--region "$REGION" \
--access-key-id "$ACCESS_KEY_ID" \
--secret-access-key "$SECRET_ACCESS_KEY" \
--ssh-key "$SSH_KEY" \
--solution 'open-source' \
--auth-provider 'openldap' \
--openldap-host "$OPENLDAP_HOST" \
--openldap-base-dn 'dc=example,dc=com' \
--openldap-root-cn 'admin' \
--openldap-root-password 'Admin1234!' \
--openldap-user-dn-pattern 'uid={0},ou=users,dc=example,dc=com' \
--openldap-group-search-filter '(member=uid={0},ou=users,dc=example,dc=com)' \
--openldap-user-object-class 'inetOrgPerson' \
--example-users 'example-user-1,example-user-2' \
--ranger-plugins 'open-source-hdfs,open-source-hive'
以上命令行的参数说明请参考附录。如果一切顺利,命令行将在工作流图中执行步骤 2.1 到 2.3。这可能需要十分钟或更长时间,具体取决于您的网络带宽 如果目标集群存在,我们可以立即填写其 ID。如果没有,我们应该切换到 EMR Web 控制台来创建它。接下来,命令行要求用户确认它是否允许 Hue 与 LDAP 集成。如果是这样,当集群准备就绪时,安装程序将使用特定于 Hue 的设置更新 EMR 配置(此操作将覆盖 EMR 的现有配置)。
填写以上两项,输入“y”确认所有输入。安装过程将恢复,如果目标 EMR 集群尚未准备就绪,命令行将继续监控,直到进入“正在等待”状态。以下是命令行此刻的快照:
当群集准备就绪(状态为“正在等待”)时,命令行将继续执行工作流的步骤 2.5 到 2.8,并以“全部完成!!“消息。
2.2.2 定制
现在多合一安装已完成,我们将介绍有关自定义的更多信息。通常,此安装程序遵循“约定重 于配置”的原则。 大多数参数都是默认预设的,上面命令行完整参数列表的等效版本如下:
sudo sh ./ranger-emr-cli-installer/bin/setup.sh install \
--region "$REGION" \
--access-key-id "$ACCESS_KEY_ID" \
--secret-access-key "$SECRET_ACCESS_KEY" \
--ssh-key "$SSH_KEY" \
--solution 'open-source' \
--auth-provider 'openldap' \
--openldap-host "$OPENLDAP_HOST" \
--openldap-base-dn 'dc=example,dc=com' \
--openldap-root-cn 'admin' \
--openldap-root-password 'Admin1234!' \
--openldap-user-dn-pattern 'uid={0},ou=users,dc=example,dc=com' \
--openldap-group-search-filter '(member=uid={0},ou=users,dc=example,dc=com)' \
--openldap-user-object-class 'inetOrgPerson' \
--example-users 'example-user-1,example-user-2' \
--ranger-plugins 'open-source-hdfs,open-source-hive' \
--java-home '/usr/lib/jvm/java' \
--skip-install-mysql 'false' \
--skip-install-solr 'false' \
--skip-install-openldap 'false' \
--skip-configure-hue 'false' \
--ranger-host $(hostname -f) \
--ranger-version '2.1.0' \
--mysql-host $(hostname -f) \
--mysql-root-password 'Admin1234!' \
--mysql-ranger-db-user-password 'Admin1234!' \
--solr-host $(hostname -f) \
--ranger-bind-dn 'cn=ranger,ou=services,dc=example,dc=com' \
--ranger-bind-password 'Admin1234!' \
--hue-bind-dn 'cn=hue,ou=services,dc=example,dc=com' \
--hue-bind-password 'Admin1234!' \
--sssd-bind-dn 'cn=sssd,ou=services,dc=example,dc=com' \
--sssd-bind-password 'Admin1234!' \
--restart-interval 30
全参数版本为我们提供了所有自定义选项的完整视角。在以下情况下,您可以更改某些选项的值:
此安装不会创建由“–xxx-bind-dn”选项分配的 DN 的原因是 DN 是树路径。要创建它,我们必须在路径中创建所有节点;实现如此小而复杂的功能并不划算。
2.3 分步安装
作为替代方法,您也可以选择分步安装,而不是一体式安装。我们给出每个步骤的命令行。至于每个参数的注释,请参阅附录。
2.3.1 初始化EC2
此步骤将完成一些基本工作,即安装 AWS CLI 、JDK 等。
sudo sh ./ranger-emr-cli-installer/bin/setup.sh init-ec2 \
--region "$REGION" \
--access-key-id "$ACCESS_KEY_ID" \
--secret-access-key "$SECRET_ACCESS_KEY"
2.3.2 安装 OpenLDAP
此步骤将在给定的OpenLDAP主机上安装OpenLDAP,如上所述。虽然此操作是在OpenLDAP服务器上执行的,但您无需登录OpenLDAP服务器。您只需在本地主机(Ranger 服务器)上运行命令行。
sudo sh ./ranger-emr-cli-installer/bin/setup
3.3 安装游侠
此步骤将安装Ranger的所有服务器端组件,包括MySQL,Solr,Ranger Admin和Ranger UserSync。
sudo sh ./ranger-emr-cli-installer/bin/setup.sh install-ranger \
--region "$REGION" \
--access-key-id "$ACCESS_KEY_ID" \
--secret-access-key "$SECRET_ACCESS_KEY" \
--solution 'open-source' \
--auth-provider 'openldap' \
--openldap-host "$OPENLDAP_HOST" \
--openldap-base-dn 'dc=example,dc=com' \
--ranger-bind-dn 'cn=ranger,ou=services,dc=example,dc=com' \
--ranger-bind-password 'Admin1234!' \
--openldap-user-dn-pattern 'uid={0},ou=users,dc=example,dc=com' \
--openldap-group-search-filter '(member=uid={0},ou=users,dc=example,dc=com)' \
--openldap-user-object-class 'inetOrgPerson'
2.3.4 创建 EMR 集群
对于分步安装,没有用于创建 EMR 集群的交互式过程,因此请随时在 EMR Web 控制台上创建集群,但我们必须等到集群完全准备就绪(处于“等待”状态),然后导出以下特定于环境的变量:
export EMR_CLUSTER_ID='TO_BE_REPLACED'
下面是一个示例的副本:
export EMR_CLUSTER_ID='j-2S04VJZ5YQHZ4'
2
5 安装游侠插件
此步骤将在 Ranger 服务器端和代理端(EMR 节点)安装 HDFS 和 Hive 插件。这与 EMR 原生游侠解决方案不同。对于 EMR 原生游侠,EMR 将自动在每个节点上安装代理端。对于开源游侠,我们必须通过这个安装程序自己完成这项工作。
sudo sh ./ranger-emr-cli-installer/bin/setup.sh install-ranger-plugins \
--region "$REGION" \
--ssh-key "$SSH_KEY" \
--solution 'open-source' \
--auth-provider 'openldap' \
--ranger-plugins 'open-source-hdfs,open-source-hive' \
--emr-cluster-id "$EMR_CLUSTER_ID"
2.3.6 安装 SSSD
此步骤将在 EMR 集群的每个节点上安装和配置 SSSD。与安装OpenLDAP相同;我们仍然应该保留本地主机来运行命令行;它将通过 SSH 在远程节点上执行。
sudo ./ranger-emr-cli-installer/bin/setup.sh install-sssd \
--region "$REGION" \
--ssh-key "$SSH_KEY" \
--openldap-host "$OPENLDAP_HOST" \
--openldap-base-dn 'dc=example,dc=com' \
--sssd-bind-dn 'cn=sssd,ou=services,dc=example,dc=com' \
--sssd-bind-password 'Admin1234!' \
--emr-cluster-id "$EMR_CLUSTER_ID"
2
7 配置色调
此步骤将更新 EMR 的 Hue 配置,如一体式安装中突出显示的那样。如果您有其他自定义的 EMR 配置,请跳过此步骤,但您仍可以通过命令行手动将生成的 Hue 配置的 JSON 文件合并到您自己的 JSON 中。
sudo sh ./ranger-emr-cli-installer/bin/setup.sh configure-hue \
--region "$REGION" \
--auth-provider 'openldap' \
--openldap-host "$OPENLDAP_HOST" \
--openldap-base-dn 'dc=example,dc=com' \
--hue-bind-dn 'cn=hue,ou=services,dc=example,dc=com' \
--hue-bind-password 'Admin1234!' \
--openldap-user-object-class 'inetOrgPerson' \
--emr-cluster-id "$EMR_CLUSTER_ID"
2.3.8 创建示例用户
此步骤将创建两个示例用户,以便于进行以下验证。
sudo sh ./ranger-emr-cli-installer/bin/setup.sh add-example-users \
--region "$REGION" \
--ssh-key "$SSH_KEY" \
--solution 'open-source' \
--auth-provider 'openldap' \
--openldap-host "$OPENLDAP_HOST" \
--openldap-base-dn 'dc=example,dc=com' \
--openldap-root-cn 'admin' \
--openldap-root-password 'Admin1234!' \
--example-users 'example-user-1,example-user-2'
3
验证作业分为两部分,分别针对 HDFS 和 Hive。首先,让我们通过客户端登录OpenLDAP,即LDAP Admin或Apache Directory Studio,然后查看所有DN;它应如下所示:
接下来,打开游侠 Web 控制台。地址为 ,默认管理员帐户/密码为 http://<YOUR-RANGER-HOST>:6080
admin/admin
。登录后,我们应该先打开“用户/组/角色”页面,看看OpenLDAP上的示例用户是否已同步到Ranger,如下所示:
接下来,登录到 EMR 集群的主节点并导出集群 ID,因为后续命令行需要此变量。
# run on master node of emr cluster
export EMR_CLUSTER_ID='TO_BE_REPLACED'
以下是该示例的副本:
# run on master node of emr cluster
export EMR_CLUSTER_ID='j-2S04VJZ5YQHZ4'
3
jpg“ data-new=”false“ data-size=”104162“ data-sizeformatted=”104.2 kB“ data-src=”https://dz2cdn3.dzone.com/storage/temp/16532394-ranger-1.jpg“ data-type=”temp“ data-url=”https://dz2cdn3.dzone.com/storage/temp/16532394-ranger-1.jpg“ src=”http://www.cheeli.com.cn/wp-content/uploads/2022/12/16532394-ranger-1.jpg“ style=”width: 900px;”/>
我们不为 配置 example-user-1
任何 HDFS 权限,但是如果我们使用 example-user-1
帐户登录 Hue ,您将看到它可以浏览 HDFS 上的大多数目录和文件。这是因为大多数目录和文件都有 a+w
权限。请记住,HDFS r/w/x
文件模式属性和基于 Ranger 的权限始终同时生效。
要验证 HDFS 插件是否有效,请选择“黑名单”模式进行测试。首先,让我们创建一个名为 /ranger-test
HDFS 的目录,并将 example-user-1 设置为它的所有者:
# run on master node of emr cluster
sudo -u hdfs hdfs dfs -mkdir /ranger-test
sudo -u hdfs hdfs dfs -chown example-user-1:example-group /ranger-test
sudo -u hdfs hdfs dfs -chmod 700 /ranger-test
接下来,让我们添加一个拒绝策略,该策略禁用示例用户 1 读写 ranger-test:
Ranger Web 控制台上的任何策略更改都将在 30 秒内同步到代理端(EMR 集群节点)。我们可以在主节点上运行以下命令,查看本地策略文件是否已更新:
# run on master node of emr cluster
for i in {1..10}; do
printf "\n%100s\n\n"|tr ' ' '='
sudo stat /etc/ranger/HDFS_${EMR_CLUSTER_ID}/policycache/hdfs_HDFS_${EMR_CLUSTER_ID}.json
sleep 3
done
一旦本地策略文件是最新的,拒绝策略就会生效。接下来,使用安装程序创建的OpenLDAP帐户“example-user-1”登录Hue,打开“文件浏览器”,单击根目录“/”,然后单击“ranger-test”文件夹。我们将收到以下错误消息:“无法访问:/ranger-test:”
即使当前用户 example-user-1 是此文件夹的所有者,它仍然被 Ranger HDFS 插件阻止。这意味着HDFS访问控制由Ranger管理。
最后,请记住删除“ranger-test”策略,以便示例用户 1 具有访问此文件夹的完全权限,因为以下 Hive 验证将重复使用此文件夹。
3.2 配置单元访问控制验证
通常,安装后 Hive 插件有一组预定义的策略。为了消除干扰并保持验证简单,让我们先删除它们:
Ranger Web 控制台上的任何策略更改都将在 30 秒内同步到代理端(EMR 集群节点).10};做
printf “\n%100s\n\n”|tr ‘ ‘ ‘=’
sudo stat /etc/ranger/HIVE_${EMR_CLUSTER_ID}/policycache/hiveServer2_HIVE_${EMR_CLUSTER_ID}.json
睡眠 3
done“ data-lang=”text/x-sh“>
# run on master node of emr cluster
for i in {1..10}; do
printf "\n%100s\n\n"|tr ' ' '='
sudo stat /etc/ranger/HIVE_${EMR_CLUSTER_ID}/policycache/hiveServer2_HIVE_${EMR_CLUSTER_ID}.json
sleep 3
done
本地策略文件保持最新后,该 removing-all-policies
操作将生效。接下来,使用安装程序创建的OpenLDAP帐户“example-user-1”登录Hue,打开Hive编辑器,然后输入以下SQL(请记住将“ranger-test”替换为您自己的存储桶)以创建测试表(将“ranger-test”更改为您自己的存储桶名称):
-- run in hue hive editor
create table ranger_test (
id bigint
)
row format delimited
stored as textfile location '/ranger-test';
接下来,运行它并发生错误:
它显示示例用户 1 被数据库相关权限阻止。这证明 Hive 插件正在工作。接下来,我们返回到 Ranger 并添加一个名为“all – 数据库、表、列”的 Hive 策略,如下所示:
它授予示例用户 1 对所有数据库、表和列的所有权限。接下来,使用上一个命令行在主节点上再次检查策略文件。更新后,返回到 Hue,重新运行该 SQL,它将按如下方式运行:
要仔细检查 example-user-1 是否对表具有完全读写权限,我们可以运行以下 SQL:
insert into ranger_test(id) values(1);
insert into ranger_test(id) values(2);
insert into ranger_test(id) values(3);
select * from ranger_test;
执行结果为:
到目前为止, Hive 访问控制验证已通过。
4
‘ 根据您的环境进行更改。
‘ 根据您的环境进行更改。
‘ 默认值为“假”。