在 Amazon EMR 上的 Presto 中使用 LDAP 身份验证 - Amazon EMR
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Amazon EMR 上的 Presto 中使用 LDAP 身份验证

按照本节中的步骤配置LDAP。请参阅每个步骤以了解示例以及指向更多信息的链接。

第1步: 收集有关LDAP服务器的信息并将服务器证书复制到 Amazon S3

您需要在下一节中使用这些信息和内容,以便从 LDAP 服务器中配置 LDAP 身份验证。

LDAP 服务器的 IP 地址或主机名

Amazon EMR 主节点上的 Presto 协调器必须能够访问具有指定的 IP 地址或主机名的 LDAP 服务器。默认情况下,Presto通过端口636使用LDAPS与LDAP服务器通信。如果您的 LDAP 实施需要使用自定义端口,您可以使用 ldap.url 属性(Amazon EMR 5.16.0 或更高版本)或者 authentication.ldap.url(早期版本)指定该端口。替换的自定义端口 636presto-config 中的配置分类示例 第3步: 使用Presto属性为LDAP创建配置JSON. 确保任何防火墙和安全组允许端口 636(或自定义端口)以及端口 8446(或自定义端口)上的入站和出站流量,端口 8446 用于内部集群通信。

LDAP 服务器证书

您必须将证书文件上传到 Amazon S3 中的安全位置。有关更多信息,请参阅 https://docs.amazonaws.cn/AmazonS3/latest/user-guide/upload-objects.html 中的Amazon Simple Storage Service 控制台用户指南如何将文件和文件夹上传至 S3 存储桶。您可以创建一个引导操作,以便在集群启动时将该证书从 Amazon S3 复制到集群中的每个节点。英寸 第4步: 创建脚本以复制LDAP服务器证书并将其上传到 Amazon S3. 示例证书是 s3://MyBucket/ldap_server.crt.

LDAP 服务器的匿名绑定设置

如果在上禁用匿名绑定 PrestoDB,您需要具有LDAP服务器绑定权限的用户ID(UID)和密码,以便 PrestoDB 服务器可以建立连接。您可以使用 internal-communication.authentication.ldap.userinternal-communication.authentication.ldap.password 属性 presto-config 配置分类。 Amazon EMR 5.10.0不支持这些设置,因此,在使用本发行版本时,LDAP服务器上必须支持匿名绑定。

请注意 PrestoSQL 不需要匿名绑定配置。

获取 LDAP 服务器上的匿名绑定状态

  • 从 Linux 客户端中使用 ldapwhoami 命令,如以下示例所示:

    ldapwhoami -x -H ldaps://LDAPServerHostNameOrIPAddress

    如果不允许匿名绑定,该命令将返回以下内容:

    ldap_bind: Inappropriate authentication (48) additional info: anonymous bind disallowed

验证账户是否具有使用简单身份验证的 LDAP 服务器的权限

  • 使用ldaphurami意味 命令,如以下示例所示。该示例使用虚拟用户,presto,存储在EC2实例上运行的开放式LDAP服务器上,主机名为虚构 ip-xxx-xxx-xxx-xxx.ec2.internal。用户与组织单位(OU)关联 admins 以及密码 123456:

    ldapwhoami -x -w "123456" -D uid=presto,ou=admins,dc=ec2,dc=internal -H ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal

    如果该账户有效并具有相应的权限,该命令将返回:

    dn:uid=presto,ou=admins,dc=ec2,dc=internal

中的示例配置 第3步: 使用Presto属性为LDAP创建配置JSON 包括此帐户,以明确说明,但5.10.0示例除外,其中不支持此帐户。如果 LDAP 服务器使用匿名绑定,请删除 internal-communication.authentication.ldap.userinternal-communication.authentication.ldap.password 名称/值对。

Presto 用户的 LDAP 可分辨名称 (DN)

为Presto指定LDAP配置时,您应指定绑定模式,该模式由 ${USER} 连同组织单位(OU)和其他域组件(DC)。Presto替换 ${USER} 使用每个用户的实际用户ID(UID)进行密码验证,以匹配此绑定模式指定的可分辨名称(DN)。您需要 OUs 符合资格的用户及其 DCs。例如,要允许用户从 admins OU位于 corp.example.com 要向Presto进行身份验证的域,请指定 ${USER},ou=admins,dc=corp,dc=example,dc=com 作为用户绑定模式。

在使用 Amazon EMR 5.10.0 时,您只能指定一种此类模式。在使用 Amazon EMR 5.11.0 或更高版本时,您可以指定多种模式并以冒号 (:) 分隔。尝试向Presto进行身份验证的用户将与第一个模式进行比较,然后是第二个模式,以此类推。有关示例,请参阅第3步: 使用Presto属性为LDAP创建配置JSON

第2步: 设置安全配置

创建启用传输中加密的安全配置。有关更多信息,请参阅 https://docs.amazonaws.cn/emr/latest/ManagementGuide/emr-create-security-configuration.html 中的Amazon EMR 管理指南创建安全配置。设置传输中加密时提供的加密伪影用于加密Presto节点之间的内部通信。有关更多信息,请参阅为传输中的数据加密提供证书。LDAP 服务器证书用于对到 Presto 服务器的客户端连接进行身份验证。

第3步: 使用Presto属性为LDAP创建配置JSON

您使用 presto-config 配置分类以设置LDAP的Presto属性。其格式和内容 presto-config 略有不同,具体取决于 Amazon EMR 版本和Presto安装(PrestoDB或 PrestoSQL)。在本节后面提供了配置示例差异。有关更多信息,请参阅 配置应用程序

以下步骤假设您将JSON数据保存到文件,MyPrestoConfig.json。如果您使用控制台,请将文件上传到 Amazon S3 以便在创建群集时引用它。如果使用 AWS CLI,您可以在本地引用该文件。

例 Amazon EMR 6.1.0及更高版本, PrestoSQL

以下示例使用LDAP主机名 第1步: 收集有关LDAP服务器的信息并将服务器证书复制到 Amazon S3 对LDAP服务器进行身份验证以绑定。指定了两种用户绑定模式,这表示用户位于 admins OU和 datascientists LDAP服务器上的OU有资格对 PrestoSQL 服务器作为用户。绑定模式由冒号 (:) 分隔。

[ { "Classification":"prestosql-config", "Properties":{ "http-server.authentication.type":"PASSWORD" } }, { "Classification":"prestosql-password-authenticator", "Properties":{ "password-authenticator.name":"ldap", "ldap.url":"ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal:636", "ldap.user-bind-pattern": "uid=${USER},ou=admins,dc=ec2,dc=internal:uid=${USER},ou=datascientists,dc=ec2,dc=internal" } } ]

例 Amazon EMR 5.16.0 和更高版本

以下示例使用LDAP用户ID和密码,以及LDAP主机名 第1步: 收集有关LDAP服务器的信息并将服务器证书复制到 Amazon S3 对LDAP服务器进行身份验证以绑定。指定了两种用户绑定模式,这表示用户位于 admins OU和 datascientists LDAP服务器上的OU有资格作为用户对Presto服务器进行身份验证。绑定模式由冒号 (:) 分隔。

[{ "Classification": "presto-config", "Properties": { "http-server.authentication.type": "PASSWORD" } }, { "Classification": "presto-password-authenticator", "Properties": { "password-authenticator.name": "ldap", "ldap.url": "ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal:636", "ldap.user-bind-pattern": "uid=${USER},ou=admins,dc=ec2,dc=internal:uid=${USER},ou=datascientists,dc=ec2,dc=internal", "internal-communication.authentication.ldap.user": "presto", "internal-communication.authentication.ldap.password": "123456" } }]

例 Amazon EMR 5.11.0 至 5.15.0

的格式 presto-config 这些版本的配置分类略有不同。以下示例指定与上一示例相同的参数。

[{ "Classification": "presto-config", "Properties": { "http-server.authentication.type": "LDAP", "authentication.ldap.url": "ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal:636", "authentication.ldap.user-bind-pattern": "uid=${USER},ou=admins,dc=ec2,dc=internal:uid=${USER},ou=datascientists,dc=ec2,dc=internal", "internal-communication.authentication.ldap.user": "presto", "internal-communication.authentication.ldap.password": "123456" } }]

例 Amazon EMR 5.10.0

Amazon EMR 5.10.0 仅支持匿名绑定,因此,将省略这些条目。此外,只能指定一种绑定模式。

[{ "Classification": "presto-config", "Properties": { "http-server.authentication.type": "LDAP", "authentication.ldap.url": "ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal:636", "ldap.user-bind-pattern": "uid=${USER},ou=prestousers,dc=ec2,dc=internal" } }]

第4步: 创建脚本以复制LDAP服务器证书并将其上传到 Amazon S3

创建将证书文件复制到群集中每个节点的脚本,并将其添加到密钥库。请使用文本编辑器创建脚本,保存该脚本,然后将其上传到 Amazon S3 中。英寸 第5步: 创建群集,脚本文件被引用为 s3://MyBucket/LoadLDAPCert.sh.

以下示例脚本使用默认密钥库密码,changeit。我们建议您在创建群集后连接到管理节点,并使用keytool命令更改keystore密码。

#!/bin/bash aws s3 cp s3://MyBucket/ldap_server.crt . sudo keytool -import -keystore /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/lib/security/cacerts -trustcacerts -alias ldap_server -file ./ldap_server.crt -storepass changeit -noprompt

第5步: 创建群集

在创建集群时,您可以指定 Presto 以及希望 Amazon EMR 安装的其他应用程序。以下示例还引用 JSON 中的配置分类属性,但也可以指定内联的配置分类。

如何使用LDAP身份验证创建Presto群集 Amazon EMR 控制台

  1. 通过以下网址打开 Amazon EMR 控制台:https://console.amazonaws.cn/elasticmapreduce/

  2. 依次选择 Create cluster (创建集群)Go to advanced options (转到高级选项)

  3. 选择 Presto 以及 Amazon EMR 安装的其他应用程序,然后在 Software Configuration (软件配置) 中选择 Amazon EMR 使用的 Release (版本)。仅 Amazon EMR 5.10.0 和更高版本支持 LDAP 身份验证。

  4. Edit software settings (编辑软件设置) 下,选择 Load JSON from S3 (从 S3 加载 JSON),输入 Amazon S3 上在第3步: 使用Presto属性为LDAP创建配置JSON中创建的 JSON 配置文件的位置,然后选择 Next (下一步)

  5. 配置集群硬件和网络,然后选择下一步

  6. 选择 Bootstrap操作. 对于添加引导操作,请选择自定义操作,然后选择配置并添加

  7. 输入引导操作的名称,输入在中创建的脚本位置第4步: 创建脚本以复制LDAP服务器证书并将其上传到 Amazon S3(如 s3://MyBucket/LoadLDAPCert.sh),然后选择添加

  8. 常规选项标签其他选项下面,选择适合您的应用程序的设置,然后选择下一步

  9. 选择身份验证和加密,然后选择您在中创建的安全配置第2步: 设置安全配置

  10. 选择适合您的应用程序的其他安全选项,然后选择创建集群

使用 AWS CLI 创建具有 LDAP 身份验证的 Presto 集群

  • 使用 aws emr create-cluster 命令。至少,指定Presto应用程序,以及Presto配置分类、bootstrap脚本和您在之前步骤中创建的安全配置。以下示例将配置文件引用为保存在运行命令的同一目录中的JSON文件。另一方面,引导脚本必须保存在 Amazon S3 中。下面的示例使用了 s3://MyBucket/LoadLDAPCert.sh

    注意

    包含了 Linux 行继续符 (\) 以提高可读性。可以在 Linux 命令中删除或使用它们。对于 Windows,请删除它们或将其替换为脱字号 (^)。

    aws emr create-cluster --applications Name=presto --release-label emr-5.16.0 \ --use-default-roles --ec2-attributes KeyName=MyKeyPair,SubnetId=subnet-1234ab5 \ --instance-count 3 --instance-type m5.xlarge --region us-west-2 --name "MyPrestoWithLDAPAuth” \ --bootstrap-actions Name="Distribute LDAP server cert",Path="s3://MyBucket/LoadLDAPCert.sh" \ --security-configuration MyPrestoLDAPSecCfg --configurations file://MyPrestoConfig.json