Amazon EMR の Presto に LDAP 認証を使用する - Amazon EMR

Amazon EMR の Presto に LDAP 認証を使用する

このセクションのステップに従って、LDAP を設定します。例および詳細へのリンクについては、各ステップを参照してください。

ステップ 1: LDAP サーバーに関する情報を収集し、サーバー証明書を Amazon S3 にコピーする

LDAP 認証を設定するには、LDAP サーバーから次のセクションの情報と項目が必要になります。

LDAP サーバーの IP アドレスまたはホスト名

Amazon EMR マスターノードの Presto コーディネーターは、指定された IP アドレスまたはホスト名で LDAP サーバーに到達できる必要があります。デフォルトでは、Presto はポート 636 経由で LDAPS を使用して LDAP サーバーと通信します。LDAP 実装でカスタムポートが必要になる場合は、Amazon EMR 5.16.0 以降で ldap.url プロパティを使用するか、以前のバージョンで authentication.ldap.url を使用してレポートを指定できます。「636」の presto-config の設定分類の例に示すように、ステップ 3: LDAP 用の Presto プロパティで設定 JSON を作成する のカスタムポートを置き換えます。ファイアウォールやセキュリティグループにより、ポート 636 (またはカスタムポート) およびポート 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 で匿名バインドが無効になっている場合は、LDAP サーバーにバインドし、PrestoDB サーバーが接続を確立できるようにするアクセス権限があるアカウントのユーザー ID (UID) とパスワードが必要です。UID とパスワードは、internal-communication.authentication.ldap.user 分類設定の internal-communication.authentication.ldap.password および presto-config プロパティを使用して指定します。Amazon 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: 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 を指定します。

注記

AWS CloudFormation を使用する場合、Fn::Sub 関数を使用して ${USER} を実際のユーザー ID (UID) に置き換える必要があります。詳細については、「AWS CloudFormation ユーザーガイド」の「Fn::Sub」トピックを参照してください。

Amazon EMR 5.10.0 を使用する場合、このようなパターンを 1 つだけ指定できます。Amazon EMR 5.11.0 以降を使用して、複数のパターンをコロン (:) で区切って指定できます。Presto に対して認証を試みるユーザーは最初のパターンと比較されてから、2 番目のパターンに比較され、以降も同様に比較されます。例については、「ステップ 3: LDAP 用の Presto プロパティで設定 JSON を作成する」を参照してください。

ステップ 2: セキュリティ設定をセットアップする

転送時の暗号化を有効にして、セキュリティ設定を作成します。詳細については、「Amazon EMR 管理ガイド」の「セキュリティ設定を作成する」を参照してください。転送時の暗号化を設定する際に指定する暗号化アーティファクトは、Presto のノード間の内部通信を暗号化するために使用されます。詳細については、「伝送中のデータの暗号化のための証明書を提供する」を参照してください。LDAP サーバー証明書は、Presto サーバーへのクライアント接続を認証するために使用されます。

ステップ 3: LDAP 用の Presto プロパティで設定 JSON を作成する

LDAP 用の Presto プロパティを設定するには、presto-config 設定分類を使用します。presto-config の形式と内容は、Amazon EMR のリリースバージョンと Presto のインストール済み環境 (PrestoDB または Trino) によって若干異なります。設定の違いの例については、このセクションの後半で示します。詳細については、「アプリケーションの設定」を参照してください。

以下のステップは、JSON データを MyPrestoConfig.json ファイルに保存することを前提としています。コンソールを使用する場合、Amazon S3 の安全な場所にファイルをアップロードし、クラスターを作成するときに参照できるようにします。AWS CLI を使用する場合は、ファイルをローカルに参照できます。

例 Amazon EMR 6.1.0 以降で PrestoSQL (Trino) を使用

次の例では、ステップ 1: LDAP サーバーに関する情報を収集し、サーバー証明書を Amazon S3 にコピーする の LDAP ホスト名を使用して、バインドのために LDAP サーバーに対して認証を行います。2 つのユーザーバインドパターンが指定され、それにより、admins OU 内のユーザーと LDAP サーバーの datascientists OU は、ユーザーとして Trino サーバーへの認証の対象となります。バインドパターンはコロン (:) で区切られます。

Amazon EMR バージョン 6.4.0 以降では、PrestoSQL ではなく、新しい名称の Trino を使用します。Trino を使用する場合、以下の設定分類で prestosql-configtrino-config に置き換え、prestosql-password-authenticatortrino-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" } } ]
例 Amazon EMR 5.16.0 以降

次の例では、LDAP ユーザー ID とパスワード、および「ステップ 1: LDAP サーバーに関する情報を収集し、サーバー証明書を Amazon S3 にコピーする」の LDAP ホスト名を使用して、バインドのために LDAP サーバーに対して認証を行います。2 つのユーザーバインドパターンが指定され、それにより、admins OU 内のユーザーと LDAP サーバーの datascientists 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 は匿名バインドのみをサポートするため、これらのエントリは省略されます。さらに、指定できるバインドパターンは 1 つのみです。

[{ "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 内で設定分類プロパティを参照していますが、インラインで設定分類を指定することもできます。

Amazon EMR コンソールを使用して LDAP 認証により Presto クラスターを作成するには
  1. 新しい Amazon EMR コンソールに移動し、サイドナビゲーションから [古いコンソールに切り替え] を選択します。古いコンソールに切り替えたときの動作の詳細については、「Using the old console」を参照してください。

  2. [Create cluster (クラスターの作成)]、[Go to advanced options (詳細オプションに移動する)] の順に選択します。

  3. Presto と、Amazon EMR でインストールする他のアプリケーションを選択し、[ソフトウェア設定] で、使用する Amazon EMR の [リリース] を選択します。LDAP 認証は Amazon EMR 5.10.0 以降でのみサポートされます。

  4. [Edit software settings] (ソフトウェア設定の編集) で [Load JSON from S3] (S3 からの JSON のロード) を選択し、「ステップ 3: LDAP 用の Presto プロパティで設定 JSON を作成する」で作成した JSON 設定ファイルの Amazon S3 の場所を入力し、[Next] (次へ) を選択します。

  5. クラスターハードウェアおよびネットワークを設定し、[次へ] を選択します。

  6. [ブートストラップアクション] を選択します。[ブートストラップアクションを追加する] で [カスタムアクション]、[設定と追加] の順に選択します。

  7. ブートストラップアクションの [名前] を入力し、「ステップ 4: LDAP サーバー証明書をコピーするスクリプトを作成し、Amazon S3 にアップロードする」で作成した [スクリプトの場所] を入力 (例: s3://amzn-s3-demo-bucket/LoadLDAPCert.sh) してから、[追加] を選択します。

  8. [汎用オプション]、[タグ]、[追加のオプション] で、アプリケーションに最適な設定を選択し、[次へ] を選択します。

  9. [認証と暗号化] を選択し、「」で作成した [セキュリティ設定ステップ 2: セキュリティ設定をセットアップする] を選択します。

  10. アプリケーションに最適な他のセキュリティオプションを選択し、[クラスターの作成] を選択します。

AWS CLI を使用して LDAP 認証により Presto クラスターを作成するには
  • 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