Utilizzo dell'autenticazione PAM - Amazon EMR

Utilizzo dell'autenticazione PAM

La creazione di utenti PAM in JupyterHub su Amazon EMR è un processo in due fasi. La prima fase è aggiungere utenti al sistema operativo in esecuzione nel container jupyterhub sul nodo master e aggiungere una home directory utente corrispondente per ogni utente. La seconda fase è aggiungere questi utenti del sistema operativo come utenti JupyterHub, un processo noto come whitelist in JupyterHub. Dopo che sono stati aggiunti, gli utenti JupyterHub possono connettersi all'URL JupyterHub e fornire le relative credenziali del sistema operativo per l'accesso.

Quando un utente effettua l'accesso, JupyterHub apre l'istanza del server del notebook per tale utente, che viene salvata nella home directory dell'utente sul nodo master, che è /var/lib/jupyter/home/username. Se un'istanza del server del notebook non esiste, JupyterHub genera dinamicamente un'istanza notebook nella home directory dell'utente. Nelle seguenti sezioni viene illustrato come aggiungere utenti individualmente al sistema operativo e a JupyterHub, seguito da uno script bash rudimentale che consente di aggiungere più utenti.

Aggiunta di un utente del sistema operativo al container

Nell'esempio seguente viene utilizzato innanzitutto il comando useradd all'interno del container per aggiungere un singolo utente, diego, e creare una home directory per tale utente. Il secondo comando utilizza chpasswd per stabilire una password di diego per questo utente. I comandi vengono eseguiti sulla riga di comando del nodo master durante la connessione mediante SSH. Puoi anche eseguire questi comandi utilizzando una fase come descritto in precedenza in Amministrazione inviando fasi.

sudo docker exec jupyterhub useradd -m -s /bin/bash -N diego sudo docker exec jupyterhub bash -c "echo diego:diego | chpasswd"

Aggiunta di un utente JupyterHub

Puoi utilizzare il pannello Admin (Amministratore) in JupyterHub o la REST API per aggiungere utenti e amministratori, oppure solo utenti.

Aggiunta di utenti e amministratori utilizzando il pannello Admin (Amministratore) in JupyterHub
  1. Connettersi al nodo master mediante SSH e accedere a https://MasterNodeDNS:9443 con un'identità che dispone di autorizzazioni di amministratore.

  2. Scegliere Control Panel (Pannello di controllo), Admin (Amministratore).

  3. Scegliere User (Utente), Add Users (Aggiungi utenti) o scegliere Admin (Amministratore), Add Admins (Aggiungi amministratori).

Per aggiungere un utente utilizzando la REST API
  1. Connettersi al nodo master mediante SSH e utilizzare il comando seguente sul nodo master o eseguire il comando come una fase.

  2. Acquisire un token amministrativo per creare richieste API e sostituire AdminToken nella fase seguente con tale token.

  3. Utilizzare il comando seguente, sostituendo UserName con un utente del sistema operativo che è stato creato all'interno del container.

    curl -XPOST -H "Authorization: token AdminToken" "https://$(hostname):9443/hub/api/users/UserName
Nota

Quando accedi all'interfaccia Web di JupyterHub per la prima volta, vieni aggiunto automaticamente come utente non amministratore di JupyterHub.

Esempio: Script bash per aggiungere più utenti

Lo script bash di esempio seguente lega tra loro le fasi precedenti in questa sezione per creare più utenti JupyterHub. Lo script può essere eseguito direttamente sul nodo master o può essere caricato in Amazon S3 e, successivamente, eseguito come fase.

Il primo script stabilisce una serie di nomi utente e utilizza il comando jupyterhub token per creare un token API per l'amministratore predefinito, jovyan. Quindi crea un utente del sistema operativo nel container jupyterhub per ogni utente, assegnando a ciascuno una password iniziale che è uguale al relativo nome utente. Infine, chiama l'operazione della REST API per creare ogni utente in JupyterHub. Il token generato in precedenza nello script viene passato ed la risposta REST viene reindirizzata a jq per facilitare la visualizzazione.

# Bulk add users to container and JupyterHub with temp password of username set -x USERS=(shirley diego ana richard li john mary anaya) TOKEN=$(sudo docker exec jupyterhub /opt/conda/bin/jupyterhub token jovyan | tail -1) for i in "${USERS[@]}"; do sudo docker exec jupyterhub useradd -m -s /bin/bash -N $i sudo docker exec jupyterhub bash -c "echo $i:$i | chpasswd" curl -XPOST --silent -k https://$(hostname):9443/hub/api/users/$i \ -H "Authorization: token $TOKEN" | jq done

Salva lo script in un percorso in Amazon S3, ad esempio s3://mybucket/createjupyterusers.sh. Quindi puoi utilizzare script-runner.jar per eseguirlo come una fase.

Esempio: Esecuzione dello script durante la creazione di un cluster (AWS CLI)

Nota

I caratteri di continuazione della riga Linux (\) sono inclusi per la leggibilità. Possono essere rimossi o utilizzati nei comandi Linux. Per Windows, rimuoverli o sostituirli con un accento circonflesso (^).

aws emr create-cluster --name="MyJupyterHubCluster" --release-label emr-5.36.1 \ --applications Name=JupyterHub --log-uri s3://MyBucket/MyJupyterClusterLogs \ --use-default-roles --instance-type m5.xlarge --instance-count 2 --ec2-attributes KeyName=MyKeyPair \ --steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,\ Jar=s3://region.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://mybucket/createjupyterusers.sh"]

Esecuzione dello script su un cluster esistente (AWS CLI)

Nota

I caratteri di continuazione della riga Linux (\) sono inclusi per la leggibilità. Possono essere rimossi o utilizzati nei comandi Linux. Per Windows, rimuoverli o sostituirli con un accento circonflesso (^).

aws emr add-steps --cluster-id j-XXXXXXXX --steps Type=CUSTOM_JAR,\ Name=CustomJAR,ActionOnFailure=CONTINUE,\ Jar=s3://region.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://mybucket/createjupyterusers.sh"]