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

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

在亚马逊 EMR 上使用 LDAP 身份验证

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

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

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

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

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

LDAP 服务器证书

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

LDAP 服务器的匿名绑定设置

如果在 PrestoDB 上禁用了匿名绑定,您需要具有绑定到 LDAP 服务器的帐户的用户 ID (UID) 和密码,以便 PrestoDB 服务器可以建立连接。您可以使用指定 UID 和密码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 服务器的权限

  • 使用达帕瓦米命令,如以下示例所示。该示例使用虚构的用户,Presto,存储在具有虚构主机名的 EC2 实例上运行的 Open LDAP 服务器中。IP-XXX-XXX-XXX-XXX-XXX. EC2. 内部。该用户与组织单位 (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 步:使用 LDAP 的 Presto 属性创建配置 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) 相匹配。您需要使用合格用户所属的 OU 及其 DC。例如,要允许 admins 域上的 corp.example.com OU 中的用户在 Presto 中进行身份验证,您可以将 ${USER},ou=admins,dc=corp,dc=example,dc=com 指定为用户绑定模式。

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

第 2 步:设置安全配置

创建一个安全配置并启用传输中加密。有关更多信息,请参阅 。创建安全配置中的Amazon EMR 管理指南。在设置传输中加密时提供的加密项目用于加密 Presto 节点之间的内部通信。有关更多信息,请参阅 。为在途数据加密提供证书。LDAP 服务器证书用于对到 Presto 服务器的客户端连接进行身份验证。

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

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

以下步骤假定您将 JSON 数据保存到文件中,我的预测配置 .JSON。如果使用控制台,请将该文件上传到 Amazon S3 中的安全位置,以便在创建集群时引用该文件。如果使用 Amazon CLI,您可以在本地引用该文件。

例 emr6.1.0 及更高版本 PrestoSQL 本

以下示例使用 LDAP 主机名第 1 步:收集有关 LDAP 服务器的信息并将服务器证书复制到 Amazon S3对 LDAP 服务器进行绑定进行身份验证。指定了两种用户绑定模式,这表示adminsOU 和datascientistsLDAP 服务器上的 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 和密码,以及第 1 步:收集有关 LDAP 服务器的信息并将服务器证书复制到 Amazon S3对 LDAP 服务器进行绑定进行身份验证。指定了两种用户绑定模式,这表示adminsOU 和datascientistsLDAP 服务器上的 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 命令更改密钥存储密码。

#!/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 中的配置分类属性,但也可以指定内联的配置分类。

使用 Amazon EMR 控制台创建具有 LDAP 身份验证的 Presto 集群

  1. 从打开 Amazon EMR 控制台https://console.aws.amazon.com/elasticmapreduce/

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

  3. 选择Presto以及其他供 Amazon EMR 安装的应用程序,并在软件配置中,选择版本要使用的亚马逊 EMR。仅 Amazon EMR 5.10.0 及更高版本支持 LDAP 身份验证。

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

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

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

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

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

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

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

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

  • 使用 aws emr create-cluster 命令。至少,指定 Presto 应用程序,以及在以前步骤中创建的 Presto 配置分类、引导脚本和安全配置。以下示例将配置文件作为在运行该命令的同一目录中保存的 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