希望您喜欢本系列的前四篇文章。在本系列的最后一篇文章中,我们将介绍最后一个高适用性方案:“Windows AD + Open-Source Ranger”。
1. Windows AD + 开源游侠解决方案概述
1.1 解决方案架构
在此解决方案中,Windows AD 扮演身份验证提供程序,所有用户帐户数据存储在其上,Ranger 扮演授权控制器;它将从 Windows AD 同步帐户数据,以授予针对来自 Windows AD 的用户帐户的权限。同时,EMR 集群需要安装一系列 Ranger 插件。这些插件将与 Ranger 服务器进行检查,以确保当前用户有权执行操作。EMR 集群还将通过 SSSD 从 Windows AD 同步账户数据,以便用户可以登录 EMR 集群的节点并提交作业。作为最终用户,他们可以使用她/他的 Windows AD 帐户登录 EMR 集群的 SSH 节点。如果 Hue 可用,他们也可以使用此帐户登录 Hue。
1.2 游侠详情
让我们深入了解游侠以获取更多详细信息;其 体系结构 如下所示:
安装程序将完成以下作业:
- 安装 MySQL 作为 Ranger 的策略数据库。
- 安装 Solr 作为 Ranger 的审核存储。
- 安装游侠管理员。
- 安装 Ranger UserSync。
- 安装 HDFS Ranger 插件。
- 安装 Hive Ranger 插件。
2. 安装和集成
通常,安装和集成过程可以分为三个阶段:
- 先决条件
- 多合一安装
- 创建 EMR 集群。
下图详细说明了进度:
在第一阶段,我们需要做一些准备工作。在第 2 阶段,我们开始安装和集成。在此阶段有两个选项:一个是由基于命令行的工作流驱动的一体化安装。另一个是分步安装。在大多数情况下,多合一安装始终是最佳选择;但是,您的安装工作流程可能会因不可预见的错误而中断。如果要从上一个失败的步骤继续安装,请尝试分步安装。如果要使用不同的参数值重试步骤以找到正确的步骤,分步也是更好的选择。在第 3 阶段,我们需要创建一个 EMR 集群。如果已有,请跳过此作业。在大多数情况下,我们需要在现有集群上安装 Ranger,而不是新集群。对于 EMR 原生 Ranger,无法在现有集群上安装(因为 EMR 原生 Ranger 插件只能在创建集群时安装),但开源 Ranger 没有这个问题,因此您可以自由安装在现有或新的 EMR 集群上 在步骤 2.4 中,安装进度将挂起,安装程序将指示用户创建自己的群集并继续监视目标群集的状态。群集准备就绪后,进度将恢复并继续执行 REST 操作。
作为设计原则,安装程序不包括创建 EMR 集群的任何操作。您应始终自己创建集群,因为 EMR 集群可能具有不可预测的设置,即特定于应用程序的(HDFS、 Yarn 等)配置、步骤脚本、引导脚本等。不建议将 Ranger 的安装与 EMR 集群的创建相结合。
注释:
- 安装程序会将本地主机视为 Ranger 服务器,以在 Ranger 上安装所有内容。对于非 Ranger 操作,即安装 EMR 插件,它将通过 SSH 启动远程操作。因此,您可以留在Ranger服务器上执行命令行。无需在多个主机之间切换。
- 尽管这不是必需的,但我们建议您始终使用 FQDN 作为主机地址。不建议使用没有域名的 IP 和主机名。
2.1 先决条件
2.1.1 专有网络约束
要与 Windows AD 集成,EMR 集群节点需要加入 Windows 域(领域)。对 VPC 施加了一系列约束。在安装之前,请确保 EC2 实例的主机名不超过 15 个字符。这是 Windows AD 的限制;但是,由于 AWS 根据 IPv4 地址分配 DNS 主机名,因此此限制会传播到 VPC。如果VPC的网段可以确保IPv4地址不超过9个字符,则分配的DNS主机名可以限制为15个字符。在限制下,VPC 10.0.0.0/16
的建议 CIDR 设置为 。
尽管我们可以在 EC2 实例可用后更改默认主机名,但当计算机加入 Windows AD 目录时,将使用主机名。这发生在创建 EMR 集群期间。对主机名的后修改不起作用(可能的解决方法是将修改主机名操作放入引导脚本中,但我们还没有尝试过。要更改主机名,请参阅标题为 更改 Amazon Linux 实例的主机名的 AWS 文档。
2.1.2 创建视窗广告服务器
首先,我们需要创建一个带有PowerShell脚本的Windows AD服务器。com/articles/how-to-deploy-laravel-application-on-aws-ec2-the-r“>EC2 实例Windows Server 2019 Base
(2016 也经过测试和支持)。接下来,使用管理员帐户登录,从此处下载 Windows AD 安装脚本文件,并将其保存到桌面。
接下来,按“Win + R”打开运行对话框,复制以下命令行,并将参数值替换为您自己的设置:
Powershell.exe -NoExit -ExecutionPolicy Bypass -File %USERPROFILE%\Desktop\ad.ps1 -DomainName <replace-with-your-domain> -Password <replace-with-your-password> -TrustedRealm <replace-with-your-realm>
具有ad.ps1
预定义的默认参数值。域名为 ,密码为 ,可信领域为 example.com
Admin1234!
COMPUTE.INTERNAL
。作为快速入门,您可以右键单击ad.ps1
该文件并选择Run with PowerShell
执行它。
注意:您无法通过右键单击“使用 PowerShell 运行” us-east-1
来运行 PowerShell 脚本,因为其默认的受信任领域是 EC2.INTERNAL
,因此应通过上述命令行显式设置 。 -TrustedRealm EC2.INTERNAL
执行脚本后,计算机将要求重新启动。这是Windows强制的。我们应该等待计算机重新启动,然后以管理员身份再次登录,以便脚本文件中的后续命令继续执行。请务必重新登录;否则,部分脚本没有机会执行。
登录后,我们可以从“开始”菜单->Windows管理工具->“活动目录用户和计算机”打开“活动目录用户和计算机”,或者从“运行”对话框中输入 dsa.msc
以检查创建的AD。如果一切顺利,我们将得到以下AD目录:
接下来,我们需要检查 DNS 设置。无效的 DNS 设置将导致安装失败。运行脚本时的一个常见错误是“游侠服务器无法解析群集节点的 DNS”。 此问题通常是由不正确的 DNS 转发器设置引起的。我们可以从“开始”菜单->Windows管理工具->DNS中打开“DNS管理器”,也可以从“运行”对话框中输入 dnsmgmt.msc
。接下来,打开“转发器”选项卡。通常,有一条记录,IP地址应为 10.0.0.2
:
10.0.0.2
是 VPC 中网络的默认 10.0.0.0/16
DNS 服务器地址。根据VPC 文档:
Amazon DNS 服务器不驻留在 VPC 的特定子网或可用区内。它位于地址 169.254.169.253(以及 VPC IPv4 网络范围底部的保留 IP 地址加 2)和 fd00:ec2::253。例如,10.0.0.0/16 网络上的 Amazon DNS 服务器位于 10.0.0.2。对于具有多个IPv4网段的VPC,DNS服务器IP地址位于主网段。
转发器的 IP 地址通常来自 VPC 的“DHCP 选项集”的“域名服务器”;其默认值为 AmazonProvidedDNS
它可能发生在在VPC中重新安装Windows AD期间。如果在重新安装之前没有将“域名服务器”恢复到 AmazonProvidedDNS
,转发器的IP始终是以前的Windows AD服务器的地址;它可能不再存在,这就是Ranger服务器或群集节点无法解析DNS的原因。我们可以简单地将转发器 IP 更改为默认值,即 10.0.0.2
在 10.0.0.0/16
网络中。
另一个与 DNS 相关的配置是 IPv4 DNS 设置。通常,其默认设置为正常;将其附在此处作为参考(在 cn-north-1
该地区):
2.1.3 创建 DHCP 选项集并附加到 VPC
加入 Windows 域(领域)要求 VPC 中的节点可以通过网络相互访问并解析彼此的域名。因此,需要在 VPC的“DHCP选项集”中将Windows AD设置为DNS服务器。以下命令行将完成此任务(在已安装 AWS CLI 的 Linux 主机上运行以下脚本):
以下是从 AWS Web 控制台创建的 DHCP 选项的快照:
“域名” cn-north-1.compute.internal
将是长主机名 (FQDN) 的“域名”部分。通常,对于 us-east-1
区域,请指定 ec2.internal
.对于其他区域,请指定 <region>.compute.internal
。
注意: 不要将Windows AD的域名设置为它,即 example.com
。在我们的示例中,它们是两个不同的东西;否则,加入领域将失败。“域名服务器” 10.0.13.40
是Windows AD服务器的私有IP。以下是已附加到此 DHCP 选项集的 VPC 的快照:
2.1.4 将 EC2 实例创建为游侠服务器
接下来,我们需要准备一个 EC2 实例作为 Ranger 服务器
作为最佳实践,建议将 Ranger 服务器添加到安全组中 ElasticMapReduce-master
,因为 Ranger 非常靠近 EMR 集群;它可以被视为非 EMR 内置主服务。对于 Windows AD,我们必须确保可以从 Ranger 和要创建的 EMR 集群的所有节点访问其端口 389。您还可以将 Windows AD 添加到安全组中 ElasticMapReduce-master
。
2.1.5 下载安装程序
EC2 实例准备就绪后,选择 Ranger 服务器,通过 SSH 登录,然后运行以下命令下载安装程序包:
sudo yum -y install git
git clone https://github.com/bluishglc/ranger-emr-cli-installer.git
2.1.6 上传 SSH 密钥文件
如前所述,安装程序基于本地主机(Ranger 服务器)。要在 EMR 集群上执行远程安装操作,需要 SSH 私钥,因此我们应该将其上传到 Ranger 服务器,并记下文件路径;它将是变量 SSH_KEY
的值。
2.1.7 导出特定于环境的变量
在安装过程中,将多次传递以下特定于环境的参数;建议先导出它们,然后所有命令行都将引用这些变量而不是文字。
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 AD_HOST='TO_BE_REPLACED'
以下是上述变量的注释:
REGION
:AWS 区域,i
us-east-1
、、、cn-north-1
等。
ACCESS_KEY_ID
:您的 IAM 账户的 AWS 访问密钥 ID。确保您的帐户具有足够的权限;最好拥有管理员权限。SECRET_ACCESS_KEY
:您的 IAM 账户的 AWS 秘密访问密钥。SSH_KEY
:您刚刚上传的本地主机上的 SSH 私钥文件路径。AD_HOST
:Windows AD 服务器的 FQDN。请根据您的环境仔细替换上述变量的值,并记住使用 FQDN 作为主机名,即 AD_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 AD_HOST='ip-10-0-14-0.cn-north-1.compute.internal'
2.2 多合一安装
2.2.1 快速入门
现在,让我们开始一个多合一安装。执行以下命令行:
SH 安装 \
--区域“$REGION” \
--access-key-id “$ACCESS_KEY_ID” \
--秘密访问密钥 “$SECRET_访问密钥” \
--ssh-key “$SSH_KEY” \
--解决方案“开源” \
--身份验证提供程序“广告” \
--ad-host “$AD_HOST” \
--ad-domain 'example.com' \
--ad-domain-admin 'domain-admin' \
--ad-domain-admin-password 'Admin1234!' \
--ad-base-dn 'cn=users,dc=example,dc=com' \
--ad-user-object-class 'person' \
--ranger-plugins 'open-source-hdfs, open-source-hive'
以上命令行的参数说明请参考附录。我们将重点介绍两个选项: --ad-domain-admin
和 --ad-domain-admin-password
。它们只出现在“Windows AD + 开源游侠”解决方案中,因此我们需要利用这两个选项来完成加入领域操作。
如果一切顺利,命令行将在工作流图中执行步骤 2.1 到 2.3。这可能需要十分钟或更长时间,具体取决于网络的带宽。接下来,它将挂起并指示用户输入 EMR 集群 ID。如果目标集群存在,我们可以立即填写其 ID。如果没有,我们应该切换到 EMR Web 控制台来创建它。接下来,命令行要求用户确认是否允许 Hue 与 LDAP 集成。如果是这样,当集群准备就绪时,安装程序将使用特定于 Hue 的设置更新 EMR 配置(此操作将覆盖 EMR 现有配置)。
填写以上两项,输入“y”确认所有输入。安装过程将恢复,如果目标 EMR 集群尚未准备就绪,命令行将继续监控它,直到它进入“正在等待”状态。以下是命令行此刻的快照:
当群集准备就绪(状态为“正在等待”)时,命令行将继续执行工作流的步骤 2.4 到 2.6,并以“全部完成!!“消息。
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 'ad' \
--ad-host "$AD_HOST" \
--ad-domain 'example.com' \
--ad-domain-admin 'domain-admin' \
--ad-domain-admin-password 'Admin1234!' \
--ad-base-dn 'cn=users,dc=example,dc=com' \
--ad-user-object-class 'person' \
--ranger-plugins 'open-source-hdfs,open-source-hive' \
--java-home '/usr/lib/jvm/java' \
--skip-install-mysql 'false' \
--skip-install-solr '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!' \
--restart-interval 30
全参数版本为我们提供了所有自定义选项的完整视角
--skip-xxx-xxx
选项并将其设置为 true
。--xxx-bind-dn
和 --xxx-bind-password
选项来设置它们。 注意: 安装 Windows AD 时将自动创建 Hue、Ranger 和域管理员的绑定 DN,但它们使用以下命名模式 cn=hue|ranger|domain-admin,ou=services,<your-base-dn>
进行修复,而不是给定值“--xxx-bind-dn”选项,因此如果您使用“--xxx-bind-dn”选项分配另一个 DN,则必须提前自行创建此 DN。此安装不会创建由“--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 安装游侠
此步骤将安装Ranger的所有服务器端组件,包括MySQL,Solr,Ranger Admin和Ranger UserSync。
sudo sh ./ranger-emr-cli-installer/bin/setup.sh install-ranger \
--region "$REGION" \
--solution 'open-source' \
--auth-provider 'ad' \
--ad-domain 'example.com' \
--ad-host "$AD_HOST" \
--ad-base-dn 'cn=users,dc=example,dc=com' \
--ad-user-object-class 'person' \
--ranger-bind-dn 'cn=ranger,ou=services,dc=example,dc=com' \
--ranger-bind-password 'Admin1234!'
2.3.3 创建 EMR 集群
对于分步安装,没有用于创建 EMR 集群的交互式过程,因此请随时在 EMR Web 控制台上创建集群。我们必须等到集群完全准备就绪(处于“等待”状态),然后导出以下特定于环境的变量:
export EMR_CLUSTER_ID='TO_BE_REPLACED'
以下是该示例的副本:
export EMR_CLUSTER_ID='j-2S04VJZ5YQHZ4'
2.3.4 安装游侠插件
此步骤将在 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 'ad' \
--ranger-plugins 'open-source-hdfs,open-source-hive' \
--emr-cluster-id "$EMR_CLUSTER_ID"
2.3.5 安装 SSSD
此步骤将在 EMR 集群的每个节点上安装和配置 SSSD。我们不需要登录每个节点。留在本地主机中运行命令行;它将通过 SSH 在远程节点上执行。
sudo ./ranger-emr-cli-installer/bin/setup.sh install-sssd \
--ssh-key "$SSH_KEY" \
--solution 'open-source' \
--auth-provider 'ad' \
--ad-host "$AD_HOST" \
--ad-domain 'example.com' \
--ad-domain-admin 'domain-admin' \
--ad-domain-admin-password 'Admin1234!' \
--emr-cluster-id "$EMR_CLUSTER_ID"
2.3.6 配置色相
此步骤将更新 EMR 的 Hue 配置,如一体式安装中突出显示的那样。如果您有其他自定义的 EMR 配置,请跳过此步骤,但您仍可以通过命令行手动将生成的 Hue 配置的 JSON 文件合并到您自己的 JSON 中。
3. 验证
安装和集成完成后,是时候看看Ranger是否有效了。验证工作分为两部分,分别针对HDFS和Hive。首先,让我们通过客户端登录Windows AD,即LDAPAdmin或Apache Directory Studio。接下来,查看所有 DN;它应如下所示:
接下来,打开游侠 Web 控制台。地址为:,默认管理员帐户/密码为:http://<YOUR-RANGER-HOST>:6080
admin/admin
。登录后,我们应该先打开“用户/组/角色”页面。查看 Windows AD 上的示例用户是否已同步到 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://dz2cdn1.dzone.com/storage/temp/16537985-ranger-1.jpg“ data-type=”temp“ data-url=”https://dz2cdn1.dzone.com/storage/temp/16537985-ranger-1.jpg“ src=”http://www.cheeli.com.cn/wp-content/uploads/2022/12/16537985-ranger-1.jpg“ style=”width: 900px;”/>
我们不为 配置 example-user-1
任何 HDFS 权限,但是如果我们使用 example-user-1
帐户登录 Hue ,您将看到它可以浏览 HDFS 上的大多数目录和文件。这是因为大多数目录和文件都有 a+w
权限。请记住,HDFS r/w/x
文件模式属性和基于游侠的权限始终同时生效。
为了验证 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 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
一旦本地策略文件是最新的,拒绝策略就会生效。接下来,使用安装程序创建的Windows AD帐户“example-user-1”登录Hue,打开“文件浏览器”,单击根目录“/”,然后单击“ranger-test”文件夹。我们将收到一条错误消息:“无法访问:/ranger-test:”
即使当前用户示例用户 1 是此文件夹的所有者;它仍然被游侠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
操作将生效。接下来,使用安装程序创建的 Windows AD 帐户“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 策略,如下所示:
它授予 example-user-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. 附录
以下是参数规范:
参数
|
评论
|
---|---|
--地区
|
AWS 区域
|
' 根据您的环境进行更改。
' 这应该是 Windows AD/OpenLDAP 上的现有 DN。根据您的环境进行更改。
'