本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:使用 Amazon EMR 設定叢集專用 KDC
本主題引導您使用叢集專用金鑰分佈中心 (KDC) 來建立叢集、手動新增 Linux 帳戶至所有叢集節點,新增 Kerberos 主體至主節點上的 KDC,並確保用戶端電腦已安裝 Kerberos 用戶端。
如需 Kerberos 和 KDC 的 Amazon EMR 支援的詳細資訊,以及 MIT Kerberos 文件的連結,請參閱 使用 Kerberos 透過 Amazon EMR 進行身分驗證。
步驟 1:建立 Kerberos 化叢集
-
建立可使用 Kerberos 的安全組態。下列範例示範使用 的
create-security-configuration
命令 AWS CLI ,將安全組態指定為內嵌 JSON 結構。您也可以參考儲存在本機的檔案。aws emr create-security-configuration --name
MyKerberosConfig
\ --security-configuration '{"AuthenticationConfiguration": {"KerberosConfiguration": {"Provider": "ClusterDedicatedKdc", "ClusterDedicatedKdcConfiguration": {"TicketLifetimeInHours":24
}}}}' -
建立參考安全組態的叢集,為叢集建立 Kerberos 屬性,並使用引導操作新增 Linux 帳戶。下列範例示範使用 AWS CLI的
create-cluster
指令。命令參考您在上面建立的安全組態MyKerberosConfig
。此指令也會參考簡單的指令碼createlinuxusers.sh
作為引導操作 (您在建立叢集之前就建立和上傳到 Amazon S3 的引導操作)。aws emr create-cluster --name "
MyKerberosCluster
" \ --release-labelemr-7.7.0
\ --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://
amzn-s3-demo-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 服務,以啟用 Kerberos 所需的 GSSAPI 驗證。啟用 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://amzn-s3-demo-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 透過 Amazon EMR 連線至 Kerberized 叢集。