在本文中,我们将介绍针对“场景 2:Windows AD + EMR 本机游侠”的解决方案。 就像上 一篇文章一样,我们将介绍解决方案体系结构,给出详细的安装步骤说明,并验证已安装的环境。

1. 解决方案概述

1.1 解决方案架构

Solution Architecture

在此解决方案中,Windows AD 扮演身份验证提供程序,所有用户帐户数据存储在其上,Ranger扮演授权控制器。因为我们选择了高度依赖 Kerberos 的 EMR 原生 Ranger 解决方案,所以需要 Kerberos KDC。在此解决方案中,我们建议选择由 EMR 创建的集群专用 KDC,而不是外部 KDC;这可以帮助我们节省安装 Kerberos 的工作。如果您有现有的 KDC,此解决方案也支持它。

要统一用户帐户数据,必须集成 Windows AD 和 Kerberos。最好的集成是单向跨领域信任(Windows AD 领域信任 Kerberos KDC 领域);这也是 EMR 的内置功能。对于Ranger,它将同步来自Windows AD的帐户数据,以授予针对Windows AD中的用户帐户的权限。同时,EMR 集群需要安装一系列 Ranger 插件。这些插件将与 Ranger 服务器进行检查,以确保当前用户有权执行操作。EMR 集群还将通过 SSSD 从 Windows AD 同步帐户数据,以便用户可以登录 EMR 集群的节点并提交作业。

1.2 身份验证详解

让我们深入了解身份验证部分。通常,我们将完成以下工作。有些是由安装程序完成的,有些是 EMR 内置功能,无需手动操作。

Authentication in Detail安装视窗广告。

  • 在 EMR 集群的所有节点上安装 SSSD(如果启用跨领域信任,则无需手动操作)。
  • 启用跨领域信任(安装 Windows AD 时,某些作业将由文件完成 as.ps1 。如果启用了跨领域信任,则在创建 EMR 集群时将完成其他作业)。
  • 配置 SSH,并允许用户使用 Windows AD 帐户登录(如果启用跨领域信任,则无需手动操作)。
  • 配置 SSH,并允许用户通过 GSSAPI 使用 Kerberos 帐户登录(如果启用跨领域信任,则无需手动操作)。
  • 1.3 授权详解

    对于授权,游侠绝对是主角。如果我们深入研究它,它的架构如下所示:

    Authorization in Detail

    安装程序将完成以下作业:

    1. MySQL 安装 为 Ranger 的策略数据库。
    2. 安装 Solr 作为 Ranger 的审核存储。
    3. 安装游侠管理员。
    4. 安装 Ranger UserSync。
    5. 安装 EMRFS(S3) Ranger 插件。
    6. 安装 Spark Ranger 插件。
    7. 安装 Hive Ranger 插件

    2. 安装和集成

    通常,安装和集成过程可以分为三个阶段: 

    1. 先决条件
    2. 多合一安装
    3. 创建 EMR 集群

    下图详细说明了进度:

    Progress in Detail

    在第一阶段,我们需要做一些准备工作。在第 2 阶段,我们将开始安装和集成。此阶段有两个选项:一个是由基于命令行的工作流驱动的一体化安装。另一个是分步安装。在大多数情况下,多合一安装始终是最佳选择;但是,您的安装工作流程可能会因不可预见的错误而中断。如果要从上一个失败的步骤继续安装,请尝试分步安装。或者有时,您想重新尝试具有不同参数值的步骤以找到正确的步骤,逐步也是更好的选择。在第 3 阶段,我们需要使用第 2 阶段的输出工件自行创建一个 EMR 集群,即 IAM 角色和 EMR 安全配置。

    作为设计原则,安装程序不包括创建 EMR 集群的任何操作。您应该始终自己创建 集群 ,因为 EMR 集群可能具有任何不可预测的复杂设置,即特定于应用程序的(HDFS、Yarn 等)配置、步骤脚本、引导脚本等;不建议将 Ranger 的安装与 EMR 集群的创建相结合。

    但是,阶段 2 和阶段 3 之间的执行顺序略有重叠。基于 EMR 原生游侠创建 EMR 集群时,需要提供安全配置和游侠特定的 IAM 角色的副本。它们必须在创建 EMR 集群之前可用,并且在创建集群时,它还需要与 Ranger 服务器交互(服务器地址在安全配置中分配) 为了解决这种循环依赖关系,安装程序将输出一些依赖于群集的项目。接下来,它将指示用户使用这些项目创建自己的群集。同时,安装进度将挂起,并继续监视目标群集的状态。准备就绪后,安装进度将恢复并继续执行 REST 操作。

    注释

    1. 安装程序会将本地主机视为 Ranger 服务器,以在 Ranger 上安装所有内容。对于非游侠操作,它将通过 SSH 启动远程操作。因此,您可以留在Ranger服务器上执行命令行。无需在多个主机之间切换。
    2. 为了 Kerberos,所有主机地址都必须使用 FQDN。不接受没有域名的 IP 和主机名。

    2.1 先决条件

    2.1.1 专有网络约束

    为了实现跨领域信任,需要对 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 实例的主机名的 Amazon 文档。

    有关其他注意事项,请参阅 EMR 官方文档,标题为: 教程:使用 Active Directory 域配置跨领域信任。

    2.1.2 创建视窗广告服务器

    在本节中,我们将创建一个带有PowerShell脚本的Windows AD服务器。首先,使用映像创建一个 Windows Server 2019 Base EC2 实例(还测试和支持 2016)。接下来,使用管理员帐户登录,从这里 下载Windows AD安装脚本文件接下来,按“Win + R”打开运行对话框,复制以下命令行,并将参数值替换为您自己的设置:

    PowerShell

     

    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预定义的默认参数值:域名为 ,密码为 ,可信领域为 Admin1234!example.comCOMPUTE.INTERNAL。作为快速入门,您可以右键单击ad.ps1该文件并选择Run with PowerShell执行它。(注意:您无法通过右键单击“使用 PowerShell 运行”us-east-1 来运行 PowerShell 脚本,因为它的默认受信任领域是 EC2.INTERNAL,因此您应该通过上述命令行显式设置-TrustedRealm EC2.INTERNAL)。

    执行脚本后,计算机将要求重新启动,这是Windows强制的。我们应该等待计算机重新启动,然后以管理员身份重新登录,以便脚本文件中的后续命令继续执行。请务必重新登录;否则,部分脚本没有机会执行。

    再次登录后,我们可以从“开始”菜单->Windows管理工具->“活动目录用户和计算机”中打开“Active Directory用户和计算机”,或者从“运行”对话框中输入 dsa.msc 以查看创建的AD。如果一切顺利,我们将得到以下AD目录:

    AD Directory

    AD Directory 2

    接下来,我们需要检查DNS设置,无效的DNS设置将导致安装失败。运行脚本时的一个常见错误是“游侠服务器无法解析群集节点的 DNS”。 此问题通常是由不正确的 DNS 转发器设置引起的。我们可以从“开始”菜单->Windows管理工具->DNS打开DNS管理器,或者从“运行”对话框中输入 dnsmgmt.msc ,然后打开“转发器”选项卡。 通常,有一条记录的 IP 地址应该是 10.0.0.2

    IP Address

    10.0.0.2VPC 中网络的默认 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.210.0.0.0/16 网络中。

    另一个与 DNS 相关的配置是 IPv4 DNS 设置。通常,它的默认设置是可以的,只需附加它,如下所述(在 cn-north-1 区域中):

    IPV4 DNS Setting

    2.1.3 创建 DHCP 选项集并附加到 VPC

    跨领域信任要求 KDC 可以通过网络相互联系并解析彼此的域名。因此,用户需要在 VPC 的“DHCP 选项集”中将 Windows AD 设置为 DNS 服务器。以下命令行将完成此作业(安装了 AWS CLI 的 Linux 主机上运行以下 脚本)。

     

    以下是从 AWS Web 控制台创建的 DHCP 选项的快照:

    DHCP Options

    “域名:” 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的快照:

    DHCP Options 2

    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:AD 服务器的 FQDN。
  • VPC_ID:专有网络的 ID。
  • 请根据您的环境仔细替换上述变量的值,并记住使用 FQDN 作为主机名。以下是该示例的副本:

     

    export REGION='cn-north-1'
    export ACCESS_KEY_ID='<change-to-your-access-key-id>'
    export SECRET_ACCESS_KEY='<change-to-your-secret-access-key>'
    export SSH_KEY='/home/ec2-user/key.pem'
    export AD_HOST='example.com'

    2.2 多合一安装

    2.2.1 快速入门

    现在,让我们开始一个多合一安装。执行以下命令行:

     

    sudo sh ./ranger-emr-cli-installer/bin/setup

    com’ \
    –ad-base-dn ‘cn=users,dc=example,dc=com’ \
    –ad-user-object-class ‘person’ \
    –启用跨领域信任 ‘true’ \
    –信任领域 ‘EXAMPLE.COM’ \
    –信任域“example.com” \
    –信任主机“example.com” \
        –ranger-plugins ’emr-native-emrfs,emr-native-spark,emr-native-hive’

    以上命令行的参数说明请参考附录。如果一切顺利,命令行将执行工作流图中的步骤 2.1 到 2.6。这可能需要十分钟或更长时间,具体取决于您的网络带宽。接下来,它将挂起并指示用户使用以下两个工件创建 EMR 集群:

    1. 名为 EMR_EC2_RangerRole的 EC2 实例配置文件。
    2. 名为 Ranger@<YOUR—RANGER—HOST—FQDN>的 EMR 安全配置 。

    它们由命令行在步骤 2.2 和 2.4 中创建。创建集群时,您可以在 EMR Web 控制台中找到它们。以下是此刻命令行的快照:

    Command Line Snapshot

    接下来,我们应该切换到 EMR Web 控制台以创建集群。请务必选择命令行控制台中提示的 EC2 实例配置文件和安全配置。至于 Kerberos 和跨领域信任,请填写并记下以下项目:

    • 境界:科贝罗斯的境界。 注意: 对于区域 us-east-1,默认领域为 EC2.INTERNAL。对于其他区域,默认领域为 COMPUTE.INTERNAL。您可以分配另一个领域名称,但请确保输入的领域名称和作为参数传递给的 ad.ps1 受信任领域名称是相同的值。
    • KDC 管理员密码:kadmin 的密码。
    • Active Directory 域加入用户:这是一个具有足够权限的 AD 帐户,可以将群集节点添加到 Windows 域中。这是启用跨领域信任的必要操作

    如果 Windows AD 是由 安装的,则会自动创建一个名为的ad.ps1domain-admin帐户,因此我们在此处填写“域管理员”。您也可以分配其他帐户,但请确保该帐户存在且具有足够的权限。

  • Active Directory 域加入密码:“Active Directory 域加入用户”的密码。
  • 以下是目前 EMR Web 控制台的快照:

    EMR Web Console Snapshot

    EMR 集群开始创建后,集群 ID 将是确定的。我们需要复制 id 并返回命令行终端。在 CLI 提示符“是否已创建集群?[y/n]:“(您不需要疣即可使群集完全准备就绪)。接下来,命令行将要求您执行两项操作:

    1. 输入群集 ID。
    2. 确认 Hue 已与 LDAP 集成。如果已集成,则在集群准备就绪后,安装程序将使用特定于 Hue 的设置更新 EMR 配置。请注意,此操作将覆盖 EMR 现有配置。

    最后,输入“y”以确认所有输入。安装过程将恢复,如果分配的 EMR 集群尚未准备就绪,命令行将继续监控它,直到它进入“正在等待”状态。以下是命令行此刻的快照:

    Command Line Snapshot 2当群集准备就绪(状态为“正在等待”)时,命令行将继续执行工作流的步骤 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 'emr-native' \
        --auth-provider 'ad' \
        --ad-host "$AD_HOST" \
        --ad-domain 'example.com' \
        --ad-base-dn 'cn=users,dc=example,dc=com' \
        --ad-user-object-class 'person' \
        --enable-cross-realm-trust 'true' \
        --trusting-realm 'EXAMPLE.COM' \
        --trusting-domain 'example.com' \
        --trusting-host 'example

    1.0′ \
    –mysql-host $(hostname -f) \
    –mysql-root-password ‘Admin1234!’ \
    –mysql-ranger-db-user-password ‘Admin1234!’ \
    –solr-host $(主机名 -f) \
    –ranger-bind-dn ‘cn=ranger,ou=services,dc=example,dc=com’ \
    –游侠绑定密码 ‘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!’ \
        –重启间隔 30

    全参数版本为我们提供了所有自定义选项的完整视角。在以下情况下,您可以更改某些选项的值 :

    1. 如果要更改默认组织名称 dc=example,dc=com或默认密码 Admin1234!,请运行全参数版本并将其替换为您自己的值。
    2. 如果您需要与外部工具集成,即现有的MySQL或Solr,请添加相应的 --skip-xxx-xxx 选项并将其设置为 true
    3. 如果您有另一个预定义的 Hue、Ranger 和 SSSD 绑定 DN,请添加相应的 --xxx-bind-dn--xxx-bind-password 选项来设置它们。 注意: 安装 Windows AD 时将自动创建 Hue、Ranger 和 SSSD 的绑定 DN,但它们使用以下命名模式进行修复: cn=hue|ranger|sssd,ou=services,<your-base-dn>,而不是“–xxx-bind-dn”选项的给定值,因此如果使用“–xxx-bind-dn”选项分配另一个 DN,则必须提前自行创建此 DN。此安装不会创建由“–xxx-bind-dn”选项分配的 DN 的原因是 DN 是树路径。要创建它,我们必须在路径中创建所有节点,实现如此小而复杂的功能并不划算。
    4. 一体化安装将更新 Hue 的 EMR 配置,以便用户可以使用 Windows AD 帐户登录 Hue。如果您有其他自定义的 EMR 配置,请在命令行中附加 --skip-configure-hue 'true' 以跳过更新配置。接下来,手动将 Hue 配置附加到您的 JSON 中;否则,您的预定义配置将被覆盖。

    2.3 分步安装

    作为替代方法,您也可以选择分步安装,而不是一体式安装。我们为每个步骤提供命令行。有关每个参数的注释,请参阅附录。

    2.3

    例如,安装 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 创建 IAM 角色

    此步骤将创建 EMR 所需的三个 IAM 角色。

     

    sudo sh ./ranger-emr-cli-installer/bin/setup.sh create-iam-roles \
        --region "$REGION"

    2.3.3 创建游侠秘密

    此步骤将为 Ranger 创建与 SSL/TLS 相关的密钥、证书和密钥库,因为 EMR 本机 Ranger 需要与服务器的 SSL/TLS 连接。这些构件将上传到 AWS 密钥管理器,并由 EMR 安全配置引用。

     

    sudo sh ./ranger-emr-cli-installer/bin/setup.sh create-ranger-secrets \
        --region "$REGION"

    2.3.4 创建 EMR 安全配置

    此步骤将创建 EMR 安全配置的副本。该配置包括与 Kerberos 和 Ranger 相关的信息。创建集群时,EMR 将读取它们并获取相应的资源,即机密,并与在安全配置中分配地址的 Ranger 服务器进行交互/ranger-emr-cli-installer/bin/setup.sh create-emr-security-configuration \
    –区域“$REGION” \
    –解决方案 ‘EMR 原生’ \
    –身份验证提供程序“广告” \
    –信任领域 ‘EXAMPLE.COM’ \
    –信任域“example.com” \
        –trusting-host ‘example.com’“ data-lang=”text/x-sh“>

    sudo sh ./ranger-emr-cli-installer/bin/setup.sh create-emr-security-configuration \
        --region "$REGION" \
        --solution 'emr-native' \
        --auth-provider 'ad' \
        --trusting-realm 'EXAMPLE.COM' \
        --trusting-domain 'example.com' \
        --trusting-host 'example.com'

    2.3.5 安装游侠

    此步骤将安装Ranger的所有服务器端组件,包括MySQL,Solr,Ranger Admin和Ranger UserSync。

     

    sudo sh ./ranger-emr-cli-installer/bin/setup.sh install-ranger \
        --region "$REGION" \
        --solution 'emr-native' \
        --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.6 安装游侠插件

    此步骤将从Ranger服务器端安装EMRFS,Spark和Hive插件。还有另一半工作安装这些插件(实际上它们是 EMR 秘密代理、EMR 记录服务器等)。在代理方面;但是,EMR 将在创建集群时自动完成此操作。

     

    sh 安装游侠插件 \
    --区域“$REGION” \
    --解决方案 'EMR 原生' \
    --身份验证提供程序“广告” \
        --ranger-plugins 'emr-native-emrfs,emr-native-spark,emr-native-hive'

    2.3.7 创建 EMR 集群

    对于分步安装,没有用于创建 EMR 集群的交互式过程,因此请随意在 EMR Web 控制台上创建集群。但是,我们必须等到集群完全就绪(处于“等待”状态),然后导出 EMR 集群 ID:

     

    export EMR_CLUSTER_ID='TO_BE_REPLACED'

    以下是该示例的副本:

     

    export EMR_CLUSTER_ID='	j-1UU8LVVVCBZY0'

    2.3.8 更新色调配置

    此步骤将更新 EMR 的 Hue 配置。如一体式安装中突出显示的那样,如果您有其他自定义的 EMR 配置,请跳过此步骤,但您仍可以通过命令行手动将生成的 Hue 配置的 JSON 文件合并到您自己的 JSON 中。

     

    sudo sh ./ranger-emr-cli-installer/bin/setup.sh update-hue-configuration \
        --region "$REGION" \
        --auth-provider 'ad' \
        --ad-host "$AD_HOST" \
        --ad-domain 'example

    验证

    安装和集成完成后,是时候看看Ranger是否有效了。验证作业分为三个部分,分别针对Hive,EMRFS (S3)和Spark。

    首先,我们打开 Ranger Web 控制台,地址是:,默认管理员帐户/密码是:https://<YOUR-RANGER-HOST>:6182admin/admin。登录后,我们应该打开“用户/组/角色”页面,查看Windows AD上的示例用户是否同步到Ranger,如下所示:

    Synchronized Ranger

    3.1 配置单元访问控制验证

    通常,安装后 Hive 插件有一组预定义的策略。为了消除干扰,请保持验证简单。让我们先删除它们:

    Eliminate Interference

    Ranger Web 控制台上的任何策略更改都将在 30 秒内同步到代理端(EMR 集群节点)。我们可以在主节点上运行以下命令,查看本地策略文件是否已更新:

     

    本地策略文件保持最新后,该 removing-all-policies 操作将生效。接下来,使用安装程序创建的 Windows AD 帐户“example-user-1”登录 Hue,打开 Hive 编辑器,输入以下 SQL(请记住将“ranger-test”替换为您自己的存储桶)以创建测试表(将“ranger-test”更改为您自己的存储桶名称):

    .SQL

     

    -- run in hue hive editor
    create table ranger_test (
      id bigint
    )
    row format delimited
    stored as textfile location 's3://ranger-test/';

    接下来,运行它并发生错误:

    Run Test

    它显示示例用户 1 被数据库相关权限阻止。这证明 Hive 插件正在工作。让我们返回到 Ranger 并添加一个名为“all - 数据库、表、列”的 Hive 策略,如下所示:

    Hive Policy

    它授予示例用户 1 对所有数据库、表和列的所有权限 更新后,返回 Hue,重新运行该 SQL,此时我们将收到另一个错误:

    Rerun SQL

    如图所示,SQL 在读取“s3://ranger-test”时被阻止。 实际上,example-user-1 没有访问任何 URL 的权限,包括“s3://”。 我们需要向此用户授予与 url 相关的权限,因此请再次返回到 Ranger 并添加名为“all - url”的 Hive 策略,如下所示:

    All URL

    它授予示例用户 1 对任何 URL 的所有权限,包括“s3://”。 接下来,再次检查策略文件,切换到 Hue,然后第三次运行该 SQL;它将按以下方式进行:

    Run SQL 3

    最后,为了准备下一次 EMRFS/Spark 验证,我们需要在表中插入一些示例数据,并仔细检查示例用户 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;

    执行结果为:

    Execution Result到目前为止,Hive 访问控制验证已通过。

    3.2 EMRFS (S3) 访问控制验证

    使用帐户“example-user-1”登录Hue,打开Scala编辑器,然后输入以下Spark代码:

    斯卡拉

     

    # run in scala editor of hue
    spark.read.csv("s3://ranger-test/").show;

    这行代码尝试读取 S3 上的文件,但它会遇到以下错误:

    Following Errors

    它显示示例用户 1 对 S3 存储桶“游侠测试”没有权限。 这证明 EMRFS 插件正在工作。它成功阻止了未经授权的 S3 访问。让我们登录 Ranger 并添加一个名为“all - ranger-test”的 EMRFS 策略,如下所示:

    EMRFS Policy

    它将授予示例用户 1 对“ranger-test”存储桶的所有权限.10};做
    printf “\n%100s\n\n”|tr ' ' '='
    sudo stat /emr/secretagent/ranger_policy_cache/emrS3RangerPlugin_emrfs.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 /emr/secretagent/ranger_policy_cache/emrS3RangerPlugin_emrfs.json
        sleep 3
    done

    更新后,返回 Hue,重新运行以前的 Spark 代码,它将成功如下:

    Successful Run

    到目前为止,EMRFS 访问控制验证已通过。

    3.3 火花访问控制验证

    使用帐户“example-user-1”登录Hue,打开Scala编辑器,然后输入以下Spark代码:

    斯卡拉

     

    # run in scala editor of hue
    spark.sql("select * from ranger_test").show

    这行代码尝试通过 Spark SQL 运行 ranger_test 表,但它会遇到以下错误:

    Errors 2

    它显示当前用户对默认数据库没有权限

    让我们登录 Ranger 并添加一个名为“all - 数据库、表、列”的 Spark 策略,如下所示:

    Spark Policy

    它将授予示例用户 1 对所有数据库/表/列的所有权限。与检查 Hive 策略文件类似,我们也可以运行以下命令来查看 Spark 策略文件是否已更新:

     

    # run on master node of emr cluster
    for i in {1..10}; do
        printf "\n%100s\n\n"|tr ' ' '='
        sudo stat /etc/emr-record-server/ranger_policy_cache/emrSparkRangerPlugin_spark.json 
        sleep 3
    done

    更新后,返回 Hue,重新运行以前的 Spark 代码,它将成功如下:

    Rerun Spark Codes

    到目前为止,Spark访问控制验证已通过。

    4. 附录

    以下是参数规范:

    参数 注释
    --地区
    AWS 区域
    --秘密访问密钥
    您的 IAM 账户的 AWS 秘密访问密钥。
    --安全密钥
    SSH 私钥文件路径。
    --溶液
    解决方案名称,接受的值“开源”或“EMR 本机”。 
    --身份验证提供程序
    身份验证提供程序接受值“AD”或“OpenLDAP”。
    --openldap-host
    OpenLDAP 主机的 FQDN。
    --openldap-base-dn
    OpenLDAP的基本DN,例如:“dc=example,dc=com”,根据您的环境进行更改。
    --openldap-root-cn
    根帐户的 cn,例如:“管理员”,根据您的环境进行更改。
    --openldap-root-password
    root 帐户的密码,例如:“Admin1234!”,根据您的环境进行更改

    ' 这应该是 Windows AD/OpenLDAP 上的现有 DN。根据您的环境进行更改。

    --游侠绑定密码
    Ranger Bind DN的密码,例如:“Admin1234!”,根据您的环境进行更改。
    --openldap-user-dn-pattern
    Ranger在OpenLDAP上搜索用户的DN模式,例如:“uid={0},ou=users,dc=example,dc=com”,根据您的环境进行更改。
    --openldap-group-search-filter
    Ranger在OpenLDAP上搜索组的过滤器,例如:“(member=uid={0},ou=users,dc=example,dc=com”,根据您的环境进行更改。
    --openldap-user-object-class
    Ranger搜索用户的用户对象类,例如:“inetOrgPerson”,根据您的环境进行更改。
    --hue-bind-dn
    Hue 的绑定 DN,例如:“cn=hue,ou=services,dc=example,dc=com”。 这应该是 Windows AD/OpenLDAP 上的现有 DN。根据您的环境进行更改。
    --色调绑定密码
    Hue Bind DN 的密码,例如:“Admin1234!”,根据您的环境进行更改

    此参数是可选的,如果省略,则不会创建示例用户。

    --游侠绑定-DN
    Ranger的绑定DN,例如:“cn=ranger,ou=services,dc=example,dc=com”。 这应该是Windows AD/OpenLDAP上的现有DN。根据您的环境进行更改。
    --游侠绑定密码
    绑定 DN 的密码,例如:“ Admin1234!' 根据您的环境进行更改。
    --hue-bind-dn
    Hue 的绑定 DN,例如:“cn=hue,ou=services,dc=example,dc=com”。 这应该是 Windows AD/OpenLDAP 上的现有 DN。根据您的环境进行更改。
    --色调绑定密码
    Hue Bind DN 的密码,例如:“Admin1234!”,根据您的环境进行更改。
    --sssd-bind-dn
    SSSD 的绑定 DN,例如:“cn=sssd,ou=services,dc=example,dc=com”,这应该是 Windows AD/OpenLDAP 上的现有 DN。根据您的环境进行更改。
    --sssd-bind-password
    SSSD 绑定 DN 的密码,例如:“Admin1234!' 根据您的环境更改它

    例如:“emr-native-emrfs, emr-native-spark, emr-native-hive”,根据您的环境进行更改。

    --skip-configure-hue
    跳到配置 Hue,接受的值“真”或“假”。默认值为“假”。
    --skip-migrate-kerberos-db
    跳过以迁移 Kerberos 数据库,接受值“true”或“false”。默认值为“false”。
    Comments are closed.