Usar autenticação LDAP - Amazon EMR

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usar autenticação LDAP

O LDAP (Lightweight Directory Access Protocol) é um protocolo de aplicativo para consultar e modificar objetos que correspondem a recursos, como usuários e computadores, armazenados em um provedor de serviços de diretório compatível com LDAP, como o Active Directory ou um servidor OpenLDAP. Você pode usar o plug-in autenticador LDAP for with JupyterHub on JupyterHub Amazon EMR para usar o LDAP para autenticação do usuário. O plug-in processa sessões de login para usuários LDAP e fornece as informações do usuário para o Jupyter. Isso permite que os usuários se conectem a notebooks JupyterHub e notebooks usando as credenciais de suas identidades armazenadas em um servidor compatível com LDAP.

As etapas desta seção orientam você pelas etapas a seguir para configurar e habilitar o LDAP usando o plug-in autenticador LDAP para. JupyterHub Execute as etapas enquanto estiver conectado à linha de comando do nó principal. Para ter mais informações, consulte Conectar-se ao nó principal e aos servidores de cadernos.

  1. Crie um arquivo de configuração LDAP com informações sobre o servidor LDAP, como o endereço IP do host, a porta, nomes de vinculação, e assim por diante.

  2. Modifique /etc/jupyter/conf/jupyterhub_config.py para habilitar o plug-in de autenticação LDAP para. JupyterHub

  3. Crie e execute um script que configura o LDAP dentro do contêiner jupyterhub.

  4. Consulte o LDAP para usuários e, em seguida, crie diretórios pessoais dentro do contêiner para cada usuário. JupyterHub requer diretórios pessoais para hospedar notebooks.

  5. Execute um script que reinicia JupyterHub

Importante

Antes de configurar o LDAP, teste a infraestrutura de rede para garantir que o servidor LDAP e o nó principal do cluster possa se comunicar, conforme necessário. O TLS normalmente usa a porta 389 por meio de uma conexão TCP simples. Se a sua conexão LDAP usar SSL, a porta TCP conhecida para SSL será 636.

Criar o arquivo de configuração do LDAP

O exemplo abaixo usa os seguintes valores de configuração do espaço reservado. Substitua esses valores pelos parâmetros que corresponde à sua implementação.

  • O servidor LDAP está executando a versão 3 e está disponível na porta 389. Essa é a porta não SSL padrão para o LDAP.

  • O nome diferenciado base (DN) é dc=example, dc=org.

Use um editor de texto para criar o arquivo ldap.conf, com conteúdo semelhante ao seguinte. Use os valores apropriados para a sua implementação do LDAP. Substitua o host pelo endereço IP ou pelo nome de host que possa ser resolvido de seu servidor LDAP.

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

Ativar o plug-in de autenticação LDAP para JupyterHub

Use um editor de texto para modificar o arquivo /etc/jupyter/conf/jupyterhub_config.py e adicionar as propriedades ldapauthenticator semelhante ao seguinte. Substitua o host pelo endereço IP ou pelo nome de host que possa ser resolvido do servidor LDAP. O exemplo assume que os objetos do usuário estão dentro de uma unidade organizacional (ou) denominada people (pessoas) e use os componentes de nome distinto que você estabeleceu anteriormente usando o 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'

Configurar o LDAP dentro do contêiner

Use um editor de texto para criar um script bash com o seguinte conteúdo:

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

Salve o script no nó principal e, em seguida, execute-o na linha de comando do nó principal. Por exemplo, com o script salvo como configure_ldap_client.sh, torne o arquivo executável:

chmod +x configure_ldap_client.sh

E execute o script:

./configure_ldap_client.sh

Adicionar atributos ao Active Directory

Para encontrar cada usuário e criar a entrada apropriada no banco de dados, o contêiner JupyterHub docker requer as seguintes propriedades UNIX para o objeto de usuário correspondente no Active Directory. Para obter mais informações, consulte a seção Como continuo a editar os atributos GID/UID RFC 2307 agora que o Plug-in de atributos do Unix não está mais disponível para o snap-in do MMC de usuários e computadores do Active Directory? no artigo Esclarecimento sobre o status do gerenciamento de identidade para Unix (IDMU) da função do servidor NIS na visualização técnica do Windows Server 2016 e além.

  • homeDirectory

    Este é o local para o diretório inicial do usuário, que é geralmente /home/username.

  • gidNumber

    Um valor maior que 60000 que ainda não esteja sendo usado por outro usuário. Verifique o arquivo etc/passwd para ver os GIDs que estão sendo usados.

  • uidNumber

    Um valor maior que 60000 que ainda não esteja sendo usado por outro grupo. Verifique o arquivo etc/group para ver os UDIs que estão sendo usados.

  • uid

    É o mesmo que o nome de usuário.

Criar diretórios iniciais do usuário

JupyterHub precisa de diretórios iniciais dentro do contêiner para autenticar usuários LDAP e armazenar dados da instância. O exemplo a seguir demonstra dois usuários, shirley e diego, no diretório LDAP.

A primeira etapa é consultar o servidor LDAP para cada ID de usuário e informações de ID do grupo usando ldapsearch, conforme mostrado no exemplo a seguir, substituindo host pelo endereço IP ou nome de host que possa ser resolvido do servidor 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

O comando ldapsearch retorna uma resposta formatada LDIF que se parece com a seguinte para os usuários 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

Ao usar as informações da resposta, execute comandos dentro do contêiner para criar um diretório inicial para cada nome comum de usuário (cn). Use o uidNumber e o gidNumber para corrigir a propriedade do diretório inicial desse usuário. Os comandos de exemplo a seguir fazem isso para o usuário 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

O autenticador LDAP para JupyterHub não oferece suporte à criação de usuários locais. Para obter mais informações, consulte Observação da configuração do autenticador do LDAP sobre criação de usuário local.

Para criar um usuário local manualmente, use o comando a seguir.

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

Reinicie o JupyterHub contêiner

Para reiniciar o contêiner jupyterhub, execute os seguintes comandos:

sudo docker stop jupyterhub sudo docker start jupyterhub