OneLoginとLDAPを連携する
こんにちは、OneLogin担当の川野です。この記事では、主にOneLoginとLDAPディレクトリの連携方法について説明します。この設定により、ユーザー情報をスムーズにOneLoginを経由してアプリまで展開することができ、かつロール、グループなどユーザーの詳細な情報の引継ぎも効率的に行うことができます。またそれに付随するLDAPディレクトリ統合の方法の種類、バーチャルLDAP(以下、vLDAP)などについても触れていきます。
目次
- LDAPディレクトリの統合方法の種類
- vLDAP
- LDAPの構築方法
- LDAPコネクタ接続方法
- LDAP SSL 接続方法
LDAPディレクトリの統合方法の種類
LDAPからOneLoginへユーザーを同期するには、LDAP via Connector(以下コネクタ)とLDAP SSL(以下SSL)の二種類があります。 コネクタを利用した場合、リアルタイム同期を実現することができ、かつ同期するOUの範囲や属性のマッピングなど詳細に設定を変更することが可能です。動作させるにはLDAPサーバーにコネクタをインストールして起動させる必要があります。 一方、SSLはOneLogin側にユーザー同期したいLDAPサーバーの情報を書き込むことによって一定間隔でユーザー情報のLDAPサーバーに問い合わせる方法です。LDAPサーバーにコネクタをインストールしたくない場合や、実態のない仮装のLDAPを使用している場合はこちらが推奨されます。
vLDAP
OneLoginにはOneLogin自体がLDAPサーバーとしてふるまうことができるvLDAPという機能があります。OneLoginのフィールドがLDAPとしての属性として使われ、ディレクトリサーバーを持っていなくてもOneLoginで代替することができます。
LDAPの構築方法
LDAPサーバーの構築法をご説明します。本記事ではCentOS7でopenLDAPを使うものとします。 サーバーにルートユーザーとして入り、openldapをインストールします。最初に設定ファイルやその権限についての設定を行います。
$ yum install -y openldap openldap-servers openldap-clients $ cp -p /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/db_config $ chown ldap. /var/lib/ldap/db_config
LDAPサーバー開始させ、自動起動を有効にしておきます。
$ systemctl start slapd $ systemctl enable slapd
LDAPサーバーはセッション数が多いので、上限値を変更しておく方が良いでしょう。
また、ログの量も多いためログローテートの設定もしておきましょう。
$ vi /etc/rsyslog.conf --- local4.* /var/log/slapd/slapd.log --- $ systemctl restart rsyslog $ vi /etc/logratate.d/syslog --- /var/log/slapd/slapd.log ---
次にスキーマやモジュールの追加などの設定をする設定管理者の設定をします。それぞれのためのパスワードを生成し、LDIFファイルに書き込むことで設定します。 slappasswdコマンドの後にパスワードを二度入力し、出力された暗号ハッシュを控えておいてください
$ slappasswd $ mkdir /root/ldif $ vi /root/ldif/rootdn.ldif --- dn: olcDatabase={0}config,cn=config changetype: modify add: olcRootDN olcRootDN: cn=admin,cn=config - add: olcRootPW olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxx #ここに先ほど控えたハッシュを書く --- $ ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/ldif/rootdn.ldif #設定管理者の情報反映
次に設定した設定管理者のパスワードを用いて基本的なスキーマを追加します。これらのスキーマにより後に作成するユーザーグループやユーザーのオブジェクトクラスが定義されます。
$ ldapadd -x -W -D cn=admin,cn=config -f /etc/openldap/schema/cosine.ldif $ ldapadd -x -W -D cn=admin,cn=config -f /etc/openldap/schema/nis.ldif $ ldapadd -x -W -D cn=admin,cn=config -f /etc/openldap/schema/inetorgperson.ldif $ ldapadd -x -W -D cn=admin,cn=config -f /etc/openldap/schema/ppolicy.ldif
今度はディレクトリ構成の設定を行うディレクトリマネージャーの設定をします。
こちらもパスワードを生成し、それをLDIFファイルに書き込み反映させることで設定できます。
$ slappasswd #ディレクトリマネージャーパスワード生成 $ vi /root/ldif/hdbconfig.ldif --- dn: olcDatabase={1}monitor,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=admin,dc=ldap,dc=example,dc=com" read by * none dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=ldap,dc=example,dc=com - replace: olcRootDN olcRootDN: cn=admin,dc=ldap,dc=example,dc=com - add: olcRootPW olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxx #ディレクトリマネージャーのパスワードのハッシュ - add: olcAccess olcAccess: {0}to dn.sub="ou=tool,dc=ldap,dc=example,dc=com" attrs=userPassword,shadowLastChange by self write by anonymous auth by dn.sub="ou=user,dc=ldap,dc=example,dc=com" write by dn.sub="ou=tool,dc=ldap,dc=example,dc=com" write by users none olcAccess: {1}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn.sub="ou=user,dc=ldap,dc=example,dc=com" write by users none olcAccess: {2}to by dn.sub="ou=user,dc=ldap,dc=example,dc=com" write by read --- $ ldapmodify -x -W -D cn=admin,cn=config -f /root/ldif/hdbconfig.ldif #ディレクトリマネージャーの情報反映
ここまでの設定が正常に行えたか確認します。
ldapsearchはディレクトリ情報を検索するコマンドです。
正しくデータが帰ってくれば設定は正常に行えています。
$ ldapsearch -x -LLL -W -D cn=admin,cn=config -b cn=config olcDatabase={1}monitor $ ldapsearch -x -LLL -W -D cn=admin,cn=config -b cn=config olcDatabase={2}hdb
LDAPコネクタ
準備するもの
OneLogin管理者アカウント
構築済みLDAPサーバー
Oracle JRE8 もしくはOpenJDKのJAVAランタイム環境
Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files(以下からインストールできます) www.oracle.com
手順
OneLoginに管理者としてログインし、Users > Directoryを選択します。
右上の[ New Directory ]から[ LDAP via Connector ] の [Choose]をクリックします。
コネクタの設定画面が表示されるので、コネクタ名とOneLoginでの表示名を入力します。(例 LDAPコネクタ pentio-dev)
正常に保存されると、右中央にプルダウンが現れるのでLDAPサーバーとの接続設定をします。Installation Tokenは後に必要になるのでメモ帳などにコピーしておきましょう。また[Download LDAP Connector]をクリックしてコネクタをダウンロードします。
ダウンロードしたコネクタのzipファイルをLDAPサーバーに転送し、展開します。正常に展開されると、「onelogin-ldc-{version}」というディレクトリが出現するので設定ファイル(ldc.conf)のldc.api.tokenパラメーターに先ほどコピーしたInstallation Tokenを入力します。
編集が終わったら、下記コマンドでコネクタプログラムを起動します。
$ ./bin/start-ldc.sh (Linux,Unix,Mac OS X) $ ./bin¥start-ldc.bat (Windows)
コネクタを起動できたら再びOneLoginサイトに管理者としてログインし、Users > Directory からコネクタの設定画面を開きます。
設定画面のConnectionタブから接続に必要な事項を入力します。
Ou seletionタブではOneLoginに同期するOuを選択することができます。Mappingタブでは同期する情報の設定や属性の対応付けを行うことができます。Advancedタブではステージングや、削除の際の処理など、より高度な設定が行えます。
ここまで設定できたら最後に右上の[Save]をクリックして設定は終了です。
コネクタのステータスが「Connected」になっていることと、ユーザー一覧からLDAPユーザーが同期されていることを確認しましょう。
LDAP SSL
準備するもの
OneLogin管理者アカウント
構築済みLDAPサーバー
手順
OneLoginに管理者としてログインし、Users > Directories をクリックします。
右上にある[New Directory]から、[LDAP vis SSL]を選択します。
接続するLDAPサーバーの情報を設定画面に入力し、右上の[Save]をクリックします。
右上の[More Action]から[Synchronize Users]をクリックすると、
指定したLDAPサーバーからユーザーの同期が開始されます。
なお、LDAP via SSLのステータスは常にNot Availableとなっているので注意してください。
まとめ
以上の設定でOneLoginとLDAPをコネクタもしくはSSLを用いて連携することができました。 より詳細な手順を説明している英語ドキュメントを下記に添付しておきますのでご参照ください。