在本系列的第 一篇文章 中,我们全面了解了 EMR 和 Ranger 集成解决方案。从现在开始,我们将开始逐一介绍具体的解决方案。本文反对“场景 1:OpenLDAP + EMR-Native Ranger”。 我们将介绍解决方案的体系结构,给出详细的安装步骤说明,并验证安装的环境。
1. 解决方案概述
1.1 架构
在此解决方案中,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 深度集成”
通常,安装程序将完成以下作业:
安装 OpenLDAP。
1.3 授权详解
对于授权,游侠绝对是主角。如果我们深入研究它,它的架构如下所示:
安装程序将完成以下作业:
- 将 MySQL 安装为 Ranger 的策略数据库。
- 安装 Solr 作为 Ranger 的审核存储。
- 安装游侠管理员。
- 安装 Ranger UserSync。
- 安装 EMRFS(S3) Ranger 插件。
- 安装 Spark Ranger 插件。
- 安装 Hive Ranger 插件。
- 安装 Trino Ranger 插件(在撰写本文时尚不可用)
安装和集成
通常,安装和集成过程可以分为三个阶段:
- 先决条件
- 多合一安装
- 创建 EMR 集群
下图详细说明了进度:
在第一阶段,我们需要做一些准备工作。在第 2 阶段,我们开始安装和集成。在此阶段有两个选项:一个是由基于命令行的工作流驱动的一体化安装。另一个是分步安装。
在大多数情况下,多合一安装始终是最佳选择;但是,您的安装工作流程可能会因不可预见的错误而中断。如果要从上一个失败的步骤继续安装,请尝试分步安装。您可能希望使用不同的参数值重试步骤以找到正确的步骤,分步也是更好的选择。在第 3 阶段,我们需要使用第 2 阶段的输出构件(即 IAM 角色和 EMR 安全配置)自行创建一个 EMR 集群。
作为设计原则,安装程序不包括创建 EMR 集群的任何操作。您应该始终自己创建集群,因为实际上 EMR 集群可能具有任何不可预测的设置,即特定于应用程序的(HDFS、Yarn 等)配置、步骤脚本、引导脚本等。不建议将 Ranger 的安装与 EMR 集群创建相结合。
但是,阶段 2 和阶段 3 之间的执行顺序存在一些重叠。基于 EMR 原生游侠创建 EMR 集群时,需要提供安全配置和游侠特定的 IAM 角色的副本。它们必须在创建 EMR 集群之前可用,此外,在创建集群时,它还需要与 Ranger 服务器交互(服务器地址在安全配置中分配)。另一方面,一体化安装中的某些操作需要在群集或 KDC 的所有节点上执行。这需要准备好 EMR 集群。为了解决这种循环依赖关系,安装程序将首先根据 EMR 集群输出一些工件。接下来,指示用户使用这些项目创建自己的集群;同时,安装进度将处于挂起状态,并持续监控目标集群的状态
笔记:
- 安装程序会将本地主机视为 Ranger 服务器,以在 Ranger 上安装所有内容。对于非Ranger操作,即安装OpenLDAP或迁移Kerberos DB,它将通过SSH启动远程操作。因此,您可以留在Ranger服务器上执行命令行,这意味着无需在多个主机之间切换。
- 为了 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 集群:
- 名为 EC2 实例配置文件
EMR_EC2_RangerRole.
- 名为
Ranger@<YOUR-RANGER-HOST-FQDN>.
它们只是由步骤 2.2 和 2.4 中的命令行创建的。您可以在创建集群时从 EMR Web 控制台找到它们。以下是此刻命令行的快照:
接下来,我们应该切换到 EMR Web 控制台以创建集群。请务必选择命令行控制台中提示的 EC2 实例配置文件和安全配置。对于 Kerberos KDC,请同时填写并记下“领域”和“KDC 管理员密码”。 它们将很快在命令行中使用。以下是目前 EMR Web 控制台的快照:
集群 ID:从 Web 控制台上的摘要选项卡中获取。
us-east-1
,默认领域为 ;对于其他区域,默认领域为 EC2.INTERNAL
COMPUTE.INTERNAL.
现在,我们需要返回命令行终端并为 CLI 提示符输入“y”。“你创建了集群吗?[y/n]:“(集群完全准备就绪不需要疣),那么命令行会要求你逐个输入以上四个信息项,因为它们是下一阶段安装所必需的,然后再次输入”y“进行确认。安装过程将恢复,如果分配的 EMR 集群尚未准备就绪,命令行将继续监控,直到进入“正在等待”状态,以下是命令行此刻的快照:
当群集准备就绪(状态为“正在等待”)时,命令行将继续从步骤 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
全参数版本为我们提供了所有自定义选项的完整视角。在以下情况下,您可以更改某些选项的值 :
- 如果要更改默认组织名称
dc=example,dc=com
或默认密码Admin1234!
,请运行全参数版本并将其替换为您自己的值。 - 如果您需要与外部工具集成,即集中式OpenLDAP或现有的MySQL或Solr,请添加相应的
--skip-xxx-xxx
选项并将其设置为true
。 - 如果您有其他预定义的 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实际上是树路径。要创建它,我们必须在路径中创建所有节点,实现如此小而复杂的功能并不划算。 - 默认情况下,一体式安装会将集群 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'
以下是该示例的副本:
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;它应如下所示:
3.1 配置单元访问控制验证
通常,安装后 Hive 插件有一组预定义的策略。为了消除干扰并保持验证简单,让我们先删除它们:
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/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 策略,如下所示:
它授予示例用户 1 对所有数据库、表和列的所有权限。然后使用以前的命令行在主节点上再次检查策略文件。更新后,返回 Hue,重新运行该 SQL,此时我们将收到另一个错误:
如图所示,SQL 在读取“s3://ranger-test”时被阻止,实际上,example-user-1 无权访问任何 URL,包括“s3://”。 我们需要向此用户授予与 url 相关的权限,因此再次返回到 Ranger 并添加一个名为“all - url”的 Hive 策略,如下所示:
最后,为了准备下一次 EMRFS/Spark 验证,我们需要在表中插入一些示例数据,并仔细检查示例用户 1 是否对表具有完全读写权限:
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 访问控制验证已通过。
3.2 EMRFS (S3) 访问控制验证
使用帐户登录 Hue:“example-user-1”,打开 Scala 编辑器,然后输入以下 Spark 代码:
# run in scala editor of hue
spark.read.csv("s3://ranger-test/").show;
这行代码尝试读取 S3 上的文件,但它会遇到以下错误:
它显示示例用户 1 对 S3 存储桶“游侠测试”没有权限。 这证明 EMRFS 插件正在运行,并且已成功阻止未经授权的 S3 访问。让我们登录 Ranger 并添加一个名为“all - ranger-test”的 EMRFS 策略,如下所示:
它将授予示例用户 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 代码,它将成功如下:
3.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 插件正在运行,并且已成功阻止未经授权的数据库/表访问。
让我们登录 Ranger 并添加一个名为“all - 数据库、表、列”的 Spark 策略,如下所示:
它将授予示例用户 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 代码,它将成功如下:
到目前为止,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 区域
|