本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在亚马逊上使用 Presto 的LDAP身份验证 EMR
按照本节中的步骤进行配置LDAP。请参阅每个步骤以了解示例以及指向更多信息的链接。
配置LDAP身份验证的步骤
步骤 1:收集有关您的LDAP服务器的信息并将服务器证书复制到 Amazon S3
您需要LDAP服务器提供以下部分中的信息和项目来配置LDAP身份验证。
LDAP服务器的 IP 地址或主机名
Amazon EMR 主节点上的 Presto 协调器必须能够通过指定的 IP 地址或主机名访问LDAP服务器。默认情况下,Presto 使用LDAPS端口 636 与LDAP服务器通信。如果您的LDAP实现需要自定义端口,则可以在 Amazon EMR 5.16.0 或更高版本中使用该ldap.url
属性进行指定,或者在早期版本中authentication.ldap.url
使用。将自定义端口替换为 636
,如 第 3 步:创建具JSON有 Presto 属性的配置 LDAP 中的 presto-config
配置分类示例所示。确保任何防火墙和安全组允许端口 636(或自定义端口)以及端口 8446(或自定义端口)上的入站和出站流量,端口 8446 用于内部集群通信。
LDAP服务器证书
您必须将证书文件上传到 Amazon S3 中的安全位置。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的如何将文件和文件夹上传到 S3 存储桶。您可以创建一个引导操作,以便在集群启动时将该证书从 Amazon S3 复制到集群中的每个节点。在步骤 4:创建脚本以复制LDAP服务器证书并将其上传到 Amazon S3中。示例证书是 s3://amzn-s3-demo-bucket/ldap_server.crt
.
LDAP服务器的匿名绑定设置
如果在 PrestoDB 上禁用了匿名绑定,则需要具有绑定到服务器权限的帐户的用户 ID UID () 和密码,这样 PrestoDB 服务器才能LDAP建立连接。您可以使用presto-config
配置分类中的internal-communication.authentication.ldap.user
和internal-communication.authentication.ldap.password
属性来指定和密码。UIDAmazon EMR 5.10.0 不支持这些设置,因此当您使用此发行版时,LDAP服务器必须支持匿名绑定。
请注意,Trino 不需要匿名绑定配置。
获取LDAP服务器上匿名绑定的状态
-
从 Linux 客户端中使用 ldapwhoami
命令,如以下示例所示: ldapwhoami -x -H ldaps://
LDAPServerHostNameOrIPAddress
如果不允许匿名绑定,该命令将返回以下内容:
ldap_bind: Inappropriate authentication (48) additional info: anonymous bind disallowed
验证账户是否有权访问使用简单身份验证的LDAP服务器
-
从 Linux 客户端中使用 ldapwhoami
命令,如以下示例所示。该示例使用了一个虚构的用户, presto
,存储在使用虚构主机名的EC2实例上运行的 Open 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 步:创建具JSON有 Presto 属性的配置 LDAP 中的示例配置包含该账户,但 5.10.0 示例除外,该发行版不支持该账户。如果LDAP服务器使用匿名绑定,请移除internal-communication.authentication.ldap.user
和internal-communication.authentication.ldap.password
名称/值对。
Presto 用户LDAP的可分辨名称 (DN)
在指定 Presto 的LDAP配置时,您可以指定一种绑定模式,该模式包括组织单位 (OU) 和其他域组件 (DCs)。${USER}
在密码身份验证期间,Presto 将替换${USER}
为每个用户的实际用户 ID (UID),以匹配此绑定模式指定的可分辨名称 (DN)。您需要符合条件OUs的用户所属的以及他们DCs的。例如,要允许 admins
域上的 corp.example.com
OU 中的用户在 Presto 中进行身份验证,您可以将 ${USER},ou=admins,dc=corp,dc=example,dc=com
指定为用户绑定模式。
注意
使用时 AWS CloudFormation,需要使用 Fn:: Sub 函数才能替换为实际${USER}
的用户 ID () UID。有关更多信息,请参阅《AWS CloudFormation 用户指南》 中的 Fn::Sub 主题。
使用 Amazon EMR 5.10.0 时,您只能指定一种这样的模式。使用 Amazon EMR 5.11.0 或更高版本,您可以指定用冒号 (:) 分隔的多个模式。尝试在 Presto 中进行身份验证的用户先与第一种模式进行比较,然后与第二种模式进行比较,依此类推。有关示例,请参阅第 3 步:创建具JSON有 Presto 属性的配置 LDAP。
步骤 2:设置安全配置
创建一个安全配置并启用传输中加密。有关更多信息,请参阅《Amazon EMR 管理指南》中的创建安全配置。在设置传输中加密时提供的加密构件用于加密 Presto 节点之间的内部通信。有关更多信息,请参阅为传输中的数据加密提供证书。LDAP服务器证书用于验证客户端与 Presto 服务器的连接。
第 3 步:创建具JSON有 Presto 属性的配置 LDAP
您可以使用presto-config
配置分类来设置 Presto 的属性。LDAP的格式和内容略presto-config
有不同,具体取决于亚马逊EMR发布版本和 Presto 安装(PrestoDB 或 Trino)。在本节后面提供了配置差异示例。有关更多信息,请参阅 配置应用程序。
以下步骤假设您将JSON数据保存到文件中,MyPrestoConfig.json
。 如果您使用控制台,请将文件上传到 Amazon S3 中的安全位置,以便在创建集群时可以参考该文件。如果使用 AWS CLI,则可以在本地引用该文件。
例 亚马逊 EMR 6.1.0 及更高版本推出 PrestoSQL(Trino)
以下示例使用中的LDAP主机名步骤 1:收集有关您的LDAP服务器的信息并将服务器证书复制到 Amazon S3向LDAP服务器进行身份验证以进行绑定。指定了两种用户绑定模式,这表明 admins
OU 和LDAP服务器上的 O datascientists
U 中的用户有资格以用户身份向 Trino 服务器进行身份验证。绑定模式由冒号 (:
) 分隔。
亚马逊 6.4.0 及更高EMR版本使用新名称 Trino 而不是 Presto。SQL如果你使用 Trino,请更换
在以下配置分类中,使用prestosql-config
trino-config
和
使用prestosql-password-authenticator
trino-password-authenticator
。
[ { "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" } } ]
例 亚马逊 EMR 5.16.0 及更高版本
以下示例使用LDAP用户 ID 和密码以及中的LDAP主机名步骤 1:收集有关您的LDAP服务器的信息并将服务器证书复制到 Amazon S3向LDAP服务器进行身份验证以进行绑定。指定了两种用户绑定模式,这表明 admins
OU 和LDAP服务器上的 O datascientists
U 中的用户有资格以用户身份向 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
" } }]
例 亚马逊 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
" } }]
例 亚马逊 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://amzn-s3-demo-bucket/LoadLDAPCert.sh
.
以下示例脚本使用默认的密钥库密码,changeit
。 我们建议您在创建集群后连接到主节点,并使用 keytool 命令更改密钥库密码。
#!/bin/bash aws s3 cp s3://amzn-s3-demo-bucket/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,但您也可以内联指定配置分类。
使用亚马逊EMR控制台创建带有LDAP身份验证的 Presto 集群
导航到新的 Amazon EMR 控制台,然后从侧面导航栏中选择 “切换到旧主机”。有关切换到旧控制台后预期情况的更多信息,请参阅 Using the old console。
-
依次选择 Create cluster (创建集群)、Go to advanced options (转到高级选项)。
-
选择 Prest o 以及其他应用程序供亚马逊EMR安装,然后在 “软件配置” 下,选择EMR要使用的亚马逊版本。LDAP仅亚马逊 EMR 5.10.0 及更高版本支持身份验证。
-
在 “编辑软件设置” 下,选择 “JSON从 S3 加载”,输入您在中创建的JSON配置文件在 Amazon S3 中的位置第 3 步:创建具JSON有 Presto 属性的配置 LDAP,然后选择下一步。
-
配置集群硬件和网络,然后选择下一步。
-
选择 Bootstrap Actions (引导操作)。对于添加引导操作,请选择自定义操作,然后选择配置并添加。
-
输入引导操作的名称,输入您在中创建的脚本位置步骤 4:创建脚本以复制LDAP服务器证书并将其上传到 Amazon S3,例如 s3://amzn-s3-demo-bucket/L oadLDAPCert .sh,然后选择添加。
-
在常规选项、标签和其他选项下面,选择适合您的应用程序的设置,然后选择下一步。
-
选择身份验证和加密,然后选择您在中创建的安全配置步骤 2:设置安全配置。
-
选择适合您的应用程序的其他安全选项,然后选择创建集群。
要创建带有LDAP身份验证的 Presto 集群,请使用 AWS CLI
-
使用
aws emr create-cluster
命令。至少,指定 Presto 应用程序,以及在以前步骤中创建的 Presto 配置分类、引导脚本和安全配置。以下示例将配置文件作为文件引用,该JSON文件保存在您运行命令的同一目录中。另一方面,引导脚本必须保存在 Amazon S3 中。下面的示例使用了s3://amzn-s3-demo-bucket/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://amzn-s3-demo-bucket/LoadLDAPCert.sh" \ --security-configuration MyPrestoLDAPSecCfg --configurations file://MyPrestoConfig.json