Menggunakan autentikasi LDAP - Amazon EMR

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan autentikasi LDAP

Lightweight Directory Access Protocol (LDAP) adalah sebuah protokol aplikasi untuk mengkueri dan memodifikasi objek yang sesuai dengan sumber daya seperti pengguna dan komputer yang disimpan dalam penyedia layanan direktori LDAP-kompatibel seperti Direktori Aktif atau OpenLDAP server. Anda dapat menggunakan LDAP authenticator plugin untuk JupyterHub dengan JupyterHub di Amazon EMR guna menggunakan LDAP untuk autentikasi pengguna. Plugin menangani sesi login untuk pengguna LDAP dan memberikan informasi pengguna untuk Jupyter. Hal ini memungkinkan pengguna terhubung ke JupyterHub dan notebook dengan menggunakan kredensyal untuk identitas yang disimpan dalam server LDAP-kompatibel.

Langkah-langkah dalam bagian ini akan memandu Anda untuk mengatur dan mengaktifkan LDAP menggunakan LDAP Authenticator Plugin untuk JupyterHub. Anda melakukan langkah-langkah tersebut namun tetap terhubung ke baris perintah simpul utama. Untuk informasi selengkapnya, lihat Menyambung ke simpul utama dan server Notebook.

  1. Buat file konfigurasi LDAP dengan informasi tentang LDAP server, seperti alamat IP host, port, mengikat nama, dan sebagainya.

  2. Memodifikasi/etc/jupyter/conf/jupyterhub_config.py untuk mengaktifkan LDAP Authenticator Plugin untuk JupyterHub.

  3. Buat dan jalankan skrip yang mengonfigurasi LDAP dalam jupyterhub kontainer.

  4. Permintaan LDAP untuk pengguna, dan kemudian membuat direktori rumah dalam kontainer untuk setiap pengguna. JupyterHub membutuhkan direktori home untuk menghosting notebook.

  5. Jalankan skrip yang memulai ulang JupyterHub

penting

Sebelum Anda mengatur LDAP, periksa infrastruktur jaringan Anda untuk memastikan bahwa LDAP server dan simpul utama klaster dapat berkomunikasi seperti yang diperlukan. TLS biasanya menggunakan port 389 melalui sambungan TCP biasa. Jika sambungan LDAP Anda menggunakan SSL, port TCP terkenal untuk SSL adalah 636.

Buat file konfigurasi

Contoh di bawah ini menggunakan nilai konfigurasi tempat-pemegang berikut. Ganti ini dengan parameter yang sesuai dengan implementasi Anda.

  • LDAP server menjalankan versi 3 dan tersedia untuk port 389. Ini adalah port non-SSL standar untuk LDAP.

  • Nama khusus dasar (DN) adalah dc=example, dc=org.

Gunakan editor teks untuk membuat file ldap.conf, dengan konten yang serupa dengan berikut ini. Gunakan nilai-nilai yang sesuai untuk pelaksanaan LDAP Anda. Ganti host dengan alamat IP atau nama host yang dapat diatasi dari server LDAP Anda.

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

Aktifkan LDAP Authenticator Plugin untuk JupyterHub

Gunakan editor teks untuk mengubah /etc/jupyter/conf/jupyterhub_config.py file dan menambahkan properti ldapauthenticator yang serupa dengan berikut ini. Ganti host dengan alamat IP atau nama host yang dapat diatasi dari server LDAP. Contoh mengasumsikan bahwa objek pengguna berada dalam unit organisasi (ou) bernama orang, dan menggunakan komponen nama khusu yang Anda buat sebelumnya menggunakan 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'

Konfigurasikan LDAP dalam kontainer

Gunakan editor teks untuk membuat skrip bash dengan konten sebagai berikut:

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

Simpan skrip ke simpul utama, dan kemudian jalankan dari baris perintah simpul utama. Sebagai contoh, dengan skrip yang disimpan sebagai configure_ldap_client.sh, buat file agar dapat dijalankan:

chmod +x configure_ldap_client.sh

Dan jalankan skrip:

./configure_ldap_client.sh

Tambahkan atribut ke Direktori Aktif

Untuk menemukan setiap pengguna dan membuat entri yang sesuai dalam basis data, kontainer JupyterHub docker memerlukan properti UNIX berikut untuk objek pengguna yang sesuai di Direktori Aktif. Untuk informasi selengkapnya, lihat bagian Bagaimana cara untuk melanjutkan mengedit atribut GID/UID RFC 2307 bahwa sekarang Unix atribut Plug-in tidak lagi tersedia untuk Direktori Aktif Pengguna dan Komputer MMC snap-in? dalam artikel Klarifikasi mengenai status manajemen identitas untuk peran server Unix (IDMU) dan NIS di pratinjau teknis Windows Server 2016 dan seterusnya.

  • homeDirectory

    Ini adalah lokasi ke direktori home pengguna, yang biasanya /home/username.

  • gidNumber

    Ini adalah nilai yang lebih besar dari 60000 yang sudah tidak digunakan oleh pengguna lain. Periksa etc/passwd file untuk gids yang digunakan.

  • uidNumber

    Ini adalah nilai yang lebih besar dari 60000 yang sudah tidak digunakan oleh grup lain. Periksa etc/group file untuk uids yang sedang digunakan.

  • uid

    Ini sama dengan nama pengguna.

Buat direktori home pengguna

JupyterHub membutuhkan direktori home dalam kontainer untuk mengautentikasi pengguna LDAP dan menyimpan data instans. Contoh berikut menunjukkan dua pengguna, shirley dan diego, dalam direktori LDAP.

Langkah pertama adalah mengkueri server LDAP untuk setiap id pengguna id dan informasi id grup menggunakan ldapsearch seperti yang ditunjukkan dalam contoh berikut, mengganti host dengan alamat IP atau nama host yang dapat diatasi dari server LDAP Anda:

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

Perintah ldapsearch mengembalikan respon LDIF diformat yang terlihat mirip dengan berikut ini untuk pengguna shirley dan 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

Menggunakan informasi dari respon, jalankan perintah dalam kontainer untuk membuat direktori home untuk setiap nama umum pengguna (cn). Gunakan uidNumber dan gidNumber untuk memperbaiki kepemilikan direktori home untuk pengguna tersebut. Contoh perintah berikut melakukan hal ini untuk pengguna 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"
catatan

Authenticator LDAP untuk JupyterHub tidak mendukung pembuatan pengguna lokal. Untuk informasi lebih lanjut, lihat Catatan konfigurasi autentikator LDAP pada pembuatan pengguna lokal.

Untuk membuat pengguna lokal secara manual, gunakan perintah berikut.

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

Mulai ulang JupyterHub kontainer

Jalankan perintah berikut untuk memulai ulang jupyterhub kontainer:

sudo docker stop jupyterhub sudo docker start jupyterhub