LDAP 身份验证¶
Presto 可以配置为为客户端(如 Presto CLI 或 JDBC 和 ODBC 驱动程序)启用前端 LDAP 身份验证(通过 HTTPS)。目前只支持涉及用户名和密码的简单 LDAP 身份验证机制。Presto 客户端将用户名和密码发送到协调器,协调器使用外部 LDAP 服务验证这些凭据。
要为 Presto 启用 LDAP 身份验证,需要对 Presto 协调器进行配置更改。工作器配置不需要任何更改;只有从客户端到协调器的通信会被验证。但是,如果您想使用 SSL/TLS 来保护 Presto 节点之间的通信,请配置 安全内部通信。
Presto 服务器配置¶
环境配置¶
安全 LDAP¶
Presto 需要安全 LDAP (LDAPS),因此请确保您的 LDAP 服务器上启用了 TLS。
Presto 协调器上的 TLS 配置¶
您需要将 LDAP 服务器的 TLS 证书导入到 Presto 协调器的默认 Java 信任库中,以保护 TLS 连接。您可以使用以下示例 keytool 命令将证书 ldap_server.crt
导入到协调器上的信任库中。
$ keytool -import -keystore <JAVA_HOME>/jre/lib/security/cacerts -trustcacerts -alias ldap_server -file ldap_server.crt
除此之外,访问 Presto 协调器也应该通过 HTTPS 进行。您可以通过在协调器上创建一个 用于 TLS 的 Java 密钥库文件 来实现这一点。
Presto 协调器节点配置¶
在将 Presto 协调器配置为使用 LDAP 身份验证和 HTTPS 之前,您必须对环境进行以下更改。
您还需要修改 Presto 配置文件。LDAP 身份验证是在协调器上进行配置的,分为两个部分。第一部分是在协调器的 config.properties
文件中启用 HTTPS 支持和密码身份验证。第二部分是将 LDAP 配置为密码验证器插件。
服务器配置属性¶
以下是需要添加到协调器的 config.properties
文件中的必需属性示例
http-server.authentication.type=PASSWORD
http-server.https.enabled=true
http-server.https.port=8443
http-server.https.keystore.path=/etc/presto_keystore.jks
http-server.https.keystore.key=keystore_password
属性 |
描述 |
---|---|
|
为 Presto 协调器启用密码身份验证。必须设置为 |
|
为 Presto 协调器启用 HTTPS 访问。应设置为 |
|
HTTPS 服务器端口。 |
|
将用于保护 TLS 的 Java 密钥库文件的路径。 |
|
密钥库的密码。这必须与您创建密钥库时指定的密码匹配。 |
|
启用将通过 HTTP 转发的 HTTPS 请求视为安全。要求在转发请求中将 |
密码验证器配置¶
密码身份验证需要配置为使用 LDAP。在协调器上创建一个 etc/password-authenticator.properties
文件。示例
password-authenticator.name=ldap
ldap.url=ldaps://ldap-server:636
ldap.user-bind-pattern=<Refer below for usage>
属性 |
描述 |
---|---|
|
LDAP 服务器的 URL。URL 方案必须为 |
|
此属性可用于指定用于密码身份验证的 LDAP 用户绑定字符串。此属性必须包含模式 |
根据 LDAP 服务器实现类型,属性 ldap.user-bind-pattern
可以按如下所述使用。
活动目录¶
ldap.user-bind-pattern=${USER}@<domain_name_of_the_server>
示例
ldap.user-bind-pattern=${USER}@corp.example.com
OpenLDAP¶
ldap.user-bind-pattern=uid=${USER},<distinguished_name_of_the_user>
示例
ldap.user-bind-pattern=uid=${USER},OU=America,DC=corp,DC=example,DC=com
基于 LDAP 组成员资格的授权¶
您可以通过设置可选的 ldap.group-auth-pattern
和 ldap.user-base-dn
属性(除了基本的 LDAP 身份验证属性之外),进一步限制允许连接到 Presto 协调器的用户集,这些属性基于其组成员资格。
属性 |
描述 |
---|---|
|
尝试连接到服务器的用户的基本 LDAP 可区分名称。示例: |
|
此属性用于指定 LDAP 组成员资格授权的 LDAP 查询。此查询将针对 LDAP 服务器执行,如果成功,则用户将被授权。此属性必须包含模式 |
根据 LDAP 服务器实现类型,属性 ldap.group-auth-pattern
可以按如下所述使用。
活动目录¶
ldap.group-auth-pattern=(&(objectClass=<objectclass_of_user>)(sAMAccountName=${USER})(memberof=<dn_of_the_authorized_group>))
示例
ldap.group-auth-pattern=(&(objectClass=person)(sAMAccountName=${USER})(memberof=CN=AuthorizedGroup,OU=Asia,DC=corp,DC=example,DC=com))
OpenLDAP¶
ldap.group-auth-pattern=(&(objectClass=<objectclass_of_user>)(uid=${USER})(memberof=<dn_of_the_authorized_group>))
示例
ldap.group-auth-pattern=(&(objectClass=inetOrgPerson)(uid=${USER})(memberof=CN=AuthorizedGroup,OU=Asia,DC=corp,DC=example,DC=com))
对于 OpenLDAP,要使此查询起作用,请确保您启用了 memberOf
覆盖层。
您也可以将此属性用于您希望基于复杂的组授权搜索查询来授权用户的场景。例如,如果您想授权属于多个组中的任何一个组的用户(在 OpenLDAP 中),则可以将此属性设置为如下所示
ldap.group-auth-pattern=(&(|(memberOf=CN=normal_group,DC=corp,DC=com)(memberOf=CN=another_group,DC=com))(objectClass=inetOrgPerson)(uid=${USER}))
Presto CLI¶
环境配置¶
TLS 配置¶
在使用 LDAP 身份验证时,访问 Presto 协调器应该通过 HTTPS 进行。Presto CLI 可以使用 Java 密钥库 文件或 Java 信任库 来进行 TLS 配置。
如果您使用的是密钥库文件,则可以将其复制到客户端机器上并用于其 TLS 配置。如果您使用的是信任库,则可以使用默认的 Java 信任库或在 CLI 上创建自定义信任库。我们不建议在生产环境中使用自签名证书。
Presto CLI 执行¶
除了连接到不需要 LDAP 身份验证的 Presto 协调器时所需的选项外,使用启用了 LDAP 支持的 CLI 调用还需要一些额外的命令行选项。您可以使用 --keystore-*
或 --truststore-*
属性来保护 TLS 连接。调用 CLI 的最简单方法是使用包装器脚本。
#!/bin/bash
./presto \
--server https://presto-coordinator.example.com:8443 \
--keystore-path /tmp/presto.jks \
--keystore-password password \
--truststore-path /tmp/presto_truststore.jks \
--truststore-password password \
--catalog <catalog> \
--schema <schema> \
--user <LDAP user> \
--password
选项 |
描述 |
---|---|
|
Presto 协调器的地址和端口。端口必须设置为 Presto 协调器监听 HTTPS 连接的端口。Presto CLI 不支持在使用 LDAP 身份验证时使用 |
|
将用于保护 TLS 的 Java 密钥库文件的路径。 |
|
密钥库的密码。这必须与您创建密钥库时指定的密码匹配。 |
|
用于保护 TLS 的 Java 信任库文件的路径。 |
|
信任库的密码。这必须与创建信任库时指定的密码匹配。 |
|
LDAP 用户名。对于 Active Directory,这应该是您的 |
|
提示输入 |
故障排除¶
Java 密钥库文件验证¶
使用 Java 密钥库文件验证 验证密钥库文件的密码并查看其内容。
Presto CLI 的 SSL 调试¶
如果您在运行 Presto CLI 时遇到任何与 SSL 相关的错误,可以使用 -Djavax.net.debug=ssl
参数以调试模式运行 CLI。您应该使用 Presto CLI 可执行 jar 文件来启用此功能。例如
java -Djavax.net.debug=ssl \
-jar \
presto-cli-<version>-executable.jar \
--server https://coordinator:8443 \
<other_cli_arguments>
常见的 SSL 错误¶
java.security.cert.CertificateException: No subject alternative names present¶
当 Presto 协调器的证书无效且不包含您在 CLI 的 --server
参数中提供的 IP 时,会看到此错误。您需要使用添加的适当 SAN 重新生成协调器的 SSL 证书。
当 https://
在 URL 中使用 IP 地址而不是协调器证书中包含的域,并且证书不包含将匹配的 IP 地址作为备用属性的 SAN 参数时,需要向此证书添加 SAN。