LDAP 身份驗證¶
Presto 可以設定為啟用透過 HTTPS 針對用戶端(例如 Presto CLI 或 JDBC 和 ODBC 驅動程式)的前端 LDAP 身份驗證。目前僅支援涉及使用者名稱和密碼的簡單 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
除此之外,應透過 HTTPS 存取 Presto 協調器。您可以在協調器上建立 用於 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。由於 Presto 只允許安全 LDAP,因此 URL 協定必須是 |
|
此屬性可用來指定密碼驗證的 LDAP 使用者繫結字串。此屬性必須包含 |
根據 LDAP 伺服器實作類型,ldap.user-bind-pattern
屬性可以使用如下所述的方式。
Active Directory¶
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 身份驗證屬性之外,您還可以透過設定選用的 ldap.group-auth-pattern
和 ldap.user-base-dn
屬性,進一步限制允許連線至 Presto 協調器的使用者集。
屬性 |
描述 |
---|---|
|
嘗試連線至伺服器的使用者的基本 LDAP 識別名稱。範例: |
|
此屬性用來指定 LDAP 群組成員資格授權的 LDAP 查詢。此查詢會針對 LDAP 伺服器執行,如果成功,則會授權使用者。此屬性必須包含 |
根據 LDAP 伺服器實作類型,ldap.group-auth-pattern
屬性可以使用如下所述的方式。
Active Directory¶
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 驗證時,應透過 HTTPS 連線至 Presto 協調器。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 連線的連接埠。使用 LDAP 驗證時,Presto CLI 不支援為 URL 使用 |
|
將用來保護 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 時,會出現此錯誤。您必須重新產生協調器的 SSL 憑證,並新增適當的 SAN。
在以下情況下,必須將 SAN 新增至此憑證:當 https://
在 URL 中使用 IP 位址,而不是協調器憑證中包含的網域,且憑證不包含具有相符 IP 位址作為替代屬性的 SAN 參數時。