LDAP 認証の使用 - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

LDAP 認証の使用

Lightweight Directory Access Protocol (LDAP) は、Active Directory や OpenLDAP サーバーなどの LDAP互換ディレクトリサービスプロバイダーに保存されているユーザーやコンピュータなどのリソースに対応するオブジェクトをクエリおよび変更するためのアプリケーションプロトコルです。 JupyterHub Amazon の で LDAPの認証プラグイン JupyterHubを使用してEMR、ユーザー認証LDAPに使用できます。プラグインはLDAPユーザーのログインセッションを処理し、ユーザー情報を Jupyter に提供します。これにより、ユーザーは LDAP互換サーバーに保存されている ID の認証情報を使用して JupyterHub および ノートブックに接続できます。

このセクションのステップでは、 の認証プラグインLDAPを使用して LDAP をセットアップおよび有効にする手順を順を追って説明します JupyterHub。このステップはマスターノードのコマンドラインに接続している状態で実行します。詳細については、「マスターノードとノートブックサーバーに接続する」を参照してください。

  1. ホスト IP アドレス、ポート、バインディング名など、LDAPサーバーに関する情報を含むLDAP設定ファイルを作成します。

  2. を変更/etc/jupyter/conf/jupyterhub_config.pyして、 LDAP の認証プラグインを有効にします JupyterHub。

  3. jupyterhub コンテナLDAP内で を設定するスクリプトを作成して実行します。

  4. ユーザーLDAPをクエリし、各ユーザーのコンテナ内にホームディレクトリを作成します。ノートブックをホストするには、ホームディレクトリ JupyterHub が必要です。

  5. 再起動するスクリプトを実行する JupyterHub

重要

を設定する前にLDAP、ネットワークインフラストラクチャをテストして、LDAPサーバーとクラスターマスターノードが必要に応じて通信できることを確認します。TLS 通常、 はプレーンTCP接続でポート 389 を使用します。LDAP 接続で を使用している場合SSL、 のよく知られたTCPポートSSLは 636 です。

LDAP 設定ファイルを作成する

以下の例では、次のプレースホルダー設定の値を使用します。これらの値を実装と一致するパラメータに置き換えます。

  • LDAP サーバーはバージョン 3 を実行しており、ポート 389 で使用できます。これは、 の標準非SSLポートですLDAP。

  • ベース識別子名 (DN) は dc=example, dc=org です。

テキストエディタを使用して、次のようなコンテンツを含む ldap.conf ファイルを作成します。LDAP 実装に適した値を使用します。置換 host LDAP サーバーの IP アドレスまたは解決可能なホスト名。

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

LDAP の認証プラグインを有効にする JupyterHub

テキストエディタを使用して /etc/jupyter/conf/jupyterhub_config.py ファイルを変更し、次のような ldapauthenticator プロパティを追加します。置換 host LDAP サーバーの IP アドレスまたは解決可能なホスト名。この例では、ユーザーオブジェクトが という名前の組織単位 (ou) 内にあることを前提としています。people、、および は、 を使用して以前に確立した識別名コンポーネントを使用します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'

コンテナLDAP内で を設定する

テキストエディタを使用して、次のコンテンツを含む bash スクリプトを作成します。

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

マスターノードにスクリプトを保存し、マスターノードのコマンドラインから実行します。たとえば、configure_ldap_client.sh として保存されているスクリプトでファイルを実行可能にします。

chmod +x configure_ldap_client.sh

スクリプトを実行します。

./configure_ldap_client.sh

Active Directory に属性を追加する

各ユーザーを検索してデータベースに適切なエントリを作成するには、 JupyterHub Docker コンテナで Active Directory の対応するユーザーオブジェクトに次のUNIXプロパティが必要です。詳細については、「Windows Server RFC2016 のテクニカルプレビューおよびそれ以降の Unix () およびサーバーロールの ID 管理のステータスに関する説明」の「Unix 属性プラグインが Active Directory ユーザーおよびコンピュータのMMCスナップインで使用できなくなったため、 GID/UID 2307 属性の編集を続行する方法」セクションを参照してください。 IDMU NIS

  • homeDirectory

    これは、ユーザーのホームディレクトリへの場所 (通常は /home/username) です。

  • gidNumber

    これは、別のユーザーがすでに使用していない 60000 より大きい値です。使用中の GID については、etc/passwd ファイルを確認してください。

  • uidNumber

    これは、別のグループがすでに使用していない 60000 より大きい値です。使用中の UID については、etc/group ファイルを確認してください。

  • uid

    これは、 と同じです。username.

ユーザーのホームディレクトリを作成する

JupyterHub では、LDAPユーザーを認証し、インスタンスデータを保存するために、コンテナ内のホームディレクトリが必要です。次の例は、 LDAP ディレクトリ内の shirley""go の 2 人のユーザーを示しています。

最初のステップでは、次の例に示すように、ldapsearch を使用して各ユーザーのユーザー ID およびグループ ID 情報をLDAPサーバーにクエリし、host LDAP サーバーの IP アドレスまたは解決可能なホスト名:

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

このldapsearchコマンドは、ユーザーの shirley"ego に対して次のような LDIF形式のレスポンスを返します。

# 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

レスポンスからの情報を使用し、コンテナ内のコマンドを実行して各ユーザーの共通名 (cn) にホームディレクトリを作成します。uidNumbergidNumber を使用して、そのユーザーのホームディレクトリの所有権を修正します。次のコマンド例では、ユーザーに対してこれを行います。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"
注記

LDAP の認証機能は、ローカルユーザーの作成をサポート JupyterHub していません。詳細については、LDAPローカルユーザー作成の「Authenticator configuration note」を参照してください。

ローカルユーザーを手動で作成するには、次のコマンドを使用します。

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

コンテナを再起動する JupyterHub

以下のコマンドを実行して、jupyterhub コンテナを再起動します。

sudo docker stop jupyterhub sudo docker start jupyterhub