Utilisation de l'LDAPauthentification - Amazon EMR

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation de l'LDAPauthentification

Le Lightweight Directory Access Protocol (LDAP) est un protocole d'application permettant d'interroger et de modifier des objets correspondant à des ressources telles que des utilisateurs et des ordinateurs stockés dans un fournisseur de services d'annuaire LDAP compatible tel qu'Active Directory ou un serveur Open LDAP Server. Vous pouvez utiliser le plugin LDAP d'authentification pour JupyterHub with JupyterHub sur Amazon EMR pour l'authentification LDAP des utilisateurs. Le plugin gère les sessions de connexion des LDAP utilisateurs et fournit des informations utilisateur à Jupyter. Cela permet aux utilisateurs de se connecter à JupyterHub des blocs-notes en utilisant les informations d'identification de leur identité stockées sur un LDAP serveur compatible.

Les étapes de cette section vous guident à travers les étapes suivantes pour configurer et activer LDAP l'utilisation du plug-in LDAP Authenticator pour. JupyterHub Pour effectuer ces étapes, vous devez être connecté à la ligne de commande du nœud principal. Pour de plus amples informations, veuillez consulter Connexion au nœud principal et aux serveurs de bloc-notes.

  1. Créez un fichier LDAP de configuration contenant des informations sur le LDAP serveur, telles que l'adresse IP de l'hôte, le port, les noms de liaison, etc.

  2. Modifiez /etc/jupyter/conf/jupyterhub_config.py pour activer le plug-in LDAP d'authentification pour. JupyterHub

  3. Créez et exécutez un script qui se configure LDAP dans le jupyterhub conteneur.

  4. Interrogez LDAP les utilisateurs, puis créez des répertoires personnels dans le conteneur pour chaque utilisateur. JupyterHub nécessite des répertoires personnels pour héberger les blocs-notes.

  5. Exécuter un script qui redémarre JupyterHub

Important

Avant de procéder à la configurationLDAP, testez votre infrastructure réseau pour vous assurer que le LDAP serveur et le nœud principal du cluster peuvent communiquer selon les besoins. TLSutilise généralement le port 389 via une TCP connexion simple. Si votre LDAP connexion l'utiliseSSL, le TCP port connu pour SSL est 636.

Création du fichier LDAP de configuration

L'exemple ci-dessous utilise les valeurs de configuration d'espace réservé suivantes. Remplacez ces valeurs par des paramètres qui correspondent à votre implémentation.

  • Le LDAP serveur exécute la version 3 et est disponible sur le port 389. Il s'agit du SSL non-port standard pourLDAP.

  • Le nom unique de base est dc=example, dc=org.

Utilisez un éditeur de texte pour créer le fichier ldap.conf, avec un contenu similaire à ce qui suit. Utilisez des valeurs adaptées à votre LDAP implémentation. Remplacez host avec l'adresse IP ou le nom d'hôte résoluble de votre LDAP serveur.

base dc=example,dc=org uri ldap://host ldap_version 3 binddn cn=admin,dc=example,dc=org bindpw admin

Activer le LDAP plug-in d'authentification pour JupyterHub

Utilisez un éditeur de texte pour modifier le fichier /etc/jupyter/conf/jupyterhub_config.py et ajouter les propriétés ldapauthenticator similaires à ce qui suit. Remplacez host avec l'adresse IP ou le nom d'hôte résoluble du LDAP serveur. L'exemple suppose que les objets utilisateur se trouvent au sein d'une unité organisationnelle (ou) nommée people, et utilise les composants de nom unique que vous avez définis précédemment à l'aide deldap.conf.

c.JupyterHub.authenticator_class = 'ldapauthenticator.LDAPAuthenticator' c.LDAPAuthenticator.use_ssl = False c.LDAPAuthenticator.server_address = 'host' c.LDAPAuthenticator.bind_dn_template = 'cn={username},ou=people,dc=example,dc=org'

Configurer LDAP dans le conteneur

Utilisez un éditeur de texte pour créer un script bash avec le contenu suivant :

#!/bin/bash # Uncomment the following lines to install LDAP client libraries only if # using Amazon EMR release version 5.14.0. Later versions install libraries by default. # sudo docker exec jupyterhub bash -c "sudo apt-get update" # sudo docker exec jupyterhub bash -c "sudo apt-get -y install libnss-ldap libpam-ldap ldap-utils nscd" # Copy ldap.conf sudo docker cp ldap.conf jupyterhub:/etc/ldap/ sudo docker exec jupyterhub bash -c "cat /etc/ldap/ldap.conf" # configure nss switch sudo docker exec jupyterhub bash -c "sed -i 's/\(^passwd.*\)/\1 ldap/g' /etc/nsswitch.conf" sudo docker exec jupyterhub bash -c "sed -i 's/\(^group.*\)/\1 ldap/g' /etc/nsswitch.conf" sudo docker exec jupyterhub bash -c "sed -i 's/\(^shadow.*\)/\1 ldap/g' /etc/nsswitch.conf" sudo docker exec jupyterhub bash -c "cat /etc/nsswitch.conf" # configure PAM to create home directories sudo docker exec jupyterhub bash -c "echo 'session required pam_mkhomedir.so skel=/etc/skel umask=077' >> /etc/pam.d/common-session" sudo docker exec jupyterhub bash -c "cat /etc/pam.d/common-session" # restart nscd service sudo docker exec jupyterhub bash -c "sudo service nscd restart" # Test sudo docker exec jupyterhub bash -c "getent passwd" # Install ldap plugin sudo docker exec jupyterhub bash -c "pip install jupyterhub-ldapauthenticator"

Enregistrez le script sur le nœud principal, puis exécutez-le à partir de la ligne de commande du nœud principal. Par exemple, avec le script enregistré sous le nom configure_ldap_client.sh, rendez le fichier exécutable :

chmod +x configure_ldap_client.sh

Exécutez ensuite le script :

./configure_ldap_client.sh

Ajout d'attributs à Active Directory

Pour rechercher chaque utilisateur et créer l'entrée appropriée dans la base de données, le conteneur JupyterHub docker nécessite les UNIX propriétés suivantes pour l'objet utilisateur correspondant dans Active Directory. Pour plus d'informations, consultez la section Comment continuer à modifier les attributsGID/UIDRFC2307 maintenant que le plug-in d'attributs Unix n'est plus disponible pour le composant logiciel enfichable Utilisateurs et ordinateurs MMC Active Directory ? dans l'article Clarification concernant l'état de la gestion des identités pour Unix (IDMU) et le rôle NIS du serveur dans la version préliminaire technique de Windows Server 2016 et au-delà.

  • homeDirectory

    Il s'agit de l'emplacement de l’annuaire de base de l'utilisateur, qui est généralement /home/username.

  • gidNumber

    Il s'agit d'une valeur supérieure à 60 000 qui n'est pas déjà utilisée par un autre utilisateur. Vérifiez le fichier etc/passwd pour les GID en cours d'utilisation.

  • uidNumber

    Il s'agit d'une valeur supérieure à 60 000 qui n'est pas déjà utilisée par un autre groupe. Vérifiez le fichier etc/group pour les UID en cours d'utilisation.

  • uid

    C'est la même chose que username.

Création de répertoires de base utilisateur

JupyterHub a besoin de répertoires personnels dans le conteneur pour authentifier LDAP les utilisateurs et stocker les données d'instance. L'exemple suivant montre deux utilisateurs, Shirley et Diego, dans le LDAP répertoire.

La première étape consiste à interroger le LDAP serveur pour obtenir les informations d'identifiant d'utilisateur et d'identifiant de groupe de chaque utilisateur à l'aide de ldapsearch, comme indiqué dans l'exemple suivant, en remplaçant host avec l'adresse IP ou le nom d'hôte résoluble de votre LDAP serveur :

ldapsearch -x -H ldap://host \ -D "cn=admin,dc=example,dc=org" \ -w admin \ -b "ou=people,dc=example,dc=org" \ -s sub \ "(objectclass=*)" uidNumber gidNumber

La ldapsearch commande renvoie une réponse LDIF au format -qui ressemble à ce qui suit pour les utilisateurs Shirley et Diego.

# extended LDIF # LDAPv3 # base <ou=people,dc=example,dc=org> with scope subtree # filter: (objectclass=*) # requesting: uidNumber gidNumber sn # people, example.org dn: ou=people,dc=example,dc=org # diego, people, example.org dn: cn=diego,ou=people,dc=example,dc=org sn: B uidNumber: 1001 gidNumber: 100 # shirley, people, example.org dn: cn=shirley,ou=people,dc=example,dc=org sn: A uidNumber: 1002 gidNumber: 100 # search result search: 2 result: 0 Success # numResponses: 4 # numEntries: 3

À l'aide des informations contenues dans la réponse, exécutez des commandes dans le conteneur de manière à créer un répertoire de base pour chaque nom commun d'utilisateur (cn). Utilisez la valeur de uidNumber et de gidNumber pour corriger la propriété du répertoire de base pour cet utilisateur. Les exemples de commandes suivants le font pour l'utilisateur : shirley.

sudo docker container exec jupyterhub bash -c "mkdir /home/shirley" sudo docker container exec jupyterhub bash -c "chown -R $uidNumber /home/shirley" sudo docker container exec jupyterhub bash -c "sudo chgrp -R $gidNumber /home/shirley"
Note

LDAPauthenticator for JupyterHub ne prend pas en charge la création d'utilisateurs locaux. Pour plus d'informations, consultez la note de configuration de l'LDAPauthentificateur sur la création d'utilisateurs locaux.

Pour créer manuellement un utilisateur local, utilisez la commande suivante.

sudo docker exec jupyterhub bash -c "echo 'shirley:x:$uidNumber:$gidNumber::/home/shirley:/bin/bash' >> /etc/passwd"

Redémarrer le JupyterHub conteneur

Exécutez la commande suivante pour redémarrer le conteneur jupyterhub :

sudo docker stop jupyterhub sudo docker start jupyterhub