為 Kerberos 驗證HDFS的使用者和SSH連線設定 Amazon EMR叢集 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

為 Kerberos 驗證HDFS的使用者和SSH連線設定 Amazon EMR叢集

Amazon 會為在叢集上執行的應用程式EMR建立 Kerberos 驗證的使用者用戶端,例如hadoop使用者、spark使用者和其他。您也可以新增使用 Kerberos 驗證至叢集程序的使用者。已驗證的使用者接著可以使用其 Kerberos 登入資料連接到叢集並使用應用程式。對於要對叢集進行驗證的使用者,需要以下組態:

  • 叢集上KDC必須存在符合 中 Kerberos 主體的 Linux 帳戶。Amazon 會在與 Active Directory 整合的架構中自動EMR執行此操作。

  • 您必須為每個HDFS使用者在主要節點上建立使用者目錄,並為該目錄授予使用者許可。

  • 您必須設定 SSH服務,以便在主要節點上啟用 GSSAPI 。此外,使用者必須具有GSSAPI已啟用 的SSH用戶端。

將 Linux 使用者和 Kerberos 主體新增至主節點

如果您不使用 Active Directory,則必須在叢集主節點上建立 Linux 帳戶,並將這些 Linux 使用者的主體新增至 KDC。這包括 中主要節點KDC的主體。除了使用者主體之外,在主要節點KDC上執行的 需要本機主機的主體。

當您的架構包含 Active Directory 整合時,在本機 上的 Linux 使用者和主體會自動建立KDC,如果適用的話。您可以略過此步驟。如需詳細資訊,請參閱 跨領域信任外部 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