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

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

為經過 KerberOS 驗證的使用者和連線HDFS設定叢集 SSH

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

  • 叢集上KDC必須存在符合 Kerberos 主體的 Linux 帳戶。Amazon EMR 在與活動目錄集成的體系結構中自動執行此操作。

  • 您必須在每個HDFS使用者的主節點上建立使用者目錄,並授與使用者目錄的權限。

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

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

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

當您的架構包含 Active Directory 整合時,系統會自動建立本機KDC上的 Linux 使用者和主參與者 (如果適用)。您可以略過此步驟。如需詳細資訊,請參閱 跨領域信任具有 Active Directory 跨領域信任的不同叢集KDC上的外部KDC叢集

重要

當主要節點終止時KDC,與主體資料庫一起會遺失,因為主要節點使用暫時儲存。如果您建立SSH連線的使用者,建議您建立跨領域信任,其外部KDC設定為高可用性。或者,如果您使用 Linux 帳戶建立SSH連線的使用者,請使用啟動程序動作和指令碼來自動化帳戶建立程序,以便在您建立新叢集時可以重複此程序。

建立叢集後或建立叢集時,將步驟提交至叢集是新增使用者和KDC主體的最簡單方法。或者,您可以使用 EC2 key pair 作為執行命令的預設使用hadoop者來連線至主節點。如需詳細資訊,請參閱使用以下方式 Connect 到主節點 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://DOC-EXAMPLE-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 key pair 以執行命令的預設使用hadoop者身分連線至主節點。如需詳細資訊,請參閱使用以下方式 Connect 到主節點 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://DOC-EXAMPLE-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