

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon EMR の Presto に LDAP 認証を使用する
<a name="emr-presto-ldap"></a>

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

**Topics**
+ [ステップ 1: LDAP サーバーに関する情報を収集し、サーバー証明書を Amazon S3 にコピーする](#emr-presto-ldap-server-prereq)
+ [ステップ 2: セキュリティ設定をセットアップする](#emr-presto-ldap-seccfg)
+ [ステップ 3: LDAP 用の Presto プロパティで設定 JSON を作成する](#emr-presto-ldap-prestoconfig)
+ [ステップ 4: LDAP サーバー証明書をコピーするスクリプトを作成し、Amazon S3 にアップロードする](#emr-presto-ldap-servercert)
+ [ステップ 5: クラスターを作成する](#emr-presto-ldap-createcluster)

## ステップ 1: LDAP サーバーに関する情報を収集し、サーバー証明書を Amazon S3 にコピーする
<a name="emr-presto-ldap-server-prereq"></a>

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

### LDAP サーバーの IP アドレスまたはホスト名
<a name="w2aac60c39c13b7b5"></a>

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 を作成する](#emr-presto-ldap-prestoconfig) のカスタムポートを置き換えます。ファイアウォールやセキュリティグループにより、ポート 636 (またはカスタムポート) およびポート 8446 (またはカスタムポート) でインバウンドおよびアウトバウンドトラフィックが許可されることを確認します。これは内部クラスター通信に使用されます。

### LDAP サーバー証明書
<a name="w2aac60c39c13b7b7"></a>

証明書ファイルを Amazon S3 の安全な場所にアップロードする必要があります。詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[S3 バケットにファイルとフォルダをアップロードする方法](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)」を参照してください。クラスターの起動時に、この証明書を Amazon S3 からクラスター内の各ノードにコピーするブートストラップアクションを作成します。「[ステップ 4: LDAP サーバー証明書をコピーするスクリプトを作成し、Amazon S3 にアップロードする](#emr-presto-ldap-servercert)」で、証明書の例は *s3://amzn-s3-demo-bucket/ldap\$1server.crt* です。

### 匿名バインド用の LDAP サーバーの設定
<a name="w2aac60c39c13b7b9"></a>

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](https://linux.die.net/man/1/ldapwhoami) コマンドを使用します。

  ```
  ldapwhoami -x -H ldaps://LDAPServerHostNameOrIPAddress
  ```

  匿名バインドが許可されない場合、コマンドの出力は次のようになります。

  ```
  ldap_bind: Inappropriate authentication (48)
  additional info: anonymous bind disallowed
  ```

**アカウントに、シンプルな認証を使用する LDAP サーバーへのアクセス権限があることを確認するには**
+ 次の例に示すように、Linux クライアントから [ldapwhoami](https://linux.die.net/man/1/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 を作成する](#emr-presto-ldap-prestoconfig) の設定例には、わかりやすくするためにこのアカウントが含まれています。ただし、5.10.0 の例は例外で、サポートされていません。LDAP サーバーが匿名バインドを使用する場合は、`internal-communication.authentication.ldap.user` と `internal-communication.authentication.ldap.password` の名前と値のペアを削除します。

### Presto ユーザーの LDAP 識別名 (DN)
<a name="w2aac60c39c13b7c11"></a>

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、 を実際のユーザー ID (UID) `${USER}`に置き換えるには、Fn::Sub 関数を使用する必要があります。詳細については、「*AWS CloudFormation ユーザーガイド*」の「[Fn::Sub](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-sub.html)」トピックを参照してください。

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

## ステップ 2: セキュリティ設定をセットアップする
<a name="emr-presto-ldap-seccfg"></a>

転送時の暗号化を有効にして、セキュリティ設定を作成します。詳細については、「*Amazon EMR 管理ガイド*」の「[セキュリティ設定を作成する](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-create-security-configuration.html)」を参照してください。転送時の暗号化を設定する際に指定する暗号化アーティファクトは、Presto のノード間の内部通信を暗号化するために使用されます。詳細については、「[伝送中のデータの暗号化のための証明書を提供する](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-encryption-enable.html#emr-encryption-certificates)」を参照してください。LDAP サーバー証明書は、Presto サーバーへのクライアント接続を認証するために使用されます。

## ステップ 3: LDAP 用の Presto プロパティで設定 JSON を作成する
<a name="emr-presto-ldap-prestoconfig"></a>

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

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

**Example Amazon EMR 6.1.0 以降で PrestoSQL (Trino) を使用**  
次の例では、[ステップ 1: LDAP サーバーに関する情報を収集し、サーバー証明書を Amazon S3 にコピーする](#emr-presto-ldap-server-prereq) の LDAP ホスト名を使用して、バインドのために LDAP サーバーに対して認証を行います。2 つのユーザーバインドパターンが指定され、それにより、`admins` OU 内のユーザーと LDAP サーバーの `datascientists` OU は、ユーザーとして Trino サーバーへの認証の対象となります。バインドパターンはコロン (`:`) で区切られます。  
Amazon EMR バージョン 6.4.0 以降では、PrestoSQL ではなく、新しい名称の Trino を使用します。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"
      }
   }
]
```

**Example Amazon EMR 5.16.0 以降**  
次の例では、LDAP ユーザー ID とパスワード、および「[ステップ 1: LDAP サーバーに関する情報を収集し、サーバー証明書を Amazon S3 にコピーする](#emr-presto-ldap-server-prereq)」の 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"
                }
        }]
```

**Example 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"
                }
        }]
```

**Example 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 にアップロードする
<a name="emr-presto-ldap-servercert"></a>

クラスターの各ノードに証明書ファイルをコピーするスクリプトを作成し、キーストアに追加します。テキストエディタを使用してスクリプトを作成し、保存した後、Amazon S3 にアップロードします。「[ステップ 5: クラスターを作成する](#emr-presto-ldap-createcluster)」では、スクリプトファイルは *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: クラスターを作成する
<a name="emr-presto-ldap-createcluster"></a>

クラスターを作成するときは、Presto と、Amazon EMR でインストールする他のアプリケーションを選択します。次の例では、JSON 内で設定分類プロパティを参照していますが、インラインで設定分類を指定することもできます。

**Amazon EMR コンソールを使用して LDAP 認証により Presto クラスターを作成するには**

1. 新しい Amazon EMR コンソールに移動し、サイドナビゲーションから **[古いコンソールに切り替え]** を選択します。古いコンソールに切り替えたときの動作の詳細については、「[Using the old console](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html#console-opt-in)」を参照してください。

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

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

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

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

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

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

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

1. [**認証と暗号化**] を選択し、「**」で作成した [**セキュリティ設定[ステップ 2: セキュリティ設定をセットアップする](#emr-presto-ldap-seccfg)] を選択します。

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

**を使用して LDAP 認証で Presto クラスターを作成するには AWS CLI**
+ `aws emr create-cluster` コマンドを使用します。少なくとも、Presto アプリケーションと、前のステップで作成した Presto 設定分類、ブートストラップスクリプト、およびセキュリティ設定を指定します。次の例では、コマンドを実行するのと同じディレクトリに JSON ファイルとして保存されている設定ファイルを参照します。一方、ブートストラップスクリプトは、Amazon S3 に保存する必要があります。次の例では `s3://amzn-s3-demo-bucket/LoadLDAPCert.sh` を使用しています。
**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。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
  ```