Utilisation de l'authentification PAM
La création d'utilisateurs PAM dans JupyterHub sur Amazon EMR est un processus en deux étapes. La première étape consiste à ajouter des utilisateurs au système d'exploitation qui s'exécute dans le conteneur jupyterhub
sur le nœud principal, et d'ajouter le répertoire de base correspondant pour chaque utilisateur. La deuxième étape consiste à ajouter ces utilisateurs du système d'exploitation en tant qu'utilisateurs JupyterHub, un processus connu sous le nom de mise sur liste blanche dans JupyterHub. Une fois qu'un utilisateur JupyterHub est ajouté, il peut se connecter à l'URL JupyterHub et fournir ses informations d'identification auprès du système d'exploitation pour accéder.
Lorsqu'un utilisateur se connecte, JupyterHub ouvre l'instance de serveur de bloc-notes pour cet utilisateur, enregistrée dans le répertoire de base de l'utilisateur sur le nœud principal, soit /var/lib/jupyter/home/
. Si une instance de serveur de bloc-notes n'existe pas, JupyterHub génère une instance de bloc-notes dans le répertoire de base de l'utilisateur. Les sections suivantes montrent comment ajouter individuellement des utilisateurs au système d'exploitation et à JupyterHub, ainsi qu'un script bash élémentaire qui ajoute plusieurs utilisateurs.username
Ajout d'un utilisateur du système d'exploitation au conteneur
L'exemple suivant utilise tout d'abord la commande useradd
sudo docker exec jupyterhub useradd -m -s /bin/bash -N diego sudo docker exec jupyterhub bash -c "echo diego:diego | chpasswd"
Ajout d'un utilisateur JupyterHub
Vous pouvez utiliser le volet Admin dans JupyterHub ou l'API REST pour ajouter des utilisateurs et des administrateurs, ou seulement des utilisateurs.
Pour ajouter des utilisateurs et des administrateurs à l'aide du volet admin dans JupyterHub
Connectez-vous au nœud principal à l'aide de SSH, puis à https://
DNS_Nœud_Principal
:9443 avec une identité qui dispose des autorisations d'administrateur.Choisissez Control Panel (Panneau de configuration), Admin.
Choisissez User (Utilisateur), Add Users (Ajouter des utilisateurs), ou choisissez Admin, Add Admins (Ajouter des administrateurs).
Pour ajouter un utilisateur à l'aide de l'API REST
Connectez-vous au nœud principal à l'aide de SSH et utilisez la commande suivante sur le nœud principal, ou exécutez la commande en tant qu'étape.
Acquérez un jeton d'administration pour créer des demandes d'API et remplacez
AdminToken
dans l'étape suivante par ce jeton.Utilisez la commande suivante, en remplaçant
UserName
par un utilisateur du système d'exploitation créé dans le conteneur.curl -XPOST -H "Authorization: token
AdminToken
" "https://$(hostname):9443/hub/api/users/UserName
Note
Vous êtes automatiquement ajouté en tant qu'utilisateur non administrateur de JupyterHub lorsque vous vous connectez à l'interface Web de JupyterHub pour la première fois.
Exemple : script bash pour ajouter plusieurs utilisateurs
L'exemple de script bash suivant regroupe les étapes précédentes de cette section pour créer plusieurs utilisateurs JupyterHub. Le script peut être exécuté directement sur le nœud principal, ou téléchargé sur Amazon S3 et exécuté en tant qu'étape.
Le script établit tout d'abord une liste des noms d'utilisateur, puis utilise la commande jupyterhub token
pour créer un jeton d'API pour l'administrateur par défaut jovyan. Ensuite, il crée un utilisateur du système d'exploitation dans le conteneur jupyterhub
pour chaque utilisateur, et lui affecte un mot de passe initial équivalent à son nom d'utilisateur. Enfin, il appelle l'opération d'API REST pour créer chaque utilisateur dans JupyterHub. Il transmet le jeton généré précédemment dans le script et transfère la réponse REST à jq
pour faciliter l'affichage.
# 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
Enregistrez le script dans un emplacement Amazon S3 tel que s3://mybucket/createjupyterusers.sh
. Vous pouvez ensuite utiliser script-runner.jar
pour l'exécuter en tant qu'étape.
Exemple : exécution du script lors de la création d'un cluster (AWS CLI)
Note
Les caractères de continuation de ligne Linux (\) sont inclus pour des raisons de lisibilité. Ils peuvent être supprimés ou utilisés dans les commandes Linux. Pour Windows, supprimez-les ou remplacez-les par un caret (^).
aws emr create-cluster --name="
MyJupyterHubCluster
" --release-label emr-5.36.1 \ --applications Name=JupyterHub --log-uris3://MyBucket/MyJupyterClusterLogs
\ --use-default-roles --instance-type m5.xlarge --instance-count2
--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"]
Exécution du script sur un cluster existant (AWS CLI)
Note
Les caractères de continuation de ligne Linux (\) sont inclus pour des raisons de lisibilité. Ils peuvent être supprimés ou utilisés dans les commandes Linux. Pour Windows, supprimez-les ou remplacez-les par un caret (^).
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"]