Configurazione di un cluster per utenti e connessioni autenticati con Kerberos HDFS SSH - Amazon EMR

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configurazione di un cluster per utenti e connessioni autenticati con Kerberos HDFS SSH

Amazon EMR crea client utente autenticati con Kerberos per le applicazioni eseguite sul cluster, ad esempio l'utente, l'utente e altri. hadoop spark Puoi anche aggiungere utenti autenticati durante i processi del cluster mediante Kerberos. Gli utenti autenticati possono quindi connettersi al cluster con le relative credenziali Kerberos e lavorare con le applicazioni. Per consentire l'autenticazione dell'utente nel cluster, sono necessarie le seguenti configurazioni:

  • Nel cluster deve esistere un account Linux corrispondente al principale Kerberos. KDC Amazon EMR esegue questa operazione automaticamente nelle architetture che si integrano con Active Directory.

  • È necessario creare una directory HDFS utente sul nodo primario per ogni utente e concedere all'utente le autorizzazioni per l'accesso alla directory.

  • È necessario configurare il SSH servizio in modo che GSSAPI sia abilitato sul nodo primario. Inoltre, gli utenti devono avere un SSH client GSSAPI abilitato.

Aggiunta di utenti Linux ed entità principali Kerberos al nodo primario

Se non si utilizza Active Directory, è necessario creare account Linux sul nodo primario del cluster e aggiungere i principali per questi utenti Linux a. KDC Ciò include un principale nel KDC nodo primario. Oltre ai principali utente, l'KDCesecuzione sul nodo primario richiede un principale per l'host locale.

Quando l'architettura include l'integrazione con Active Directory, gli utenti e i principali Linux in localeKDC, se applicabile, vengono creati automaticamente. Puoi ignorare questa fase. Per ulteriori informazioni, consulta Fiducia tra realm e EsternoKDC: cluster KDC su un cluster diverso con trust cross-realm di Active Directory.

Importante

IlKDC, insieme al database dei principali, viene perso quando il nodo primario termina perché il nodo primario utilizza lo storage temporaneo. Se crei utenti per SSH le connessioni, ti consigliamo di stabilire un trust cross-realm con un server esterno configurato per l'alta disponibilità. KDC In alternativa, se crei utenti per SSH le connessioni utilizzando account Linux, automatizza il processo di creazione degli account utilizzando azioni e script di bootstrap in modo che possa essere ripetuto quando crei un nuovo cluster.

Inviare un passaggio al cluster dopo averlo creato o al momento della creazione del cluster è il modo più semplice per aggiungere utenti e responsabili. KDC In alternativa, è possibile connettersi al nodo primario utilizzando una EC2 key pair come hadoop utente predefinito per eseguire i comandi. Per ulteriori informazioni, consulta Connect al nodo primario utilizzando SSH.

L'esempio seguente invia uno script Bash configureCluster.sh a un cluster già esistente, facendo riferimento al relativo ID di cluster. Lo script viene salvato in 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"]

L'esempio seguente mostra il contenuto dello script configureCluster.sh. Lo script gestisce anche la creazione di directory HDFS utente e l'abilitazione di GSSAPI forSSH, che sono trattate nelle sezioni seguenti.

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

Aggiungere le directory degli utenti HDFS

Per consentire agli utenti di accedere al cluster per eseguire i job Hadoop, è necessario aggiungere le directory HDFS utente per i rispettivi account Linux e concedere a ciascun utente la proprietà della propria directory.

Inviare un passaggio al cluster dopo averlo creato o al momento della creazione del cluster è il modo più semplice per creare directory. HDFS In alternativa, è possibile connettersi al nodo primario utilizzando una EC2 key pair come hadoop utente predefinito per eseguire i comandi. Per ulteriori informazioni, consulta Connect al nodo primario utilizzando SSH.

L'esempio seguente invia uno script Bash AddHDFSUsers.sh a un cluster già esistente, facendo riferimento al relativo ID di cluster. Lo script viene salvato in 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"]

L'esempio seguente mostra il contenuto dello script 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

Attivazione GSSAPI per SSH

Affinché gli utenti autenticati con Kerberos possano connettersi al nodo primario utilizzandoSSH, il SSH servizio deve avere l'autenticazione abilitata. GSSAPI Per abilitarloGSSAPI, esegui i seguenti comandi dalla riga di comando del nodo primario o usa un passaggio per eseguirlo come script. Dopo la riconfigurazioneSSH, è necessario riavviare il servizio.

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