2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?