在本系列的第 一篇文章 中,我们全面了解了 EMR 和 Ranger 集成解决方案。从现在开始,我们将开始逐一介绍具体的解决方案。本文反对“场景 1:OpenLDAP + EMR-Native Ranger”。 我们将介绍解决方案的体系结构,给出详细的安装步骤说明,并验证安装的环境。

1. 解决方案概述 

1.1 架构

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

为了统一用户帐户数据,OpenLDAP 和 Kerberos 必须集成在一起。有一系列工作要做,即启用 SASL/GSSAPI、映射两个系统帐户、启用直通身份验证等。对于Ranger,它将同步来自OpenLDAP的帐户数据,以授予来自OpenLDAP的用户帐户的权限,同时,EMR集群需要安装一系列Ranger插件。这些插件将与 Ranger 服务器进行检查,以确保当前用户有权执行操作。EMR 集群还将通过 SSSD 从 OpenLDAP 同步账户数据,以便用户可以登录 EMR 集群的节点并提交作业。

1.2 身份验证详解

让我们深入了解身份验证部分。OpenLDAP 和 Kerberos 是两种相互独立的身份验证机制。如何集成它们是身份验证的主题。还有另一系列文章专门讨论这个主题,这个安装程序完全遵循了这个系列的所有操作:

  • “基于 OpenLDAP 和 Kerberos 的身份验证解决方案 (1):集成后端数据库”
  • “基于 OpenLDAP 和 Kerberos 的身份验证解决方案 (2):同步 SSSD”
  • “基于 OpenLDAP 和 Kerberos 的身份验证解决方案 (3):与 SASL/GSSAPI 深度集成”

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

Administrator-User安装 OpenLDAP。

  • 在 EMR 集群的所有节点上安装 SSSD。
  • 将 Kerberos 后端数据库迁移到 OpenLDAP,并将两个系统的帐户数据保存到单个记录中。
  • 安装和配置 SASL/GSSAPI 以使 Kerberos 帐户能够登录到 OpenLDAP。
  • 配置 OpenLDAP 以将 Kerberos 帐户映射到 OpenLDAP 帐户。
  • 启用 saslauthd,统一打开 LDAP 和 Kerberos 帐户密码。
  • 配置 SSH 并允许用户使用 OpenLDAP 帐户登录。
  • 配置 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 插件。
    8. 安装 Trino Ranger 插件(在撰写本文时尚不可用)

    安装和集成

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

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

    下图详细说明了进度:

    Progress in Detail Diagram在第一阶段,我们需要做一些准备工作。在第 2 阶段,我们开始安装和集成。在此阶段有两个选项:一个是由基于命令行的工作流驱动的一体化安装。另一个是分步安装。

    在大多数情况下,多合一安装始终是最佳选择;但是,您的安装工作流程可能会因不可预见的错误而中断。如果要从上一个失败的步骤继续安装,请尝试分步安装。您可能希望使用不同的参数值重试步骤以找到正确的步骤,分步也是更好的选择。在第 3 阶段,我们需要使用第 2 阶段的输出构件(即 IAM 角色和 EMR 安全配置)自行创建一个 EMR 集群。

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

    但是,阶段 2 和阶段 3 之间的执行顺序存在一些重叠。基于 EMR 原生游侠创建 EMR 集群时,需要提供安全配置和游侠特定的 IAM 角色的副本。它们必须在创建 EMR 集群之前可用,此外,在创建集群时,它还需要与 Ranger 服务器交互(服务器地址在安全配置中分配)。另一方面,一体化安装中的某些操作需要在群集或 KDC 的所有节点上执行。这需要准备好 EMR 集群。为了解决这种循环依赖关系,安装程序将首先根据 EMR 集群输出一些工件。接下来,指示用户使用这些项目创建自己的集群;同时,安装进度将处于挂起状态,并持续监控目标集群的状态

    笔记:

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

    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.1.3 上传 SSH 密钥文件

    如前所述,安装程序基于本地主机(Ranger 服务器)。要在 OpenLDAP 或 EMR 集群上执行远程安装操作,需要 SSH 私钥,因此我们应该将其上传到 Ranger 服务器并记下文件路径;它将是变量 SSH_KEY的值。

    2.1.4 导出特定于环境的变量

    在安装过程中,以下特定于环境的参数将被多次传递,建议先导出它们,然后所有命令行都只引用这些变量而不是文字例如,cn-north-1、us-east-1 等。

  • ACCESS_KEY_ID:您的 IAM 账户的 AWS 访问密钥 ID。确保您的帐户具有足够的权限,最好拥有管理员权限。
  • SECRET_ACCESS_KEY:您的 IAM 账户的 AWS 秘密访问密钥。
  • SSH_KEY:您刚刚上传的本地主机上的 SSH 私钥文件路径。
  • OPENLDAP_HOST:OpenLDAP 服务器的 FQDN。
  • 请根据您的环境仔细替换上述变量的值,并记住使用 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 快速入门

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

     

    SH 安装 \
    --区域“$REGION” \
    --access-key-id “$ACCESS_KEY_ID” \
    --秘密访问密钥 “$SECRET_访问密钥” \
    --ssh-key “$SSH_KEY” \
    --解决方案 'EMR 原生' \
    --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' \
    --示例用户 '示例用户-1,示例用户-2' \
        --ranger-plugins 'emr-native-emrfs,emr-native-spark,emr-native-hive'

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

    1. 名为 EC2 实例配置文件 EMR_EC2_RangerRole.
    2. 名为 Ranger@<YOUR-RANGER-HOST-FQDN>.

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

    Create EMR Cluster

    接下来,我们应该切换到 EMR Web 控制台以创建集群。请务必选择命令行控制台中提示的 EC2 实例配置文件和安全配置。对于 Kerberos KDC,请同时填写并记下“领域”和“KDC 管理员密码”。 它们将很快在命令行中使用。以下是目前 EMR Web 控制台的快照:

    Permissions集群 ID:从 Web 控制台上的摘要选项卡中获取。

  • Kerberos 领域:由您在“身份验证和加密”部分中输入。请参阅上面的快照。请注意,对于 区域 us-east-1,默认领域为 ;对于其他区域,默认领域为 EC2.INTERNAL COMPUTE.INTERNAL.
  • Kerberos KDC 管理员密码:由您在“身份验证和加密”部分中输入,请参阅上面的快照。
  • Kerberos KDC 主机:从 Web 控制台上的硬件选项卡获取,通常是主节点。
  • 确认它是否允许 Hue 与 LDAP 集成。如果是,则在集群准备就绪后,安装程序将使用特定于 Hue 的设置更新 EMR 配置。请注意,因为此操作将覆盖 EMR 现有配置。
  • 现在,我们需要返回命令行终端并为 CLI 提示符输入“y”。“你创建了集群吗?[y/n]:“(集群完全准备就绪不需要疣),那么命令行会要求你逐个输入以上四个信息项,因为它们是下一阶段安装所必需的,然后再次输入”y“进行确认。安装过程将恢复,如果分配的 EMR 集群尚未准备就绪,命令行将继续监控,直到进入“正在等待”状态,以下是命令行此刻的快照:

    Command Line Snapshot当群集准备就绪(状态为“正在等待”)时,命令行将继续从步骤 2 开始执行工作流的 13,最后以“全部完成”消息结束。

    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 '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 'emr-native-emrfs,emr-native-spark,emr-native-hive' \
        --java-home '/usr/lib/jvm/java' \
        --skip-install-mysql 'false' \
        --skip-migrate-kerberos-db 'false' \
        --skip-install-solr 'false' \
        --skip-install-openldap 'false' \
        --skip-configure-hue 'false' \
        --ranger-host $(hostname -f) \
        --ranger-version '2

    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. 如果您需要与外部工具集成,即集中式OpenLDAP或现有的MySQL或Solr,请添加相应的 --skip-xxx-xxx 选项并将其设置为 true
    3. 如果您有其他预定义的 Hue、Ranger 和 SSSD 绑定 DN,请添加相应的 --xxx-bind-dn--xxx-bind-password 选项进行设置。请注意,安装 OpenLDAP 时将自动创建 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. 默认情况下,一体式安装会将集群 Kerberos 数据库迁移到 OpenLDAP,以便更好地管理帐户,但如果您运行外部 Kerberos KDC,请确保您确实需要将外部 KDC 的数据库迁移到 Open LDAP。如果没有,请在命令行中添加 --skip-migrate-kerberos-db 'true' 以跳过它。

    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 创建 IAM 角色

    此步骤将创建三个 IAM 角色,这些角色是 EMR 所必需的。

     

    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 原生' \
        --auth-provider 'openldap'
    “ 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 'openldap'
    

    2.3.5 安装 OpenLDAP

    此步骤将在给定的OpenLDAP主机上安装OpenLDAP,如上所述。虽然此操作是在OpenLDAP服务器上执行的,但您无需登录OpenLDAP服务器。您只需在本地主机(Ranger 服务器)上运行命令行。

     

    sudo sh ./ranger-emr-cli-installer/bin/setup.sh install-openldap \
        --region "$REGION" \
        --access-key-id "$ACCESS_KEY_ID" \
        --secret-access-key "$SECRET_ACCESS_KEY" \
        --ssh-key "$SSH_KEY" \
        --solution 'emr-native' \
        --auth-provider 'openldap' \
        --openldap-host "$OPENLDAP_HOST" \
        --openldap-base-dn 'dc=example,dc=com' \
        --openldap-root-cn 'admin' \
        --openldap-root-password 'Admin1234!'

    2.3.6 安装游侠

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

     

    SH 安装游侠 \
    --区域“$REGION” \
    --access-key-id “$ACCESS_KEY_ID” \
    --秘密访问密钥 “$SECRET_访问密钥” \
    --解决方案 'EMR 原生' \
    --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' \
    --游侠绑定密码 '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.7 安装游侠插件

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

     

    sudo sh ./ranger-emr-cli-installer/bin/setup.sh install-ranger-plugins \
        --region "$REGION" \
        --solution 'emr-native' \
        --auth-provider 'openldap' \
        --ranger-plugins 'emr-native-emrfs,emr-native-spark,emr-native-hive'

    2.3.8 创建 EMR 集群

    对于分步安装,没有创建 EMR 集群的交互式过程,因此请随意在 EMR Web 控制台上创建集群,但我们必须等到集群完全准备就绪(处于“等待”状态),然后导出以下特定于环境的变量:

     

    export EMR_CLUSTER_ID='TO_BE_REPLACED'
    export KERBEROS_REALM='TO_BE_REPLACED'
    export KERBEROS_KDC_HOST='TO_BE_REPLACED'

    以下是该示例的副本:

     

    export EMR_CLUSTER_ID='j-8SRQM6X4ZVT8' export KERBEROS_REALM='COMPUTE.INTERNAL' export KERBEROS_KDC_HOST='ip-10-0-3-104.cn-north-1.compute.internal'

    2.3.9 迁移 Kerberos 数据库

    Kerberos 的默认数据库是基于文件的。这应该存储在 KDC 上。此步骤会将所有主体的数据迁移到 OpenLDAP。如果您运行外部 KDC,并且它不专用于您的 EMR 集群,请更加注意此步骤。您可以跳过此步骤,除非您确定需要将外部 KDC 迁移到 OpenLDAP。

     

    sudo sh ./ranger-emr-cli-installer/bin/setup.sh migrate-kerberos-db \
        --region $REGION \
        --ssh-key "$SSH_KEY" \
        --kerberos-realm "$KERBEROS_REALM" \
        --kerberos-kdc-host "$KERBEROS_KDC_HOST" \
        --openldap-host "$OPENLDAP_HOST" \
        --openldap-base-dn 'dc=example,dc=com' \
        --openldap-root-cn 'admin' \
        --openldap-root-password 'Admin1234!'

    2.3.10 启用 SASL/GSSAPI

    此步骤将启用 SASL/GSSAPI。这是OpenLDAP和Kerberos集成的关键操作,它将在OpenLDAP,Kerberos KDC和EMR集群的每个节点上执行远程操作。和以前一样,您需要在本地主机上运行它。

     

    sh enable-sasl-gssapi \
    --区域“$REGION” \
    --ssh-key “$SSH_KEY” \
    --Kerberos-Realm “$KERBEROS_REALM” \
    --kerberos-kdc-host “$KERBEROS_KDC_HOST” \
    --openldap-host “$OPENLDAP_HOST” \
    --openldap-base-dn 'dc=example,dc=com' \
    --openldap-root-cn 'admin' \
    --openldap-root-password 'Admin1234!' \
        --emr-cluster-id “$EMR_CLUSTER_ID”

    2.3.11 安装 SSSD

    此步骤将在 EMR 集群的每个节点上安装和配置 SSSD。与安装开放式 LDAP 相同;我们仍然应该保留一个本地主机来运行命令行,它将通过 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.3.12 配置色相

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

     

    sh configure-hue \
    --区域“$REGION” \
    --auth-provider 'openldap' \
    --openldap-host “$OPENLDAP_HOST” \
    --openldap-base-dn 'dc=example,dc=com' \
    --openldap-user-object-class 'inetOrgPerson' \
    --hue-bind-dn 'cn=hue,ou=services,dc=example,dc=com' \
    --hue-bind-password 'Admin1234!' \
        --emr-cluster-id “$EMR_CLUSTER_ID”

    2.3.13 创建示例用户

    此步骤将创建两个示例用户,以便于进行以下验证:

     

    sudo sh ./ranger-emr-cli-installer/bin/setup.sh add-example-users \
        --region "$REGION" \
        --ssh-key "$SSH_KEY" \
        --solution 'emr-native' \
        --auth-provider 'openldap' \
        --kerberos-kdc-host "$KERBEROS_KDC_HOST" \
        --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. 验证

    安装和集成完成后,是时候检查Ranger是否有效了。验证作业分为三个部分,分别针对Hive,EMRFS (S3)和Spark。首先,让我们通过客户端登录OpenLDAP,即LdapAdmin或Apache Directory Studio,然后查看所有DN;它应如下所示:

    VerificationRanger Web Console

    3.1 配置单元访问控制验证

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

    Hive AccessRanger 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/hive/ranger_policy_cache/hiveServer2_hive.json
        sleep 3
    done

    本地策略文件保持最新后, removing-all-policies 操作将生效。接下来,使用安装程序创建的OpenLDAP帐户“example-user-1”登录Huejpg“ data-new=”false“ data-size=”95514“ data-sizeformatted=”95.5 kB“ data-src=”https://dz2cdn1.dzone.com/storage/temp/16331470-12-hue-snapshot-1.jpg“ data-type=”temp“ data-url=”https://dz2cdn1.dzone.com/storage/temp/16331470-12-hue-snapshot-1.jpg“ src=”http://www.cheeli.com.cn/wp-content/uploads/2022/12/16331470-12-hue-snapshot-1.jpg“ style=”width: 900px;”/>它表明示例用户 1 被数据库相关权限阻止,这证明 Hive 插件正在工作。接下来,我们返回到 Ranger 并添加一个名为“all - 数据库、表、列”的 Hive 策略,如下所示:

    Working Hive Plug In它授予示例用户 1 对所有数据库、表和列的所有权限。然后使用以前的命令行在主节点上再次检查策略文件。更新后,返回 Hue,重新运行该 SQL,此时我们将收到另一个错误:

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

     No Permissions3rd SQL最后,为了准备下一次 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) 访问控制验证

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

    斯卡拉

     

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

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

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

    EMRFS Policy它将授予示例用户 1 对“ranger-test”存储桶的所有权限。与检查 Hive 策略文件类似,我们也可以运行以下命令来检查 EMRFS 策略文件是否已更新:

     

    # 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 Spark Code3.3 火花访问控制验证

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

    斯卡拉

     

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

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

    Spark SQL它显示当前用户对默认数据库没有权限。这证明 Spark 插件正在运行,并且已成功阻止未经授权的数据库/表访问。

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

    Log into Ranger它将授予示例用户 1 对所有数据库/表/列的所有权限.10};做
    printf “\n%100s\n\n”|tr ' ' '='
    sudo stat /etc/emr-record-server/ranger_policy_cache/emrSparkRangerPlugin_spark.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/emr-record-server/ranger_policy_cache/emrSparkRangerPlugin_spark.json 
        sleep 3
    done

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

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

    4. 常见问题

    4.1 如何集成外部 KDC?

    保持一切照常,但在创建 EMR 集群时,请勿选择 CLI 生成的安全配置。不要手动创建另一个,而是从生成的安全配置中复制除“身份验证”部分之外的所有值。对于“身份验证”,请选择“外部 KDC”并填写您自己的值,在命令行控制台中输入 Kerberos KDC 主机或导出 KERBEROS_KDC_HOST时,还要使用您的外部 KDC 主机名。最后,请确保是否仍需要将外部 Kerberos 数据库迁移到 Open LDAP。如果没有,请使用 跳过 --skip-migrate-kerberos-db true它。

    4.2 我可以重新运行一体式安装命令行吗?

    是的,您无需执行任何清理操作。

    5. 附录

    以下是参数规范:

    参数
    评论
    --地区
    AWS 区域
    --秘密访问密钥
    您的 IAM 账户的 AWS 秘密访问密钥。
    --安全密钥
    SSH 私钥文件路径。
    --溶液
    解决方案名称,接受的值“开源”或“emr-native”。
    --身份验证提供程序
    身份验证提供程序接受值“ad”或“OpenLDAP”。
    --openldap-host
    OpenLDAP 主机的 FQDN。
    --openldap-base-dn
    OpenLDAP的基本DN,例如:“dc=example,dc=com”,根据您的环境进行更改。
    --openldap-root-cn
    根帐户的CN,例如:“admin”,根据您的环境进行更改
    --游侠绑定-DN
    Ranger的绑定DN,例如:“cn=ranger,ou=services,dc=example,dc=com”,这应该是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,根据您的环境进行更改
    --示例用户
    要在OpenLDAP和Kerberos上创建的示例用户,以便演示Ranger的功能,此参数是可选的,如果省略,则不会创建示例用户。
    --游侠绑定-DN
    ranger 的绑定 DN,例如:“cn=ranger,ou=services,dc=example,dc=com”,这应该是 Windows AD/OpenLDAP 上的现有 DN,请根据您的环境进行更改。
    --游侠绑定密码
    绑定 DN 的密码,例如:“Admin1234!”,根据您的环境进行更改。
    --hue-bind-dn
    Ranger的绑定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,根据您的环境进行更改
    --游侠插件
    要安装的 Ranger 插件,多个值以逗号分隔。例如:“emr-native-emrfs,emr-native-spark,emr-native-hive”,根据您的环境进行更改。
    --skip-configure-hue
    跳到配置 Hue,接受的值为“真”或“假”,默认值为“假”。
    --skip-migrate-kerberos-db
    跳过迁移 Kerberos 数据库,接受的值为“真”或“假”,默认值为“假”。
    Comments are closed.