チュートリアル: クラスター専用の KDC を設定する
このトピックでは、クラスター専用 KDC (キー配布センター) を使用したクラスターの作成、すべてのクラスターノードへの Linux アカウントの手動での追加、プライマリノードでの KDC への Kerberos プリンシパルの追加、クライアントコンピュータに Kerberos クライアントがインストールされていることの確認を行う説明を示します。
Kerberos および KDC に対する Amazon EMR サポート、および MIT Kerberos ドキュメントへのリンクの詳細については、「Amazon EMR での認証に Kerberos を使用する」を参照してください。
ステップ 1: Kerberos 認証済みクラスターを作成する
-
Kerberos を有効にするセキュリティ設定を作成します。次の例では、インラインの JSON 構造としてセキュリティ設定を指定する AWS CLI の
create-security-configuration
コマンドを示します。ローカルに保存されたファイルを参照することもできます。aws emr create-security-configuration --name
MyKerberosConfig
\ --security-configuration '{"AuthenticationConfiguration": {"KerberosConfiguration": {"Provider": "ClusterDedicatedKdc", "ClusterDedicatedKdcConfiguration": {"TicketLifetimeInHours":24
}}}}' -
セキュリティ設定を参照して、クラスターの Kerberos 属性を確立し、ブートストラップアクションを使用して Linux アカウントを追加するクラスターを作成します。次の例は、AWS CLI で
create-cluster
コマンドを使用する方法を示しています。このコマンドを使用すると、上記で作成したセキュリティ設定 (MyKerberosConfig
) が参照されます。また、ブートストラップアクションとして、クラスターを作成する前に作成し、Amazon S3 にアップロードしたシンプルなスクリプト (createlinuxusers.sh
) も参照されます。aws emr create-cluster --name "
MyKerberosCluster
" \ --release-labelemr-5.36.1
\ --instance-typem5.xlarge
\ --instance-count3
\ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=MyEC2KeyPair
\ --service-role EMR_DefaultRole \ --security-configurationMyKerberosConfig
\ --applications Name=Hadoop
Name=Hive
Name=Oozie
Name=Hue
Name=HCatalog
Name=Spark
\ --kerberos-attributes Realm=EC2.INTERNAL
,\ KdcAdminPassword=MyClusterKDCAdminPwd
\ --bootstrap-actionsPath=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 ディレクトリを作成します。同様に、SSH サービスを設定し、GSSAPI 認証を有効にします。Kerberos で必要になります。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 を使用して Kerberos 認証済みのクラスターに接続する」を参照してください。