Utilizzo dell'autenticazione LDAP - 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à.

Utilizzo dell'autenticazione LDAP

LDAP è un protocollo di applicazioni per inviare query e modificare oggetti che corrispondono a risorse quali utenti e computer archiviati in un provider di servizi di directory compatibile con LDAP, ad esempio Active Directory o un server OpenLDAP. Puoi utilizzare il plug-in di autenticazione LDAP per with JupyterHub su JupyterHub Amazon EMR per utilizzare LDAP per l'autenticazione degli utenti. Il plugin gestisce sessioni di accesso per utenti LDAP e fornisce informazioni utente a Jupyter. Ciò consente agli utenti di connettersi ai notebook utilizzando JupyterHub le credenziali per le loro identità archiviate in un server compatibile con LDAP.

I passaggi di questa sezione illustrano i seguenti passaggi per configurare e abilitare LDAP utilizzando il plug-in LDAP Authenticator per. JupyterHub Eseguire le fasi mentre si è connessi alla riga di comando del nodo master. Per ulteriori informazioni, consulta Connessione al nodo master e ai server notebook.

  1. Crea un file di configurazione LDAP con informazioni sul server LDAP, ad esempio l'indirizzo IP host, la porta, i nomi di binding e così via.

  2. Modifica /etc/jupyter/conf/jupyterhub_config.py per abilitare il plugin LDAP Authenticator per. JupyterHub

  3. Crea ed esegui uno script che configura LDAP all'interno del container jupyterhub.

  4. Interroga LDAP per gli utenti, quindi crea le home directory all'interno del contenitore per ogni utente. JupyterHub richiede le home directory per ospitare i notebook.

  5. Esegui uno script che si riavvia JupyterHub

Importante

Prima di configurare LDAP, verifica l'infrastruttura di rete per garantire che il server LDAP e il nodo master del cluster siano in grado di comunicare come richiesto. TLS utilizza in genere la porta 389 su una connessione TCP semplice. Se la connessione LDAP utilizza SSL, la porta TCP nota per SSL è 636.

Creazione del file di configurazione LDAP

Nell'esempio seguente vengono utilizzati i seguenti valori di configurazione del segnaposto. Sostituiscili con i parametri che soddisfano l'implementazione.

  • Il server LDAP esegue la versione 3 ed è disponibile sulla porta 389. Questa è la porta non SSL standard per LDAP.

  • Il nome distinto di base (DN) è dc=example, dc=org.

Utilizza un editor di testo per creare il file ldap.conf, con contenuti simili ai seguenti. Utilizza valori appropriate per l'implementazione LDAP. Sostituisci host con l'indirizzo IP o il nome host risolvibile del server LDAP.

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

Abilita il plug-in LDAP Authenticator per JupyterHub

Utilizza un editor di testo per modificare il file /etc/jupyter/conf/jupyterhub_config.py e aggiungere proprietà ldapauthenticator simili alle seguenti. Sostituisci host con l'indirizzo IP o il nome host risolvibile del server LDAP. L'esempio presuppone che gli oggetti utente si trovino all'interno di un'unità organizzativa (ou) denominata people e utilizza i componenti nome distinto definiti in precedenza utilizzando ldap.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'

Configurazione di LDAP all'interno del container

Utilizza un editor di testo per creare uno script bash con il seguente contenuto:

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

Salva lo script nel nodo master, quindi eseguilo dalla riga di comando del nodo master. Ad esempio, con lo script salvato come configure_ldap_client.sh, rendi il file eseguibile:

chmod +x configure_ldap_client.sh

Ed esegui lo script:

./configure_ldap_client.sh

Aggiunta di attributi ad Active Directory

Per trovare ogni utente e creare la voce appropriata nel database, il contenitore JupyterHub docker richiede le seguenti proprietà UNIX per l'oggetto utente corrispondente in Active Directory. Per ulteriori informazioni, consulta la sezione relativa a Come si può continuare a modificare gli attributi GID/UID RFC 2307 ora che il plug-in degli attributi Unix non è più disponibile per lo snap-in MMC di utenti e computer di Active Directory nell'articolo sul Chiarimento sullo stato di Identity Management per Unix (IDMU) e sul ruolo del server NIS in Windows Server 2016 Technical Preview e oltre.

  • homeDirectory

    Questo è il percorso alla home directory dell'utente, in genere /home/username.

  • gidNumber

    Si tratta di un valore maggiore di 60000 che non è già utilizzato da un altro utente. Seleziona il file etc/passwd per i gid in uso.

  • uidNumber

    Si tratta di un valore maggiore di 60000 che non è già utilizzato da un altro gruppo. Seleziona il file etc/group per gli uid in uso.

  • uid

    È uguale al nome utente.

Creazione di home directory dell'utente

JupyterHub necessita di home directory all'interno del contenitore per autenticare gli utenti LDAP e archiviare i dati delle istanze. Nell'esempio seguente vengono illustrati due utenti, shirley e diego, nella directory LDAP.

La prima fase è eseguire una query sul server LDAP per ogni informazione id utente e id gruppo dell'utente utilizzando ldapsearch come mostrato nell'esempio seguente, sostituendo host con l'indirizzo IP o il nome host risolvibile del server 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

Il comando ldapsearch restituisce una risposta in formato LDIF il cui aspetto è simile al seguente per gli utenti shirley e 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

Utilizzando le informazioni della risposta, esegui comandi all'interno del container per creare una home directory per ogni nome comune dell'utente (cn). Utilizza uidNumber e gidNumber per correggere la proprietà per la home directory di tale utente. I comandi dell'esempio seguente consentono di eseguire questa operazione per l'utente 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"
Nota

L'autenticatore LDAP per JupyterHub non supporta la creazione di utenti locali. Per ulteriori informazioni, consulta Nota sulla configurazione di LDAP Authenticator per la creazione di utenti locali.

Per creare manualmente un utente locale, utilizzare il comando seguente.

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

Riavvia il contenitore JupyterHub

Esegui i comandi seguenti per riavviare il container jupyterhub:

sudo docker stop jupyterhub sudo docker start jupyterhub