

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

# Amazon EMR での認証に Active Directory または LDAP サーバーを使用する
<a name="ldap"></a>

Amazon EMR リリース 6.12.0 以降では、LDAP over SSL (LDAPS) プロトコルを使用して、企業の ID サーバーとネイティブに統合されるクラスターを起動できます。LDAP (Lightweight Directory Access Protocol) は、データにアクセスして管理する、ベンダーに依存しないオープンなアプリケーションプロトコルです。LDAP は一般的に、Active Directory (AD) や OpenLDAP などのアプリケーションでホストされている企業 ID サーバーに対するユーザー認証に使用されます。このネイティブ統合により、LDAP サーバーを使用して Amazon EMR のユーザーを認証できます。

Amazon EMR LDAP 統合の主な特徴は次のとおりです。
+ ユーザーの代わりに Amazon EMR が、LDAP 認証を使用して認証するようにサポート対象のアプリケーションを設定します。
+ Amazon EMR は、Kerberos プロトコルを使用して、サポート対象のアプリケーションのセキュリティを設定および管理します。ユーザーがコマンドやスクリプトを入力する必要はありません。
+ Hive メタストアデータベースとテーブルの Apache Ranger 認可により、きめ細かなアクセスコントロール (FGAC) が可能になります。詳細については「[Amazon EMR と Apache Ranger を統合する](emr-ranger.md)」を参照してください。
+ クラスターにアクセスするために LDAP 認証情報が必要な場合は、SSH 経由で EMR クラスターにアクセスできるユーザーについて、きめ細かなアクセスコントロール (FGAC) が可能です。

以下のページでは、Amazon EMR LDAP 統合で EMR クラスターを起動するための概念、前提条件、ステップについて説明します。

**Topics**
+ [Amazon EMR での LDAP の概要](ldap-overview.md)
+ [Amazon EMR 用の LDAP コンポーネント](ldap-components.md)
+ [Amazon EMR での LDAP に関するアプリケーションサポートと考慮事項](ldap-considerations.md)
+ [LDAP を備えた EMR クラスターを設定して起動する](ldap-setup.md)
+ [Amazon EMR で LDAP を使用する例](ldap-examples.md)

# Amazon EMR での LDAP の概要
<a name="ldap-overview"></a>

Lightweight Directory Access Protocol (LDAP) は、ネットワーク管理者が企業ネットワーク内のユーザーを認証することでデータへのアクセスを管理および制御するために使用するソフトウェアプロトコルです。LDAP プロトコルは、情報を階層化されたツリーディレクトリ構造で格納します。詳細については、*LDAP.com* の「[Basic LDAP Concepts](https://ldap.com/basic-ldap-concepts/)」を参照してください。

企業ネットワーク内では、多くのアプリケーションが LDAP プロトコルを使用してユーザーを認証することがあります。Amazon EMR LDAP 統合により、EMR クラスターは、セキュリティ設定を追加することで、同じ LDAP プロトコルをネイティブに使用できます。

Amazon EMR がサポートする LDAP プロトコルには、**Active Directory** と **OpenLDAP** という 2 つの主要な実装があります。他の実装も可能ですが、ほとんどが Active Directory または OpenLDAP と同じ認証プロトコルに適合しています。

## Active Directory (AD)
<a name="ldap-ad"></a>

Active Directory (AD) は、Windows ドメインネットワーク向けの Microsoft のディレクトリサービスです。AD はほとんどの Windows Server オペレーティングシステムに組み込まれており、LDAP プロトコルと LDAPS プロトコルを介してクライアントと通信できます。認証のために、Amazon EMR は識別名およびパスワードとしてユーザープリンシパル名 (UPN) を使用し、AD インスタンスとのユーザーバインドを試みます。UPN で使用される標準形式は `username@domain_name` です。

## OpenLDAP
<a name="ldap-openldap"></a>

OpenLDAP は、無料で利用できるオープンソースの LDAP プロトコル実装です。認証のために、Amazon EMR は識別名およびパスワードとして完全修飾ドメイン名 (FQDN) を使用し、OpenLDAP インスタンスとのユーザーバインドを試みます。FQDN で使用される標準形式は `username_attribute=username,LDAP_user_search_base` です。通常、`username_attribute` 値は `uid` で、`LDAP_user_search_base` 値にはユーザーにつながるツリーの属性が含まれます。例えば、`ou=People,dc=example,dc=com`。

LDAP プロトコルの他の無料のオープンソース実装では、通常、ユーザーの識別名は OpenLDAP と同様の FQDN に従います。

# Amazon EMR 用の LDAP コンポーネント
<a name="ldap-components"></a>

以下のコンポーネントを通じて、Amazon EMR およびユーザーが EMR クラスターで直接使用する任意のアプリケーションでの認証に LDAP サーバーを使用することができます。

**シークレットエージェント**  
*シークレットエージェント*は、すべてのユーザーリクエストを認証するクラスター上のプロセスです。シークレットエージェントは、EMR クラスター上のサポート対象のアプリケーションに代わって、LDAP サーバーへのユーザーバインドを作成します。シークレットエージェントは `emrsecretagent` ユーザーとして実行され、`/emr/secretagent/log` ディレクトリにログを書き込みます。これらのログには、各ユーザーの認証リクエストの状態や、ユーザー認証中に発生する可能性のあるエラーに関する詳細が記録されます。

**System Security Services Daemon (SSSD)**  
*SSSD* は LDAP 対応 EMR クラスターの各ノードで実行されるデーモンです。SSSD は UNIX ユーザーを作成して管理し、リモートの企業 ID を各ノードに同期させます。Hive や Spark などの YARN ベースのアプリケーションでは、ユーザーのクエリを実行するすべてのノードにローカル UNIX ユーザーが存在する必要があります。

# Amazon EMR での LDAP に関するアプリケーションサポートと考慮事項
<a name="ldap-considerations"></a>

このトピックでは、サポートされているアプリケーション、サポートされている機能、およびサポートされていない機能を一覧表示します。

## Amazon EMR での LDAP でサポートされているアプリケーション
<a name="ldap-considerations-apps"></a>

**重要**  
Amazon EMR が LDAP でサポートしているアプリケーションは、このページにリストされているアプリケーションだけです。クラスターのセキュリティを確保するために、LDAP を有効にした EMR クラスターを作成する場合は、LDAP 互換アプリケーションのみを含めることができます。サポートされていない他のアプリケーションをインストールしようとすると、Amazon EMR は新しいクラスターに対するリクエストを拒否します。

Amazon EMR リリース 6.12 以降は、以下のアプリケーションとの LDAP 統合をサポートしています。
+ Apache Livy
+ HiveServer2 (HS2) 経由の Apache Hive
+ Trino
+ Presto
+ Hue

次のアプリケーションを EMR クラスターにインストールし、セキュリティニーズを満たすように設定することができます。
+ Apache Spark
+ Apache Hadoop

## Amazon EMR での LDAP でサポートされている機能
<a name="ldap-considerations-features"></a>

LDAP 統合では、次の Amazon EMR 機能を使用できます。

**注記**  
LDAP 認証情報の安全を確保するには、転送時の暗号化を使用して、クラスターに出入りするデータフローを保護する必要があります。転送時の暗号化の詳細については、「[Amazon EMR による保管中と転送中のデータの暗号化](emr-data-encryption.md)」を参照してください。
+ 転送時 (必須) と保管中の暗号化
+ インスタンスグループ、インスタンスフリート、スポットインスタンス
+ 実行中のクラスター上のアプリケーションの再設定
+ EMRFS サーバー側の暗号化 (SSE)

## サポートされていない 機能
<a name="ldap-considerations-limitations"></a>

Amazon EMR の LDAP 統合を使用する場合は、次の制限事項を考慮してください。
+ Amazon EMR は、LDAP が有効になっているクラスターのステップを無効にします。
+ Amazon EMR は、LDAP が有効になっているクラスターのランタイムロールと AWS Lake Formation 統合をサポートしていません。
+ Amazon EMR は、StartTLS を使用した LDAP をサポートしていません。
+ Amazon EMR は、LDAP が有効になっているクラスターでの高可用性モード (複数のプライマリノードを持つクラスター) をサポートしていません。
+ LDAP が有効になっているクラスターのバインド認証情報や証明書をローテーションすることはできません。これらのフィールドのいずれかがローテーションされた場合は、更新されたバインド認証情報または証明書を使用して新しいクラスターを起動することが推奨されます。
+ LDAP では正確な検索ベースを使用する必要があります。LDAP ユーザーとグループの検索ベースは、LDAP 検索フィルターをサポートしていません。

# LDAP を備えた EMR クラスターを設定して起動する
<a name="ldap-setup"></a>

このセクションでは、LDAP 認証で使用するために Amazon EMR を設定する方法について説明します。

**Topics**
+ [Amazon EMR インスタンスロールにアクセス AWS Secrets Manager 許可を追加する](ldap-setup-asm.md)
+ [LDAP 統合用の Amazon EMR セキュリティ設定を作成する](ldap-setup-security.md)
+ [LDAP で認証する EMR クラスターを起動する](ldap-setup-launch.md)

# Amazon EMR インスタンスロールにアクセス AWS Secrets Manager 許可を追加する
<a name="ldap-setup-asm"></a>

Amazon EMR は IAM サービスロールを使用して、ユーザーの代わりにクラスターのプロビジョニングと管理を行うためのアクションを実行します。クラスター EC2 インスタンスのサービスロール (*Amazon EMR の EC2 インスタンスプロファイル*とも呼ばれます) は、Amazon EMR が起動時にクラスター内のすべての EC2 インスタンスに割り当てる特殊なタイプのサービスロールです。

EMR クラスターが Amazon S3 データやその他の AWS のサービスと対話するためのアクセス許可を定義するには、クラスターの起動時に、`EMR_EC2_DefaultRole` ではなくカスタム Amazon EC2 インスタンスプロファイルを定義します。詳細については、「[クラスター EC2 インスタンスのサービスロール (EC2 インスタンスプロファイル)](emr-iam-role-for-ec2.md)」および「[Amazon EMR で IAM ロールをカスタマイズする](emr-iam-roles-custom.md)」を参照してください。

次のステートメントをデフォルトの EC2 インスタンスプロファイルに追加して、Amazon EMR がセッションにタグを付け、LDAP 証明書 AWS Secrets Manager を保存する にアクセスできるようにします。

```
    {
      "Sid": "AllowAssumeOfRolesAndTagging",
      "Effect": "Allow",
      "Action": ["sts:TagSession", "sts:AssumeRole"],
      "Resource": [
        "arn:aws:iam::111122223333:role/LDAP_DATA_ACCESS_ROLE_NAME",
        "arn:aws:iam::111122223333:role/LDAP_USER_ACCESS_ROLE_NAME"
      ]
    },
    {
        "Sid": "AllowSecretsRetrieval",
        "Effect": "Allow",
        "Action": "secretsmanager:GetSecretValue",
        "Resource": [
            "arn:aws:secretsmanager:us-east-1:111122223333:secret:LDAP_SECRET_NAME*",
            "arn:aws:secretsmanager:us-east-1:111122223333:secret:ADMIN_LDAP_SECRET_NAME*"
        ]
    }
```

**注記**  
Secrets Manager のアクセス許可を設定するときに、シークレット名の末尾にワイルドカード文字 `*` を付け忘れると、クラスターリクエストは失敗します。ワイルドカードは、シークレットバージョンを表します。  
ポリシーの範囲は AWS Secrets Manager 、クラスターがインスタンスをプロビジョニングするために必要な証明書のみに制限する必要があります。

# LDAP 統合用の Amazon EMR セキュリティ設定を作成する
<a name="ldap-setup-security"></a>

LDAP 統合で EMR クラスターを起動する前に、「[Amazon EMR コンソールまたは を使用してセキュリティ設定を作成する AWS CLI](emr-create-security-configuration.md)」のステップを使用してクラスターの Amazon EMR セキュリティ設定を作成します。`AuthenticationConfiguration` の下の `LDAPConfiguration` ブロック、または Amazon EMR コンソールの **[セキュリティ設定]** セクションの対応するフィールドで、以下の設定を完了します。

**`EnableLDAPAuthentication`**  
コンソールオプション: **認証プロトコル: LDAP**  
LDAP 統合を使用するには、このオプションを `true` に設定するか、コンソールでクラスターを作成するときに認証プロトコルとして選択します。Amazon EMR コンソールでセキュリティ設定を作成する場合、デフォルトでは `EnableLDAPAuthentication` は `true` です。

**`LDAPServerURL`**  
コンソールオプション: **LDAP サーバーの場所**  
LDAP サーバーの場所 (プレフィックスを含む): `ldaps://location_of_server`

**`BindCertificateARN`**  
コンソールオプション: **LDAP SSL 証明書**  
LDAP サーバーが使用する SSL 証明書に署名するための証明書を含む AWS Secrets Manager ARN。LDAP サーバーがパブリック認証局 (CA) によって署名されている場合は、ARN AWS Secrets Manager に空のファイルを提供できます。Secrets Manager に証明書を保存する方法の詳細については、「[に TLS 証明書を保存する AWS Secrets Manager](emr-ranger-tls-certificates.md)」を参照してください。

**`BindCredentialsARN`**  
コンソールオプション: **LDAP サーバーバインド認証情報**  
LDAP 管理者ユーザーのバインド認証情報を含む AWS Secrets Manager ARN。認証情報は JSON オブジェクトとして保存されます。このシークレットにはキーと値のペアが 1 つしかありません。ペアのキーはユーザー名で、値はパスワードです。例えば、`{"uid=admin,cn=People,dc=example,dc=com": "AdminPassword1"}`。EMR クラスターの SSH ログインを有効にしない限り、このフィールドはオプションです。多くの設定で、Active Directory インスタンスには、SSSD がユーザーを同期できるようにするためのバインド認証情報が必要です。

**`LDAPAccessFilter`**  
コンソールオプション: **LDAP アクセスフィルター**  
認証可能な LDAP サーバー内のオブジェクトのサブセットを指定します。例えば、LDAP サーバー内の `posixAccount` オブジェクトクラスを持つすべてのユーザーにアクセスを許可する場合、アクセスフィルターを `(objectClass=posixAccount)` として定義します。

**`LDAPUserSearchBase`**  
コンソールオプション: **LDAP ユーザー検索ベース**  
LDAP サーバー内のユーザーが属する検索ベース。例えば、`cn=People,dc=example,dc=com`。

**`LDAPGroupSearchBase`**  
コンソールオプション: **LDAP グループ検索ベース**  
LDAP サーバー内のグループが属する検索ベース。例えば、`cn=Groups,dc=example,dc=com`。

**`EnableSSHLogin`**  
コンソールオプション: **SSH ログイン**  
LDAP 認証情報を使用したパスワード認証を許可するかどうかを指定します。このオプションを有効にすることは推奨されません。キーペアは EMR クラスターへのアクセスを可能にする、より安全なルートです。このフィールドはオプションであり、デフォルトは `false` です。

**`LDAPServerType`**  
コンソールオプション: **LDAP サーバータイプ**  
Amazon EMR が接続する LDAP サーバーのタイプを指定します。サポートされているオプションは、Active Directory と OpenLDAP です。その他の LDAP サーバータイプでも機能する可能性はありますが、Amazon EMR では他のサーバータイプを公式にはサポートしていません。詳細については、「[Amazon EMR 用の LDAP コンポーネント](ldap-components.md)」を参照してください。

**`ActiveDirectoryConfigurations`**  
Active Directory サーバータイプを使用するセキュリティ設定に必要なサブブロック。

**`ADDomain`**  
コンソールオプション: **Active Directory ドメイン**  
Active Directory サーバータイプを使用するセキュリティ設定でのユーザー認証用のユーザープリンシパル名 (UPN) の作成に使用されるドメイン名。

## LDAP と Amazon EMR を使用するセキュリティ設定に関する考慮事項
<a name="ldap-setup-security-considerations"></a>
+ Amazon EMR LDAP 統合を使用するセキュリティ設定を作成するには、転送時の暗号化を使用する必要があります。転送時の暗号化については、「[Amazon EMR による保管中と転送中のデータの暗号化](emr-data-encryption.md)」を参照してください。
+ Kerberos 設定を同じセキュリティ設定で定義することはできません。Amazon EMR は、専用の KDC を自動的にプロビジョニングし、この KDC の管理者パスワードを管理します。ユーザーはこの管理者パスワードにアクセスできません。
+ IAM ランタイムロール と を同じセキュリティ設定 AWS Lake Formation で定義することはできません。
+ `LDAPServerURL` の値には `ldaps://` プロトコルが含まれている必要があります。
+ `LDAPAccessFilter` を空にすることはできません。

## Amazon EMR の Apache Ranger 統合で LDAP を使用する
<a name="ldap-setup-ranger"></a>

Amazon EMR の LDAP 統合により、Apache Ranger との統合をさらに進めることができます。LDAP ユーザーを Ranger に取り込むと、それらのユーザーを Apache Ranger ポリシーサーバーに関連付けて Amazon EMR やその他のアプリケーションと統合できるようになります。そのためには、LDAP クラスターで使用するセキュリティ設定の `AuthorizationConfiguration` 内にある `RangerConfiguration` フィールドを定義します。セキュリティ設定の設定方法の詳細については、「[EMR セキュリティ設定を作成する](emr-ranger-security-config.md)」を参照してください。

Amazon EMR で LDAP を使用する場合、Apache Ranger の Amazon EMR 統合で `KerberosConfiguration` を指定する必要はありません。

# LDAP で認証する EMR クラスターを起動する
<a name="ldap-setup-launch"></a>

次のステップを使用して、LDAP または Active Directory を使用する EMR クラスターを起動します。

1. 環境をセットアップします。
   + EMR クラスターのノードが Amazon S3 および と通信できることを確認します AWS Secrets Manager。これらのサービスと通信できるように EC2 インスタンスプロファイルロールを変更する方法の詳細については、「[Amazon EMR インスタンスロールにアクセス AWS Secrets Manager 許可を追加する](ldap-setup-asm.md)」を参照してください。
   + プライベートサブネットで EMR クラスターを実行する場合は、 AWS PrivateLink および Amazon VPC エンドポイントを使用するか、ネットワークアドレス変換 (NAT) を使用して、S3 および Secrets Manager と通信するように VPC を設定する必要があります。詳細については、「*Amazon VPC 入門ガイド*」の「[AWS PrivateLink および VPC エンドポイント](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-services-overview.html)」と「[NAT インスタンス](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html)」を参照してください。
   + EMR クラスターと LDAP サーバーの間にネットワーク接続があることを確認します。EMR クラスターは、ネットワーク経由で LDAP サーバーにアクセスする必要があります。クラスターのプライマリノード、コアノード、およびタスクノードは、LDAP サーバーと通信してユーザーデータを同期します。LDAP サーバーが Amazon EC2 で実行されている場合は、EMR クラスターからのトラフィックを受け入れるように EC2 セキュリティグループを更新します。詳細については、「[Amazon EMR インスタンスロールにアクセス AWS Secrets Manager 許可を追加する](ldap-setup-asm.md)」を参照してください。

1. LDAP 統合用の Amazon EMR セキュリティ設定を作成します。詳細については、「[LDAP 統合用の Amazon EMR セキュリティ設定を作成する](ldap-setup-security.md)」を参照してください。

1. 設定が完了したら、「[Amazon EMR クラスターを起動する](emr-gs.md#emr-getting-started-launch-sample-cluster)」のステップを使用して、以下の設定でクラスターを起動します。
   + Amazon EMR リリース 6.12 以降を選択します。最新の Amazon EMR リリースを使用することが推奨されます。
   + クラスターのアプリケーションには、LDAP をサポートするものだけを指定または選択してください。Amazon EMR で LDAP をサポートするアプリケーションのリストについては、「[Amazon EMR での LDAP に関するアプリケーションサポートと考慮事項](ldap-considerations.md)」を参照してください。
   + 前のステップで作成したセキュリティ設定を適用します。

# Amazon EMR で LDAP を使用する例
<a name="ldap-examples"></a>

[LDAP 統合を使用する EMR クラスターをプロビジョニング](ldap-setup-launch.md)すると、組み込みのユーザー名とパスワードによる認証メカニズムを通じて、任意の[サポート対象のアプリケーション](ldap-considerations.md#ldap-considerations-apps)に LDAP 認証情報を提供できます。このページでは、いくつかの例を示します。

## Apache Hive での LDAP 認証の使用
<a name="ldap-examples-"></a>

**Example - Apache Hive**  
次のコマンド例は、HiveServer2 と Beeline を使用して Apache Hive セッションを開始します。  

```
beeline -u "jdbc:hive2://$HOSTNAME:10000/default;ssl=true;sslTrustStore=$TRUSTSTORE_PATH;trustStorePassword=$TRUSTSTORE_PASS"  -n LDAP_USERNAME -p LDAP_PASSWORD
```

## Apache Livy での LDAP 認証の使用
<a name="ldap-examples-livy"></a>

**Example - Apache Livy**  
次のコマンド例は、cURL を使用して Livy セッションを開始します。`ENCODED-KEYPAIR` は、`username:password` の Base64 エンコード文字列に置き換えてください。  

```
curl -X POST --data '{"proxyUser":"LDAP_USERNAME","kind": "pyspark"}' -H "Content-Type: application/json" -H "Authorization: Basic ENCODED-KEYPAIR" DNS_OF_PRIMARY_NODE:8998/sessions
```

## Presto での LDAP 認証の使用
<a name="ldap-examples-presto"></a>

**Example - Presto**  
次のコマンド例は、Presto CLI を使用して Presto セッションを開始します。  

```
presto-cli --user "LDAP_USERNAME" --password --catalog hive
```
このコマンドを実行した後、プロンプトに LDAP パスワードを入力します。

## Trino での LDAP 認証の使用
<a name="ldap-examples-trino"></a>

**Example - Trino**  
次のコマンド例は、Trino CLI を使用して Trino セッションを開始します。  

```
trino-cli --user "LDAP_USERNAME" --password --catalog hive
```
このコマンドを実行した後、プロンプトに LDAP パスワードを入力します。

## Hue での LDAP 認証の使用
<a name="ldap-examples-hue"></a>

クラスター上に作成した SSH トンネル経由で Hue UI にアクセスすることも、Hue への接続を公開ブロードキャストするようにプロキシサーバーを設定することもできます。Hue はデフォルトでは HTTPS モードで実行されないため、クライアントと Hue UI の間の通信が HTTPS で暗号化されるように、追加の暗号化レイヤーを使用することが推奨されます。これにより、ユーザーの認証情報が誤ってプレーンテキストで公開される可能性が低くなります。

Hue UI を使用するには、ブラウザで Hue UI を開き、LDAP ユーザー名とパスワードを入力してログインします。認証情報が正しければ、Hue はユーザーをログインさせ、サポート対象のすべてのアプリケーションで ID を使用してユーザーを認証します。

## パスワード認証には SSH を使用し、他のアプリケーションには Kerberos チケットを使用する
<a name="ldap-examples-ssh"></a>

**重要**  
EMR クラスターへの SSH 接続でパスワード認証を使用することは推奨されません。

LDAP 認証情報を使用して EMR クラスターに SSH 接続できます。これを行うには、クラスターの起動に使用する Amazon EMR セキュリティ設定で `EnableSSHLogin` 設定を `true` に設定します。次に、起動したら次のコマンドを使用して、クラスターに SSH 接続します。

```
ssh username@EMR_PRIMARY_DNS_NAME
```

このコマンドを実行した後、プロンプトに LDAP パスワードを入力します。

Amazon EMR には、LDAP 認証情報を直接受け付けないサポート対象のアプリケーションで使用する Kerberos キータブファイルとチケットをユーザーが生成できる、クラスター上で使用するスクリプトが含まれています。これらのアプリケーションには、`spark-submit`、Spark SQL、PySpark などがあります。

「`ldap-kinit`」と入力し、プロンプトに従います。認証が成功すると、Kerberos キータブファイルと有効な Kerberos チケットがホームディレクトリに表示されます。Kerberos チケットを使用すると、他の Kerberos 環境と同様にアプリケーションを実行できます。