本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
為 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