Konfiguration eines Amazon EMR-Clusters für Kerberos-authentifizierte HDFS-Benutzer und SSH-Verbindungen - Amazon EMR

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Konfiguration eines Amazon EMR-Clusters für Kerberos-authentifizierte HDFS-Benutzer und SSH-Verbindungen

Amazon EMR erstellt Kerberos-authentifizierten Clients für Anwendungen, die auf dem Cluster ausgeführt werden, z.  B. der hadoop-Benutzer, spark-Benutzer und andere. Sie können auch Benutzer hinzufügen, die mit Kerberos für Cluster-Prozesse authentifiziert werden. Authentifizierte Benutzer können dann eine Verbindung mit dem Cluster mit ihren Kerberos-Anmeldeinformationen einrichten und mit den Anwendungen arbeiten. Damit sich ein Benutzer am Cluster authentifizieren kann, sind die folgenden Konfigurationen erforderlich:

  • Auf dem Cluster muss ein Linux-Konto vorhanden sein, das dem Kerberos-Prinzipal im KDC entspricht. Amazon EMR erledigt dies automatisch in Architekturen, die in Active Directory integriert sind.

  • Sie müssen ein HDFS-Benutzerverzeichnis auf dem Primärknoten für jeden Benutzer erstellen und dem Benutzer Berechtigungen für das Verzeichnis erteilen.

  • Sie müssen den SSH-Service konfigurieren, sodass GSSAPI auf dem Primärknoten aktiviert ist. Darüber hinaus müssen die Benutzer einen SSH-Client mit aktiviertem GSSAPI aufweisen.

Hinzufügen von Linux-Benutzern und Kerberos-Prinzipalen zum Primärknoten

Wenn Sie Active Directory nicht verwenden, müssen Sie Linux-Konten auf dem Cluster-Primärknoten erstellen und Prinzipale für diese Linux-Benutzer am KDC hinzufügen. Dies umfasst einen Prinzipal im KDC für den Primärknoten. Zusätzlich zu den Benutzerprinzipalen erfordert das KDC, das auf dem Primärknoten ausgeführt wird, einen Prinzipal für den lokalen Host.

Wenn Ihre Architektur eine Active Directory-Integration beinhaltet, werden Linux-Benutzer und Prinzipale auf dem lokalen KDC ggf. automatisch erstellt. Sie können diesen Schritt überspringen. Weitere Informationen erhalten Sie unter Bereichsübergreifende Vertrauensstellung und Externes KDC – Cluster-KDC mit anderer bereichsübergreifender Active-Directory-Vertrauensstellung.

Wichtig

Das KDC geht zusammen mit der Prinzipaldatenbank verloren, wenn der Primärknoten beendet wird, weil der Primärknoten kurzlebigen Speicher verwendet. Wenn Sie Benutzer für SSH-Verbindungen erstellen, empfehlen wir, eine bereichsübergreifende Vertrauensstellung mit einem externen KDC einzurichten, das für hohe Verfügbarkeit konfiguriert ist. Wenn Sie Benutzer für SSH-Verbindungen mithilfe von Linux-Konten erstellen, automatisieren Sie alternativ den Kontoerstellungsprozess mithilfe von Bootstrap-Aktionen und -Skripts, sodass er wiederholt werden kann, wenn Sie einen neuen Cluster erstellen.

Das Übermitteln eines Schritts an das Cluster nach dem Erstellen oder beim Erstellen des Clusters ist die einfachste Möglichkeit zum Hinzufügen von Benutzern und KDC-Prinzipalen. Alternativ können Sie eine Verbindung zum Primärknoten herstellen, indem Sie ein EC2 key pair als hadoop Standardbenutzer verwenden, um die Befehle auszuführen. Weitere Informationen finden Sie unter Stellen Sie mithilfe von SSH eine Connect zum primären Knoten des Amazon EMR-Clusters her.

Im folgenden Beispiel wird einem Cluster ein bereits vorhandenes Bash-Skript configureCluster.sh übergeben, das auf seine Cluster-ID verweist. Das Skript wird in Amazon S3 gespeichert.

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"]

Das folgende Beispiel veranschaulicht den Inhalt des configureCluster.sh-Skripts. Das Skript wickelt zudem die Erstellung von HDFS-Benutzerverzeichnissen und die Aktivierung von GSSAPI für SSH ab, die in den folgenden Abschnitten erläutert werden.

#!/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

Hinzufügen von Benutzer-HDFS-Verzeichnissen

Um Ihren Benutzern zu ermöglichen, sich beim Cluster anzumelden, um Hadoop-Jobs auszuführen, müssen Sie HDFS-Benutzerverzeichnisse für ihre Linux-Konten hinzufügen und jedem Benutzer das Eigentum an ihrem Verzeichnis erteilen.

Das Übermitteln eines Schritts an das Cluster nach dem Erstellen oder beim Erstellen des Clusters ist die einfachste Möglichkeit zum Erstellen von HDFS-Verzeichnissen. Alternativ können Sie eine Verbindung zum Primärknoten herstellen, indem Sie ein EC2 key pair als hadoop Standardbenutzer verwenden, um die Befehle auszuführen. Weitere Informationen finden Sie unter Stellen Sie mithilfe von SSH eine Connect zum primären Knoten des Amazon EMR-Clusters her.

Im folgenden Beispiel wird einem Cluster ein bereits vorhandenes Bash-Skript AddHDFSUsers.sh übergeben, das auf seine Cluster-ID verweist. Das Skript wird in Amazon S3 gespeichert.

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"]

Das folgende Beispiel veranschaulicht den Inhalt des AddHDFSUsers.sh-Skripts.

#!/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

Aktivieren von GSSAPI für SSH

Damit für Kerberos authentifizierte Benutzer mithilfe von SSH eine Verbindung mit dem Primärknoten herstellen, muss für den SSH-Service die GSSAPI-Authentifizierung aktiviert sein. Führen Sie zum Aktivieren von GSSAPI die folgenden Befehle über die Befehlszeile des Primärknotens aus oder verwenden Sie einen Schritt zum Ausführen als Skript. Nachdem Sie SSH neu konfiguriert haben, müssen Sie den Service neu starten.

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