

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

# Kerberos 認証済み HDFS ユーザーと SSH 接続向け Amazon EMR クラスターの設定
<a name="emr-kerberos-configuration-users"></a>

Amazon EMR は、クラスターで実行されるアプリケーションに対して、Kerberos 認証済みユーザークライアント (例: `hadoop` ユーザー、`spark` ユーザーなど) を作成します。Kerberos を使用して、クラスタープロセスに認証されているユーザーを追加することもできます。これで、認証されたユーザーは、Kerberos 認証情報を使用してクラスターに接続し、アプリケーションを操作することができます。クラスターに対してユーザーを認証するには、次の設定が必要です。
+ KDC で Kerberos プリンシパルと一致する Linux アカウントがクラスターにある必要があります。Amazon EMR は、Active Directory と統合しているアーキテクチャでこれを自動的に行いません。
+ 各ユーザーに対してプライマリノード上で HDFS ユーザーディレクトリを作成し、このディレクトリへのアクセス許可をユーザーに付与する必要があります。
+ GSSAPI がプライマリノードで有効化されるように SSH サービスを設定する必要があります。また、ユーザーには GSSAPI が有効化された SSH クライアントがある必要があります。

## プライマリノードに Linux ユーザーと Kerberos プリンシパルを追加する
<a name="emr-kerberos-configure-linux-kdc"></a>

Active Directory を使用しない場合、クラスターのプライマリノードで Linux アカウントを作成し、これらの Linux ユーザーに対するプリンシパルを KDC に追加する必要があります。これには、プライマリノードに対する KDC のプリンシパルが含まれます。ユーザープリンシパルに加えて、プライマリノード上で実行されている KDC にはローカルホストに対するプリンシパルが必要です。

使用するアーキテクチャに Active Directory が統合されている場合、ローカル KDC の Linux ユーザーおよびプリンシパルは、該当する場合に自動的に作成されます。このため、このステップはスキップできます。詳細については、「[クロス領域信頼](emr-kerberos-options.md#emr-kerberos-crossrealm-summary)」および「[外部 KDC - Active Directory クロス領域信頼を使用した別のクラスター上のクラスター KDC](emr-kerberos-options.md#emr-kerberos-extkdc-ad-trust-summary)」を参照してください。

**重要**  
プライマリノードがエフェメラルストレージを使用するため、プライマリノードが終了すると、KDC はプリンシパルのデータベースと共に失われます。SSH 接続用のユーザーを作成する場合は、高可用性用に構成された外部 KDC を使用してクロス領域信頼を確立することをお勧めします。または、Linux アカウントを使用して SSH 接続用のユーザーを作成する場合は、ブートストラップアクションとスクリプトを使用してアカウント作成プロセスを自動化して、新しいクラスターを作成するときに繰り返すことができるようにします。

ユーザーおよび KDC プリンシパルを追加するには、クラスター作成後あるいは作成時にクラスターへステップを送信することが最も簡単な方法です。または、デフォルトの `hadoop` ユーザーとして EC2 キーペアを使用してプライマリノードに接続し、コマンドを実行することもできます。詳細については、「[SSH を使用して Amazon EMR クラスタープライマリノードに接続する](emr-connect-master-node-ssh.md)」を参照してください。

次の例では、既存のクラスターに Bash スクリプト (`configureCluster.sh`) を送信し、クラスター ID を参照します。このスクリプトは Amazon S3 に保存されます。

```
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/configureCluster.sh"]
```

次の例は、`configureCluster.sh` スクリプトの内容を示します。このスクリプトでは、HDFS ユーザーディレクトリの処理と SSH 向けの GSSAPI の有効化も処理します。これについては、次のセクションで説明します。

```
#!/bin/bash
#Add a principal to the KDC for the primary node, using the primary node's returned host name
sudo kadmin.local -q "ktadd -k /etc/krb5.keytab host/`hostname -f`"
#Declare an associative array of user names and passwords to add
declare -A arr
arr=([lijuan]=pwd1 [marymajor]=pwd2 [richardroe]=pwd3)
for i in ${!arr[@]}; do
    #Assign plain language variables for clarity
     name=${i} 
     password=${arr[${i}]}

     # Create a principal for each user in the primary node and require a new password on first logon
     sudo kadmin.local -q "addprinc -pw $password +needchange $name"

     #Add hdfs directory for each user
     hdfs dfs -mkdir /user/$name

     #Change owner of each user's hdfs directory to that user
     hdfs dfs -chown $name:$name /user/$name
done

# Enable GSSAPI authentication for SSH and restart SSH service
sudo sed -i 's/^.*GSSAPIAuthentication.*$/GSSAPIAuthentication yes/' /etc/ssh/sshd_config
sudo sed -i 's/^.*GSSAPICleanupCredentials.*$/GSSAPICleanupCredentials yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd
```

## ユーザー HDFS ディレクトリの追加
<a name="emr-kerberos-configure-HDFS"></a>

ユーザーがクラスターにログインして Hadoop ジョブを実行できるようにするには、Linux アカウント向けに HDFS ユーザーディレクトリを追加し、そのディレクトリの所有権を各ユーザーに付与します。

HDFS ディレクトリを作成するには、クラスター作成後あるいは作成時にクラスターへステップを送信することが最も簡単な方法です。または、デフォルトの `hadoop` ユーザーとして EC2 キーペアを使用してプライマリノードに接続し、コマンドを実行することもできます。詳細については、「[SSH を使用して Amazon EMR クラスタープライマリノードに接続する](emr-connect-master-node-ssh.md)」を参照してください。

次の例では、既存のクラスターに Bash スクリプト (`AddHDFSUsers.sh`) を送信し、クラスター ID を参照します。このスクリプトは Amazon S3 に保存されます。

```
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 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
```

## SSH で GSSAPI を有効化する
<a name="emr-kerberos-ssh-config"></a>

Kerberos 認証済みユーザーが SSH を使用してプライマリノードに接続するには、SSH サービスで GSSAPI 認証が有効にされている必要があります。GSSAPI を有効にするには、プライマリノードのコマンドラインから次のコマンドを実行するか、それをスクリプトとして実行するステップを使用します。SSH を再設定したら、サービスを再起動する必要があります。

```
sudo sed -i 's/^.*GSSAPIAuthentication.*$/GSSAPIAuthentication yes/' /etc/ssh/sshd_config
sudo sed -i 's/^.*GSSAPICleanupCredentials.*$/GSSAPICleanupCredentials yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd
```