OneLogin とLDAPの連携

f:id:mkmhan:20200924174704p:plain

OneLoginとLDAPを連携する

こんにちは、OneLogin担当の川野です。この記事では、主にOneLoginとLDAPディレクトリの連携方法について説明します。この設定により、ユーザー情報をスムーズにOneLoginを経由してアプリまで展開することができ、かつロール、グループなどユーザーの詳細な情報の引継ぎも効率的に行うことができます。またそれに付随するLDAPディレクトリ統合の方法の種類、バーチャルLDAP(以下、vLDAP)などについても触れていきます。

目次

  1. LDAPディレクトリの統合方法の種類
  2. vLDAP
  3. LDAPの構築方法
  4. LDAPコネクタ接続方法
  5. LDAP SSL 接続方法

LDAPディレクトリの統合方法の種類

LDAPからOneLoginへユーザーを同期するには、LDAP via Connector(以下コネクタ)とLDAP SSL(以下SSL)の二種類があります。 コネクタを利用した場合、リアルタイム同期を実現することができ、かつ同期するOUの範囲や属性のマッピングなど詳細に設定を変更することが可能です。動作させるにはLDAPサーバーにコネクタをインストールして起動させる必要があります。 一方、SSLはOneLogin側にユーザー同期したいLDAPサーバーの情報を書き込むことによって一定間隔でユーザー情報のLDAPサーバーに問い合わせる方法です。LDAPサーバーにコネクタをインストールしたくない場合や、実態のない仮装のLDAPを使用している場合はこちらが推奨されます。

f:id:kawanohate:20200819120155p:plain
LDAPコネクタとLDAP SSLの違い

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)

f:id:kawanohate:20200819181459p:plain
コネクタ設定画面

正常に保存されると、右中央にプルダウンが現れるのでLDAPサーバーとの接続設定をします。Installation Tokenは後に必要になるのでメモ帳などにコピーしておきましょう。また[Download LDAP Connector]をクリックしてコネクタをダウンロードします。
f:id:kawanohate:20200821103955p:plain
LDAP接続のためのコネクタ設定画面

ダウンロードしたコネクタのzipファイルをLDAPサーバーに転送し、展開します。正常に展開されると、「onelogin-ldc-{version}」というディレクトリが出現するので設定ファイル(ldc.conf)のldc.api.tokenパラメーターに先ほどコピーしたInstallation Tokenを入力します。
f:id:kawanohate:20200821113723p:plain
ldc.conf

編集が終わったら、下記コマンドでコネクタプログラムを起動します。

$ ./bin/start-ldc.sh
(Linux,Unix,Mac OS X)

$ ./bin¥start-ldc.bat
(Windows)


コネクタを起動できたら再びOneLoginサイトに管理者としてログインし、Users > Directory からコネクタの設定画面を開きます。

f:id:kawanohate:20200821114244p:plain
コネクタ設定画面を開く

設定画面のConnectionタブから接続に必要な事項を入力します。
f:id:kawanohate:20200821115344p:plain
コネクタ設定画面のConnectionタブ(1)

Ou seletionタブではOneLoginに同期するOuを選択することができます。Mappingタブでは同期する情報の設定や属性の対応付けを行うことができます。Advancedタブではステージングや、削除の際の処理など、より高度な設定が行えます。 ここまで設定できたら最後に右上の[Save]をクリックして設定は終了です。 コネクタのステータスが「Connected」になっていることと、ユーザー一覧からLDAPユーザーが同期されていることを確認しましょう。

f:id:kawanohate:20200902124009p:plain
LDAPコネクタ接続完了

LDAP SSL

準備するもの

  • OneLogin管理者アカウント

  • 構築済みLDAPサーバー

手順

OneLoginに管理者としてログインし、Users > Directories をクリックします。 右上にある[New Directory]から、[LDAP vis SSL]を選択します。 接続するLDAPサーバーの情報を設定画面に入力し、右上の[Save]をクリックします。

f:id:kawanohate:20200821150738p:plain
LDAP SSL の設定画面

右上の[More Action]から[Synchronize Users]をクリックすると、 指定したLDAPサーバーからユーザーの同期が開始されます。 なお、LDAP via SSLのステータスは常にNot Availableとなっているので注意してください。
f:id:kawanohate:20200902162057p:plain
LDAP via SSL設定完了画面

まとめ

以上の設定でOneLoginとLDAPをコネクタもしくはSSLを用いて連携することができました。 より詳細な手順を説明している英語ドキュメントを下記に添付しておきますのでご参照ください。

onelogin.service-now.com