Usar autenticação LDAP - Amazon EMR

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 Plugin do autenticador LDAP para JupyterHub com o JupyterHub no Amazon EMR para usar 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 ao JupyterHub e aos notebooks usando as credenciais de suas identidades armazenadas em um servidor compatível com LDAP.

As etapas nesta seção mostram as etapas a seguir para configurar e ativar o LDAP usando o Plugin do Autenticador LDAP para o JupyterHub. Execute as etapas enquanto estiver conectado à linha de comando do nó principal. Para obter 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 Plugin do autenticador LDAP para o JupyterHub.

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

  4. Consulte LDAP para usuários e, em seguida, crie diretórios iniciais no contêiner de cada usuário. O JupyterHub requer diretórios iniciais para hospedar notebooks.

  5. Execute um script que reinicia o 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

Habilitar o Plugin do autenticador LDAP para o 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 localizar cada usuário e criar a entrada apropriada no banco de dados, o contêiner de docker JupyterHub requer as seguintes propriedades do 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

O JupyterHub precisa de diretórios iniciais dentro do contêiner para autenticar usuários do 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ário local. 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"

Reiniciar o contêiner do JupyterHub

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

sudo docker stop jupyterhub sudo docker start jupyterhub