LoginSignup
2
3

More than 5 years have passed since last update.

OpenAM 組込データストアへのユーザ一括追加

Posted at

はじめに

本記事は、OpenAM/OpenIGを使用したシングルサインオン環境の構築という記事から続く関連記事の一部です

OpenAMでは、組込ユーザデータストアというものが用意されており、新しいユーザアカウントを作成したりすると、実体としてこのデータストアに情報が書き込まれる。
デフォルトユーザとして、dmeoが用意されていて、このユーザアカウントを使って、別記事にてSSOの動作確認をしている。
実際に社内システムなどで本番環境として運用するとなると、別のユーザデータストア(AD)と連携させることになると思うが、検証段階では組込データストアをそのまま使い続けていることも少なくないと思う。
そんなとき、検証のためにユーザアカウントを大量に用意したい・・・という場合、そんな機能はOpenAMには用意されていなかったため、少し変則的な方法をとって対応したため、そのときの方法を本記事にまとめる。
※もっと良い方法があるかもしれない

まぁ何がやりたかったかと言うと、Jmeterを使って大量のユーザのログインを行いOpenAMの負荷試験をやりたかった。
同じユーザアカウントを使うよりも別々のものを使ったほうが、負荷試験としては正しいと思うので大量のユーザアカウントが必要になった。

前提

  • OpenAMがインストールされているサーバはCentOS7.3を想定
  • OpenAMは無料で手に入るv13.0を使用

環境

  • OpenAM
    • サーバOS: CentOS7.3
    • ホスト名: sso.test.local
    • IPアドレス: 172.16.1.130
    • JDK Ver: 1.8.0_111
    • Tomcat Ver: 8.0.39
    • OpenAM Ver: 13.0.0

目標

OpenAMの組込ユーザデータストアにユーザアカウント5000個を一括追加する

事前に用意しておくもの

  • Apache Directory Studio

概要

OpenAMの組込ユーザデータストアは、実際にはOpenDJというForgerockが開発しているOSSのディレクトリサーバである。
それの最小版かどうかよくわからないが、小さいOpenDJが内部的に動作している。
OpenDJは結局のところLDAPサーバなので、普通にLDAP Searchなどが使える。
つまり、何をするかというと、OpenDJにLDAPツールを使って接続し、既存ユーザアカウントのldifをエクスポート => 丸々コピーして少し内容書き換えた大量のユーザアカウントのldifを用意 => OpenDJにインポート という流れになる。

実作業

  1. Apache Directory Studio を起動し、左上のNew Connectionを実行。以下の通り設定する。
  • Network Parameter
    • Connection name: 任意
    • Hostname: OpenAMのIPアドレス/ホスト名
    • Port: 50389
    • Encryption method: No encryption
    • Provider: Apache Directory LDAP Client API
  • Authentication
    • Authentication Method: Simple Authentication
    • Authentication Parameter
    • Bind DN or user: cn=Directory Manager
    • Bind password: amadminのパスワード

2017-03-29-16-34-26.png

2017-03-29-16-34-50.png

2.前項のNew Connectionの隣のOpen Connectionを実行。正常にLDAP接続できれば、ツリー状の構造が表示されるはず。
2017-03-29-16-37-36.png

3.ツリーを下ると、peopleというouの中にuid=demoが見つかる。これがデフォルトのユーザアカウントdemoの実体。これを右クリ => Export => LDIF Export を実行。LDIF Exportのウィアードが立ち上がるので何も弄らず Next => LDIF File にファイル保存パスを入力し、Finish

2017-03-29-16-39-36.png

4.試しにLDIFファイルを覗いてみる。userPasswordはSSHAで保存されているので平文では見えない。とはいえchangeitなのはわかっているが。このファイルをベースに、uid/cn/sn/userPasswordだけを変更してユーザアカウントを大量に生成しそのLDFIをインポートする。これでdemoアカウントのクローンとして大量のユーザアカウントを作成できる。

version: 1

dn: uid=demo,ou=people,dc=openam,dc=forgerock,dc=org
objectClass: iplanet-am-auth-configuration-service
objectClass: iPlanetPreferences
objectClass: person
objectClass: top
objectClass: organizationalperson
objectClass: sunAMAuthAccountLockout
objectClass: oathDeviceProfilesContainer
objectClass: forgerock-am-dashboard-service
objectClass: sunFederationManagerDataStore
objectClass: iplanet-am-user-service
objectClass: sunIdentityServerLibertyPPService
objectClass: devicePrintProfilesContainer
objectClass: inetorgperson
objectClass: sunFMSAML2NameIdentifier
objectClass: inetuser
objectClass: iplanet-am-managed-person
objectClass: kbaInfoContainer
cn: demo
sn: demo
inetUserStatus: Active
uid: demo
userPassword:: e1NTSEF9REZlOHJvYTVHMnRMNE9yVDVjWjJOVGR5dHFBT0RkdW5McVgwbVE9PQ==

5.やり方は色々あると思うが、私がささっと作ったバッチは以下。これで5000個分のユーザアカウントのLDIFを生成する。とてつもなく簡単なバッチなので説明は割愛する。ユーザアカウント名 = uidとパスワードは同じにしている。LDIFでインポートする段階ではハッシュ化されていなくても問題ない。

gen_users.bat
@echo off
for /L %%i in (1,1,5000) do (
    echo dn: uid=user%%i,ou=people,dc=openam,dc=forgerock,dc=org
    echo objectClass: iplanet-am-auth-configuration-service
    echo objectClass: iPlanetPreferences
    echo objectClass: person
    echo objectClass: top
    echo objectClass: organizationalperson
    echo objectClass: sunAMAuthAccountLockout
    echo objectClass: oathDeviceProfilesContainer
    echo objectClass: forgerock-am-dashboard-service
    echo objectClass: sunFederationManagerDataStore
    echo objectClass: iplanet-am-user-service
    echo objectClass: sunIdentityServerLibertyPPService
    echo objectClass: devicePrintProfilesContainer
    echo objectClass: inetorgperson
    echo objectClass: sunFMSAML2NameIdentifier
    echo objectClass: inetuser
    echo objectClass: iplanet-am-managed-person
    echo objectClass: kbaInfoContainer
    echo cn: user%%i
    echo sn: test
    echo givenName: test
    echo inetUserStatus: Active
    echo uid: user%%i
    echo userPassword: user%%i
    echo.
)

6.前項のバッチを実行し作成したLDIFファイルをインポートする。Apache Directory Stuidoを起動し、作成したOpenAMへのConnectionを接続し、右クリ => Import => LDIF Import を実行する。エクスポートのときと同じようにウィザードが立ち上がるので、LDIFファイルを指定して、importする。頑張ってimport処理を進めてくれるので失敗しないよう祈りながら待つ。

2017-03-30-16-22-42.png

7.完了したらpeople ouを見てみる。大量のアカウントが出来上がっていれば成功。あとはOpenAMでログインを試してみて無事にログインできたら完全に終わり。

2017-03-30-16-27-47.png

小ネタ

  • 大量のオブジェクトが存在する場合、デフォルトのLDAP Searchの検索上限に引っかかって全てが表示されない。その場合は、ConnectionのBrowser Options => Count Limitの値を大きくしよう。今回はユーザアカウントを5000個作ったので、余裕をとってCount Limitを6000にしている。

2017-03-30-16-31-17.png

  • インポートするときに何かエラーでたらApache Directory Studioの下部に表示されているログを見てみて、Result OKになっていたら、結局のところインポートとしては成功しているので気にしなくて良い。(もちろんエラー内容読んだ上で対処しないといけない内容であればそうするべきだが)
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3