チュートリアル: クラスター専用を設定する KDC - Amazon EMR

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

チュートリアル: クラスター専用を設定する KDC

このトピックでは、クラスター専用キーディストリビューションセンター (KDC) を使用してクラスターを作成し、Linux アカウントをすべてのクラスターノードに手動で追加し、プライマリノードKDCの に Kerberos プリンシパルを追加し、クライアントコンピュータに Kerberos クライアントがインストールされていることを確認する方法について説明します。

Kerberos と の Amazon EMR サポートKDC、および Kerberos MIT ドキュメントへのリンクの詳細については、「」を参照してくださいAmazon での認証に Kerberos を使用する EMR

ステップ 1: Kerberos 認証済みクラスターを作成する

  1. Kerberos を有効にするセキュリティ設定を作成します。次の例は、セキュリティ設定 AWS CLI をインラインJSON構造として指定する を使用するcreate-security-configurationコマンドを示しています。ローカルに保存されたファイルを参照することもできます。

    aws emr create-security-configuration --name MyKerberosConfig \ --security-configuration '{"AuthenticationConfiguration": {"KerberosConfiguration": {"Provider": "ClusterDedicatedKdc", "ClusterDedicatedKdcConfiguration": {"TicketLifetimeInHours": 24}}}}'
  2. セキュリティ設定を参照して、クラスターの Kerberos 属性を確立し、ブートストラップアクションを使用して Linux アカウントを追加するクラスターを作成します。次の例は、 AWS CLIで create-cluster コマンドを使用する方法を示しています。このコマンドを使用すると、上記で作成したセキュリティ設定 (MyKerberosConfig) が参照されます。また、ブートストラップアクションとして、クラスターを作成する前に作成し、Amazon S3 にアップロードしたシンプルなスクリプト (createlinuxusers.sh) も参照されます。

    aws emr create-cluster --name "MyKerberosCluster" \ --release-label emr-7.2.0 \ --instance-type m5.xlarge \ --instance-count 3 \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=MyEC2KeyPair \ --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 \ --bootstrap-actions Path=s3://DOC-EXAMPLE-BUCKET/createlinuxusers.sh

    次のコードでは、createlinuxusers.sh スクリプトの内容を示します。このスクリプトでは、user1、user2、user3 がクラスター内の各ノードに追加されます。次のステップでは、これらのユーザーをKDCプリンシパルとして追加します。

    #!/bin/bash sudo adduser user1 sudo adduser user2 sudo adduser user3

ステップ 2: プリンシパルを に追加しKDC、HDFSユーザーディレクトリを作成し、設定する SSH

プライマリノードでKDC実行されている には、ローカルホストと、クラスターで作成する各ユーザーにプリンシパルを追加する必要があります。クラスターに接続して Hadoop ジョブを実行する必要がある場合は、ユーザーごとにHDFSディレクトリを作成することもできます。同様に、Kerberos に必要なGSSAPI認証を有効にするようにSSHサービスを設定します。を有効にしたらGSSAPI、SSHサービスを再起動します。

最も簡単にこれらのタスクを実行するには、クラスターにステップを送信します。次の例では、以前作成したクラスターに Bash スクリプト (configurekdc.sh) を送信し、クラスター ID を参照します。このスクリプトは Amazon S3 に保存されます。または、EC2キーペアを使用してプライマリノードに接続し、クラスターの作成時にコマンドを実行したり、ステップを送信したりできます。

aws emr add-steps --cluster-id <j-2AL4XXXXXX5T9> --steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,Jar=s3://myregion.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://DOC-EXAMPLE-BUCKET/configurekdc.sh"]

次のコードでは、configurekdc.sh スクリプトの内容を示します。

#!/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=([user1]=pwd1 [user2]=pwd2 [user3]=pwd3) for i in ${!arr[@]}; do #Assign plain language variables for clarity name=${i} password=${arr[${i}]} # Create principal for sshuser in the primary node and require a new password on first logon sudo kadmin.local -q "addprinc -pw $password +needchange $name" #Add user hdfs directory hdfs dfs -mkdir /user/$name #Change owner of user's hdfs directory to 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

これで、追加したユーザーは を使用してクラスターに接続できるようになりますSSH。詳細については、「SSH を使用して Kerberized クラスターに接続する」を参照してください。