LDAPAuthentifizierung wird verwendet - 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.

LDAPAuthentifizierung wird verwendet

Das Lightweight Directory Access Protocol (LDAP) ist ein Anwendungsprotokoll zum Abfragen und Ändern von Objekten, die Ressourcen wie Benutzern und Computern entsprechen, die in einem LDAP -kompatiblen Verzeichnisdienstanbieter wie Active Directory oder einem Open LDAP Server gespeichert sind. Sie können das LDAPAuthenticator-Plugin for JupyterHub with bei JupyterHub Amazon LDAP für EMR die Benutzerauthentifizierung verwenden. Das Plugin verarbeitet Anmeldesitzungen für LDAP Benutzer und stellt Benutzerinformationen für Jupyter bereit. Auf diese Weise können Benutzer eine Verbindung zu JupyterHub Notebooks herstellen, indem sie die Anmeldeinformationen für ihre Identitäten verwenden, die auf einem -kompatiblen Server gespeichert sind. LDAP

Die Schritte in diesem Abschnitt führen Sie durch die folgenden Schritte zur Einrichtung und Aktivierung LDAP mithilfe des LDAP Authenticator-Plug-ins für. JupyterHub Sie führen die Schritte aus, während Sie mit der Befehlszeile des Master-Knotens verbunden sind. Weitere Informationen finden Sie unter Eine Verbindung mit dem Hauptknoten und Notebook-Servern herstellen.

  1. Erstellen Sie eine LDAP Konfigurationsdatei mit Informationen zum LDAP Server, z. B. der Host-IP-Adresse, dem Port, den Bindungsnamen usw.

  2. Ändern Sie/etc/jupyter/conf/jupyterhub_config.py, um das LDAP Authenticator-Plug-In für JupyterHub zu aktivieren.

  3. Erstellen Sie ein Skript, das LDAP innerhalb des Containers konfiguriert wird, und führen Sie es ausjupyterhub.

  4. Fragen Sie LDAP nach Benutzern ab und erstellen Sie dann Basisverzeichnisse innerhalb des Containers für jeden Benutzer. JupyterHub benötigt Home-Verzeichnisse zum Hosten von Notebooks.

  5. Führen Sie ein Skript aus, das neu gestartet wird JupyterHub

Wichtig

Testen Sie vor der Einrichtung Ihre NetzwerkinfrastrukturLDAP, um sicherzustellen, dass der LDAP Server und der Cluster-Masterknoten wie gewünscht kommunizieren können. TLSverwendet in der Regel Port 389 über eine einfache TCP Verbindung. Wenn Ihre LDAP Verbindung verwendetSSL, SSL ist der bekannte TCP Port für 636.

Erstellen Sie die LDAP Konfigurationsdatei

Das folgende Beispiel verwendet die folgenden Platzhalter-Konfigurationswerte. Ersetzen Sie diese durch Parameter, die Ihrer Implementierung entsprechen.

  • Auf dem LDAP Server läuft Version 3 und er ist auf Port 389 verfügbar. Dies ist der SSL Standard-Nicht-Port fürLDAP.

  • Der grundlegende spezifische Name (DN, Distinguished Name) ist dc=example, dc=org.

Erstellen Sie mit einem Texteditor die Datei ldap.conf mit Inhalt, der etwa wie folgt aussieht. Verwenden Sie für Ihre LDAP Implementierung geeignete Werte. Ersetzen host mit der IP-Adresse oder dem auflösbaren Hostnamen Ihres LDAP Servers.

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

Aktivieren Sie das LDAP Authenticator-Plugin für JupyterHub

Verwenden Sie einen Texteditor, um die Datei /etc/jupyter/conf/jupyterhub_config.py zu ändern, und fügen Sie ldapauthenticator-Eigenschaften hinzu, etwa wie folgt. Ersetzen host mit der IP-Adresse oder dem auflösbaren Hostnamen des LDAP Servers. Das Beispiel geht davon aus, dass sich die Benutzerobjekte innerhalb einer Organisationseinheit (ou) mit dem Namen befinden people, und verwendet die definierten Namenskomponenten, die Sie zuvor mithilfe von eingerichtet habenldap.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'

Konfigurieren Sie LDAP innerhalb des Containers

Erstellen Sie mithilfe eines Texteditors ein Bash-Skript mit folgendem Inhalt:

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

Speichern Sie das Skript auf dem Master-Knoten und führen Sie es in der Befehlszeile des Master-Knotens aus. Wenn das Skript beispielsweise als configure_ldap_client.sh gespeichert ist, machen Sie die Datei ausführbar:

chmod +x configure_ldap_client.sh

Und führen das Skript aus:

./configure_ldap_client.sh

Attribute zur Active Directory hinzufügen

Um jeden Benutzer zu finden und den entsprechenden Eintrag in der Datenbank zu erstellen, benötigt der JupyterHub Docker-Container die folgenden UNIX Eigenschaften für das entsprechende Benutzerobjekt in Active Directory. Weitere Informationen finden Sie im Abschnitt Wie kann ich die GID UID RFC /2307-Attribute weiter bearbeiten, nachdem das Unix-Attributs-Plug-In nicht mehr für das Snap-In „Active Directory-Benutzer und -ComputerMMC“ verfügbar ist? im Artikel Klarstellung zum Status der Identitätsverwaltung für Unix (IDMU) und zur NIS Serverrolle in der technischen Vorschau von Windows Server 2016 und darüber hinaus.

  • homeDirectory

    Dies ist der Speicherort im Stammverzeichnis des Benutzers, das in der Regel /home/username ist.

  • gidNumber

    Dies ist ein Wert größer als 60.000, der noch nicht von einem anderen Benutzer verwendet wird. Überprüfen Sie die etc/passwd-Datei auf GIDs, die bereits verwendet werden.

  • uidNumber

    Dies ist ein Wert größer als 60000, der noch nicht von einer anderen Gruppe verwendet wird. Überprüfen Sie die etc/group-Datei auf UIDs, die bereits verwendet werden.

  • uid

    Das ist dasselbe wie username.

Root-Verzeichnisse für Benutzer erstellen

JupyterHub benötigt Home-Verzeichnisse innerhalb des Containers, um LDAP Benutzer zu authentifizieren und Instanzdaten zu speichern. Das folgende Beispiel zeigt zwei Benutzer, Shirley und Diego, im LDAP Verzeichnis.

Der erste Schritt besteht darin, den LDAP Server mit ldapsearch nach den Benutzer-ID- und Gruppen-ID-Informationen der einzelnen Benutzer abzufragen, wie im folgenden Beispiel gezeigt, und dabei Folgendes zu ersetzen host mit der IP-Adresse oder dem auflösbaren Hostnamen Ihres Servers: LDAP

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

Der ldapsearch Befehl gibt eine LDIF -formatierte Antwort zurück, die für die Benutzer Shirley und Diego der folgenden ähnelt.

# 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

Unter Verwendung der Informationen aus der Antwort führen Sie Befehle innerhalb des Containers zum Erstellen eines Stammverzeichnisses für jeden allgemeinen Namen (cn) des Benutzers aus. Verwenden Sie uidNumber und gidNumber, um das Eigentum für das Stammverzeichnis für diesen Benutzer festzulegen. Die folgenden Beispielbefehle erledigen dies für den Benutzer 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"
Anmerkung

LDAPAuthenticator for JupyterHub unterstützt die lokale Benutzererstellung nicht. Weitere Informationen finden Sie in der Anmerkung zur Konfiguration LDAP des Authentifikators zur lokalen Benutzererstellung.

Um einen lokalen Benutzer manuell zu erstellen, verwenden Sie den folgenden Befehl.

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

Starten Sie den Container JupyterHub neu

Führen Sie den folgenden Befehl aus, um den jupyterhub-Container neu zu starten:

sudo docker stop jupyterhub sudo docker start jupyterhub