Kerberos で認証されたHDFSユーザーとSSH接続用の Amazon EMRクラスターの設定 - Amazon EMR

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

Kerberos で認証されたHDFSユーザーとSSH接続用の Amazon EMRクラスターの設定

Amazon は、hadoopユーザー、ユーザーなど、クラスターで実行されるアプリケーションの Kerberos 認証sparkユーザークライアントEMRを作成します。Kerberos を使用して、クラスタープロセスに認証されているユーザーを追加することもできます。これで、認証されたユーザーは、Kerberos 認証情報を使用してクラスターに接続し、アプリケーションを操作することができます。クラスターに対してユーザーを認証するには、次の設定が必要です。

  • の Kerberos プリンシパルに一致する Linux アカウントがクラスターに存在するKDC必要があります。Amazon EMRは、Active Directory と統合するアーキテクチャでこれを自動的に実行します。

  • ユーザーごとにプライマリノードにユーザーHDFSディレクトリを作成し、そのディレクトリに対するアクセス許可をユーザーに付与する必要があります。

  • プライマリノードで GSSAPIが有効になっているように SSHサービスを設定する必要があります。さらに、ユーザーには GSSAPI が有効になっているSSHクライアントが必要です。

プライマリノードに Linux ユーザーと Kerberos プリンシパルを追加する

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

アーキテクチャに Active Directory 統合が含まれている場合、該当する場合KDC、ローカル の Linux ユーザーとプリンシパルが自動的に作成されます。このため、このステップはスキップできます。詳細については、「クロス領域信頼」および「外部 KDC— Active Directory クロスレルム信頼を持つ別のクラスターKDCのクラスター」を参照してください。

重要

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

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

次の例では、既存のクラスターに 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、ユーザーディレクトリの作成と GSSAPIの有効化も処理します。これについてはSSH、以下のセクションで説明します。

#!/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ディレクトリの追加

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

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

次の例では、既存のクラスターに 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

GSSAPI の有効化 SSH

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