

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

# チュートリアル: Active Directory ドメインを使用したクロス領域信頼の設定
<a name="emr-kerberos-cross-realm"></a>

クロス領域信頼をセットアップする際、別の Kerberos 領域のプリンシパル (通常はユーザー) が、EMR クラスターのアプリケーションコンポーネントを認証できるようにします。クラスター専用 *KDC (キー配布センター)* は、両方の KDC に存在する*クロス領域のプリンシパル*を使用して、他の KDC で信頼関係を確立します。プリンシパル名とパスワードが正確に一致しています。

クロス領域信頼では、KDC がネットワーク経由で相互に到達し、相互のドメイン名を解決できる必要があります。以下に、必要な接続とドメイン名の解決を行うネットワークステップの例と合わせて、EC2 インスタンスとして実行されている Microsoft AD ドメインコントローラーを使用してクロス領域の信頼関係を確立するステップを示します。KDC 間の必要なネットワークトラフィックを許可するすべてのネットワークのセットアップは許容範囲内です。

必要に応じて、1 つのクラスター上で KDC を使用して Active Directory でクロス領域信頼を確立したら、異なるセキュリティ設定を使用して別のクラスターを作成し、最初のクラスターの KDC を外部 KDC として参照することができます。セキュリティグループ設定およびクラスターのセットアップの例については、「[Active Directory クロス領域信頼を使用した外部のクラスター KDC](emr-kerberos-config-examples.md#emr-kerberos-example-extkdc-ad-trust)」を参照してください。

Kerberos および KDC に対する Amazon EMR サポート、および MIT Kerberos ドキュメントへのリンクの詳細については、「[Amazon EMR での認証に Kerberos を使用する](emr-kerberos.md)」を参照してください。

**重要**  
Amazon EMR は、 とのクロス領域信頼をサポートしていません AWS Directory Service for Microsoft Active Directory。

[ステップ 1: VPC とサブネットをセットアップする](#emr-kerberos-ad-network)

[ステップ 2: Active Directory ドメインコントローラーの起動とインストール](#emr-kerberos-ad-dc)

[ステップ 3: EMR クラスターのドメインにアカウントを追加する](#emr-kerberos-ad-users)

[ステップ 4: Active Directory ドメインコントローラーで受信の信頼を設定する](#emr-kerberos-ad-configure-trust)

[ステップ 5: DHCP オプションセットを使用して VPC DNS サーバーとして Active Directory ドメインコントローラーを指定する](#emr-kerberos-ad-DHCP)

[ステップ 6: Kerberos 認証済みの EMR クラスターを起動する](#emr-kerberos-ad-cluster)

[ステップ 7: HDFS ユーザーを作成して、Active Directory アカウントのクラスターに対するアクセス許可を設定する](#emr-kerberos-ad-hadoopuser)

## ステップ 1: VPC とサブネットをセットアップする
<a name="emr-kerberos-ad-network"></a>

クラスター専用 KDC が Active Directory ドメインコントローラーに到達し、ドメイン名を解決できるように、VPC およびサブネットの作成手順を以下に示します。これらのステップでは、DHCP オプションセットのドメイン名サーバーとして Active Directory ドメインコントローラーを参照し、ドメイン名を解決します。詳細については、「[ステップ 5: DHCP オプションセットを使用して VPC DNS サーバーとして Active Directory ドメインコントローラーを指定する](#emr-kerberos-ad-DHCP)」を参照してください。

KDC と Active Directory ドメインコントローラーは、相互のドメイン名を解決できる必要があります。これにより、Amazon EMR はコンピュータをドメインに参加させ、クラスターインスタンス上で対応する Linux アカウントおよび SSH パラメータを自動的に設定することができます。

Amazon EMR でドメイン名を解決できない場合は、Active Directory ドメインコントローラーの IP アドレスを使用して信頼を参照できます。ただし、Linux アカウントの追加、クラスター専用 KDC への対応するプリンシパルの追加、SSH の設定は手動で行う必要があります。

**VPC とサブネットをセットアップするには**

1. 1 つのパブリックサブネットを持つ Amazon VPC を作成する 詳細については、「*Amazon VPC 入門ガイド*」の「[ステップ 1: VPC の作成](https://docs.aws.amazon.com/AmazonVPC/latest/GettingStartedGuide/getting-started-ipv4.html#getting-started-create-vpc)」を参照してください。
**重要**  
Microsoft Active Directory ドメインコントローラーを使用している場合は、すべての IPv4 アドレスが 9 文字未満 (例: 10.0.0.0/16) になるように EMR クラスターの CIDR ブロックを選択します。これは、クラスターコンピュータの DNS 名は、コンピュータが Active Directory ディレクトリに参加するときに使用されます。 は IPv4 アドレスに基づいて [DNS ホスト名](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-hostnames)を AWS 割り当て、IP アドレスが長くなると DNS 名が 15 文字を超える可能性があるためです。Active Directory には、結合されるコンピュータ名の登録に 15 文字の制限があるため、長い場合は切り捨てられます。これが原因で、予測できないエラーが発生することがあります。

1. VPC に割り当てられているデフォルトの DHCP オプションセットを削除します。詳細については、「[DHCP オプションを使用しないように VPC を変更する](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html#DHCP_Use_No_Options)」を参照してください。Active Directory ドメインコントローラーを DNS サーバーとして指定する新しい設定を後で追加します。

1. VPC に対して DNS サポートが有効になっていること、つまり、DNS ホスト名および DNS 解決がいずれも有効であることを確認します。デフォルトでは有効化されています。詳細については、「[VPC の DNS サポートを更新する](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-updating)」を参照してください。

1. VPC にインターネットゲートウェイがアタッチされていることを確認します。この状態がデフォルトです。詳細については、「[インターネットゲートウェイの作成とアタッチ](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html#Add_IGW_Attach_Gateway)」を参照してください。
**注記**  
VPC 向けに新しいドメインコントローラーを確立しているため、この例ではインターネットゲートウェイが使用されます。お客様のアプリケーションでは、インターネットゲートウェイが必要ではない場合があります。唯一の要件は、クラスター専用 KDC が Active Directory ドメインコントローラーにアクセスできることです。

1. カスタムルートテーブルを作成して、インターネットゲートウェイをターゲットにしたルートを追加し、サブネットにアタッチします。詳細については、「[カスタムルートテーブルを作成する](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html#Add_IGW_Routing)」を参照してください。

1. ドメインコントローラーで EC2 インスタンスを起動する場合は、静的なパブリック IPv4 アドレスを使用して RDP で接続する必要があります。これを行う最も簡単な方法は、サブネットを自動割り当てパブリック IPv4 アドレスに設定することです。サブネットを作成する際、これはデフォルトで設定されていません。詳細については、「[サブネットのパブリック IPv4 アドレス属性を変更する](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip)」を参照してください。インスタンスを起動する際、オプションでそのアドレスを割り当てることができます。詳細については、「[インスタンス起動時のパブリック IPv4 アドレスの割り当て](https://docs.aws.amazon.com/vpc/latest/userguide/using-instance-addressing.html#public-ip-addresses)」を参照してください。

1. 終了したら、VPC とサブネット ID を書きとめておきます。後に Active Directory ドメインコントローラーおよびクラスターを起動する際に使用します。

## ステップ 2: Active Directory ドメインコントローラーの起動とインストール
<a name="emr-kerberos-ad-dc"></a>

1. Microsoft Windows Server 2016 Base の AMI に基づき、EC2 インスタンスを起動します。m4.xlarge またはそれ以上のインスタンスタイプの使用をお勧めします。詳細については、「*Amazon EC2 ユーザーガイド*」の「[AWS Marketplace インスタンスを起動する](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/launch-marketplace-console.html)」を参照してください。

1. EC2 インスタンスに関連付けられているセキュリティグループのグループ ID をメモします。この情報は「[ステップ 6: Kerberos 認証済みの EMR クラスターを起動する](#emr-kerberos-ad-cluster)」に必要です。{{sg-012xrlmdomain345}} を使用します。または、EMR クラスターとこのインスタンス用に、それらの間のトラフィックを許可する異なるセキュリティグループを指定できます。詳細については「*Amazon EC2 ユーザーガイド*」の「[EC2 インスタンスの Amazon EC2 セキュリティグループ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html)」を参照してください。

1. RDP を使用して EC2 インスタンスに接続します。詳細については、「*Amazon EC2 ユーザーガイド*」の「[Windows インスタンスへの接続](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/connecting_to_windows_instance.html)」を参照してください。

1. サーバーで Active Directory ドメインサービスの役割をインストールして設定するには、**[Server Manager]** (サーバー マネージャ) を起動します。サーバーをドメインコントローラーに昇格させ、ドメイン名 (ここでは `{{ad.domain.com}}`) を割り当てます。後に EMR セキュリティ設定およびクラスターを作成する際に必要になるため、ドメイン名を書きとめておきます。Active Directory を初めてセットアップする場合は、「[How to set up Active Directory (AD) in Windows Server 2016](https://ittutorials.net/microsoft/windows-server-2016/setting-up-active-directory-ad-in-windows-server-2016/)」の手順に従います。

   完了したらインスタンスが再起動されます。

## ステップ 3: EMR クラスターのドメインにアカウントを追加する
<a name="emr-kerberos-ad-users"></a>

Active Directory ドメインコントローラーに RDP 接続し、各クラスターユーザー向けに Active Directory ユーザーおよびコンピュータにユーザーアカウントを作成します。詳細については、*Microsoft Learn* サイトの「[Create a User Account in Active Directory Users and Computers](https://technet.microsoft.com/en-us/library/dd894463(v=ws.10).aspx)」を参照してください。各ユーザーの [**User logon name (ユーザーのログオン名)**] を書きとめておきます。これらは、後にクラスターを構成する際に必要になります。

さらに、コンピュータをドメインに参加させるのに十分な権限を持つユーザーアカウントを作成します。クラスターを作成する際、このアカウントを指定します。Amazon EMR は、このアカウントを使用して、クラスターインスタンスをドメインに結合します。このアカウントとパスワードは「[ステップ 6: Kerberos 認証済みの EMR クラスターを起動する](#emr-kerberos-ad-cluster)」で指定します。コンピュータ参加権限をアカウントに委任するには、参加権限を持つグループを作成し、ユーザーをそのグループに割り当てることが推奨されます。手順については、「*AWS Directory Service 管理ガイド*」の「[ディレクトリ結合権限の委任](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_join_privileges.html)」を参照してください。

## ステップ 4: Active Directory ドメインコントローラーで受信の信頼を設定する
<a name="emr-kerberos-ad-configure-trust"></a>

以下のコマンド例では、Active Directory に信頼を作成します。一方向、着信、非推移に加え、クラスター専用 KDC を使用した領域信頼があります。クラスターの領域では例として `{{EC2.INTERNAL}}` を使用します。{{KDC-FQDN}} は、KDC をホストしている Amazon EMR プライマリノードでリストされている **[パブリック DNS]** の名前に置き換えてください。`passwordt` パラメータでは、[**cross-realm principal password (クロス領域プリンシパルのパスワード)**] を指定します。このパスワードは、クラスター作成時に、クラスターの [**realm (領域)**] と合わせて指定したものです。この領域名は、クラスターの `us-east-1` のデフォルトのドメイン名から取得されます。`Domain` は Active Directory ドメインで信頼を作成する場合、規則により小文字で表記されます。この例では `{{ad.domain.com}}` を使用します

管理者権限で Windows コマンドプロンプトを開き、以下のコマンドを入力して、Active Directory ドメインコントローラーで信頼関係を作成します。

```
C:\Users\Administrator> ksetup /addkdc {{EC2.INTERNAL}} {{KDC-FQDN}}
C:\Users\Administrator> netdom trust {{EC2.INTERNAL}} /Domain:{{ad.domain.com}} /add /realm /passwordt:{{MyVeryStrongPassword}}
C:\Users\Administrator> ksetup /SetEncTypeAttr EC2.INTERNAL AES256-CTS-HMAC-SHA1-96
```

## ステップ 5: DHCP オプションセットを使用して VPC DNS サーバーとして Active Directory ドメインコントローラーを指定する
<a name="emr-kerberos-ad-DHCP"></a>

これで、Active Directory ドメインコントローラーが設定されたため、VPC 内で名前解決できるように、VPC を設定してドメイン名サーバーとして使用する必要があります。これを行うには、DHCP オプションセットをアタッチします。**[Domain name]** (ドメイン名) をクラスターのドメイン名に指定します (例: クラスターが us-east-1 にある場合は `ec2.internal`、他のリージョンにある場合は `{{region}}.compute.internal`)。[**Domain name servers (ドメインネームサーバー)**] で、Active Directory ドメインコントローラーの IP アドレス (クラスターから到達可能であることが必須) を最初のエントリとし、続いて [**AmazonProvidedDNS**] (例: **{{xx.xx.xx.xx}},AmazonProvidedDNS**) を指定する必要があります。詳細については、「[DHCP オプションセットを変更する](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html#DHCPOptions)」を参照してください。

## ステップ 6: Kerberos 認証済みの EMR クラスターを起動する
<a name="emr-kerberos-ad-cluster"></a>

1. Amazon EMR で、前のステップで作成した Active Directory ドメインコントローラーを指定するセキュリティ設定を作成します。次にコマンドの例を示します。ドメイン (`{{ad.domain.com}}`) を、「[ステップ 2: Active Directory ドメインコントローラーの起動とインストール](#emr-kerberos-ad-dc)」で指定したドメイン名に置き換えます。

   ```
   aws emr create-security-configuration --name MyKerberosConfig \
   --security-configuration '{
     "AuthenticationConfiguration": {
       "KerberosConfiguration": {
         "Provider": "ClusterDedicatedKdc",
         "ClusterDedicatedKdcConfiguration": {
           "TicketLifetimeInHours": {{24}},
           "CrossRealmTrustConfiguration": {
             "Realm": "{{AD.DOMAIN.COM}}",
             "Domain": "{{ad.domain.com}}",
             "AdminServer": "{{ad.domain.com}}",
             "KdcServer": "{{ad.domain.com}}"
           }
         }
       }
     }
   }'
   ```

1. 以下の属性を使用してクラスターを作成します。
   + `--security-configuration` オプションを使用して、作成したセキュリティ設定を指定します。この例では {{MyKerberos Config}} を使用します。
   + `--ec2-attributes option` の `SubnetId` プロパティを使用して、「[ステップ 1: VPC とサブネットをセットアップする](#emr-kerberos-ad-network)」で作成したサブネットを指定します。この例では {{step1-subnet}} を使用します。
   + `--ec2-attributes` オプションの `AdditionalMasterSecurityGroups` と `AdditionalSlaveSecurityGroups` を使用して、「[ステップ 2: Active Directory ドメインコントローラーの起動とインストール](#emr-kerberos-ad-dc)」の AD ドメインコントローラーに関連付けられているセキュリティグループが、クラスターのプライマリノード、コアノード、タスクノードにも関連付けられるように指定します。この例では {{sg-012xrlmdomain345}} を使用します。

   `--kerberos-attributes` を使用して、以下のクラスター固有の Kerberos 属性を指定します。
   + Active Directory ドメインコントローラーの設定時に指定したクラスターの領域。
   + 「[ステップ 4: Active Directory ドメインコントローラーで受信の信頼を設定する](#emr-kerberos-ad-configure-trust)」で `passwordt` として指定したクロス領域信頼プリンシパルのパスワード。
   + `KdcAdminPassword` は、クラスター専用 KDC を管理するために使用します。
   + 「[ステップ 3: EMR クラスターのドメインにアカウントを追加する](#emr-kerberos-ad-users)」で作成したコンピュータ結合権限を持つ Active Directory アカウントのユーザーログオン名およびパスワード。

   次の例では、Kerberos 認証済みクラスターを起動します。

   ```
   aws emr create-cluster --name "{{MyKerberosCluster}}" \
   --release-label emr-5.10.0 \
   --instance-type {{m5.xlarge}} \
   --instance-count {{3}} \
   --ec2-attributes InstanceProfile={{EMR_EC2_DefaultRole}},KeyName={{MyEC2KeyPair}},\
   SubnetId={{step1-subnet}}, AdditionalMasterSecurityGroups={{sg-012xrlmdomain345}},
   AdditionalSlaveSecurityGroups={{sg-012xrlmdomain345}}\
   --service-role EMR_DefaultRole \
   --security-configuration {{MyKerberosConfig}} \
   --applications Name={{Hadoop}} Name={{Hive}} Name={{Oozie}} Name={{Hue}} Name={{HCatalog}} Name={{Spark}} \
   --kerberos-attributes Realm={{EC2.INTERNAL}},\
   KdcAdminPassword={{MyClusterKDCAdminPwd}},\
   ADDomainJoinUser={{ADUserLogonName}},ADDomainJoinPassword={{ADUserPassword}},\
   CrossRealmTrustPrincipalPassword={{MatchADTrustPwd}}
   ```

## ステップ 7: HDFS ユーザーを作成して、Active Directory アカウントのクラスターに対するアクセス許可を設定する
<a name="emr-kerberos-ad-hadoopuser"></a>

Active Directory で信頼関係を設定すると、Amazon EMR は各 Active Directory アカウントのクラスターで Linux ユーザーを作成します。例えば、Active Directory のユーザーログオン名が `LiJuan` の場合、Linux アカウントは `lijuan` になります。Active Directory のユーザー名には、大文字を含めることができますが、Linux では Active Directory のこの区別は採用されません。

ユーザーがクラスターにログインして Hadoop ジョブを実行できるようにするには、Linux アカウント向けに HDFS ユーザーディレクトリを追加し、そのディレクトリの所有権を各ユーザーに付与します。そのためには、Amazon S3 に保存されているスクリプトをクラスターのステップとして実行することをお勧めします。あるいは、以下のスクリプトのコマンドをプライマリノードのコマンドラインから実行することもできます。Hadoop ユーザーとして SSH 経由でプライマリノードに接続するには、クラスターの作成時に指定した EC2 キーペアを使用します。詳細については、「[Amazon EMR の SSH 認証情報に EC2 キーペアを使用する](emr-plan-access-ssh.md)」を参照してください。

スクリプト ({{AddHDFSUsers.sh}}) を実行するクラスターにステップを追加するには、以下のコマンドを実行します。

```
aws emr add-steps --cluster-id {{<j-2AL4XXXXXX5T9>}} \
--steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,\
Jar=s3://{{region}}.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://{{amzn-s3-demo-bucket}}/AddHDFSUsers.sh"]
```

ファイル ({{AddHDFSUsers.sh}}) の内容は次のとおりです。

```
#!/bin/bash
# AddHDFSUsers.sh script

# Initialize an array of user names from AD or Linux users and KDC principals created manually on the cluster
ADUSERS=("lijuan" "marymajor" "richardroe" "myusername")

# For each user listed, create an HDFS user directory
# and change ownership to the user

for username in ${ADUSERS[@]}; do
     hdfs dfs -mkdir /user/$username
     hdfs dfs -chown $username:$username /user/$username
done
```

### Hadoop グループにマッピングされた Active Directory グループ
<a name="emr-kerberos-ad-group"></a>

Amazon EMR では、System Security Services Daemon (SSD) を使用して、Active Directory グループを Hadoop グループにマッピングします。グループマッピングを確認するには、「[Amazon EMR で SSH を使用して Kerberos 認証済みのクラスターに接続する](emr-kerberos-connect-ssh.md)」の説明に従ってプライマリノードにログインした後、`hdfs groups` コマンドを使用して、Active Directory アカウントが属する Active Directory グループが、クラスター上の対応する Hadoop ユーザーの Hadoop グループにマッピングされていることを確認します。また、他のユーザーのグループマッピングを確認するには、同コマンドを使用してユーザー名を 1 つ以上指定します (例: `hdfs groups {{lijuan}}`)。詳細については、「[Apache HDFS コマンドガイド](https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html#groups)」の「[グループ](https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html)」を参照してください。