LDAP認証¶
Presto は、Presto CLI、JDBC ドライバ、ODBC ドライバなどのクライアントに対して、HTTPS 経由でフロントエンド LDAP 認証を有効にするように設定できます。現在、サポートされているのは、ユーザー名とパスワードを含む単純な LDAP 認証メカニズムのみです。Presto クライアントはユーザー名とパスワードを Coordinator に送信し、Coordinator は外部 LDAP サービスを使用してこれらの資格情報を検証します。
Presto で LDAP 認証を有効にするには、Presto Coordinator で設定を変更します。ワーカーの設定を変更する必要はありません。クライアントから Coordinator への通信のみが認証されます。ただし、SSL/TLS を使用して Presto ノード間の通信を保護する場合は、セキュアな内部通信 を設定してください。
Presto サーバー設定¶
環境設定¶
セキュアLDAP¶
Presto にはセキュアLDAP (LDAPS) が必要なので、LDAPサーバーでTLSが有効になっていることを確認してください。
Presto Coordinator での TLS 設定¶
TLS接続を保護するために、LDAPサーバーのTLS証明書をPresto CoordinatorのデフォルトのJava Truststoreにインポートする必要があります。証明書`ldap_server.crt
`をCoordinatorのTruststoreにインポートするには、次の`keytool`コマンドの例を使用できます。
$ keytool -import -keystore <JAVA_HOME>/jre/lib/security/cacerts -trustcacerts -alias ldap_server -file ldap_server.crt
これに加えて、Presto CoordinatorへのアクセスはHTTPSで行う必要があります。これは、CoordinatorでTLS用のJava Keystoreファイルを作成することで行うことができます。
Presto Coordinator ノード設定¶
Presto CoordinatorでLDAP認証とHTTPSを使用するように設定する前に、環境に以下の変更を加える必要があります。
Presto 設定ファイルにも変更を加える必要があります。LDAP 認証は、Coordinator で 2 つの部分で設定されます。最初の部分は、Coordinator の config.properties
ファイルで HTTPS サポートとパスワード認証を有効にすることです。2 番目の部分は、LDAP をパスワード認証プラグインとして設定することです。
サーバー設定プロパティ¶
Coordinator の 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 Coordinator のパスワード認証を有効にします。 |
|
Presto Coordinator の HTTPS アクセスを有効にします。 |
|
HTTPS サーバーポート。 |
|
TLS のセキュリティ保護に使用される Java Keystore ファイルの場所。 |
|
Keystore のパスワード。これは、Keystore を作成したときに指定したパスワードと一致する必要があります。 |
|
HTTP 経由で転送された HTTPS リクエストを安全なものとして扱うことを有効にします。転送されたリクエストで |
パスワード認証設定¶
LDAP を使用するようにパスワード認証を設定する必要があります。Coordinator に 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.group-auth-pattern
プロパティと ldap.user-base-dn
プロパティを設定することにより、グループメンバーシップに基づいてPresto Coordinatorへの接続を許可するユーザーのセットをさらに制限できます。
プロパティ |
説明 |
---|---|
|
サーバーへの接続を試みるユーザーの基本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認証を使用する場合は、Presto CoordinatorへのアクセスはHTTPSで行う必要があります。Presto CLIは、Java KeystoreファイルまたはJava Truststoreのいずれかを使用してTLSを設定できます。
Keystoreファイルを使用する場合は、クライアントマシンにコピーしてTLSの設定に使用できます。Truststoreを使用する場合は、デフォルトのJava Truststoreを使用するか、CLIにカスタムTruststoreを作成できます。本番環境では、自己署名証明書を使用することはお勧めしません。
Presto CLI 実行¶
LDAP認証を必要としないPresto Coordinatorに接続する場合に必要なオプションに加えて、LDAPサポートが有効になっているCLIを呼び出すには、いくつかの追加のコマンドラインオプションが必要です。TLS接続を保護するには、--keystore-*
または--truststore-*
プロパティを使用できます。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 Keystore ファイルの場所。 |
|
Keystore のパスワード。これは、Keystore を作成したときに指定したパスワードと一致する必要があります。 |
|
TLSを保護するために使用されるJava Truststoreファイルの場所。 |
|
Truststoreのパスワード。これは、Truststoreの作成時に指定したパスワードと一致する必要があります。 |
|
LDAPユーザー名。Active Directoryの場合は |
|
|
トラブルシューティング¶
Java Keystoreファイルの検証¶
Java Keystoreファイルの検証を使用して、Keystoreファイルのパスワードを検証し、その内容を表示します。
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を追加する必要があります。