ID 情報の再同期

なんらかの理由で LDAP サーバーのエントリが UCIDM API サーバーに ID 連携されていないときに運用対応する方法について説明します。

Agent モジュール のコンテナ内に再同期のための運用ツールが同梱されており、Docker Compose の Agent モジュールの設定内容を再利用できます。

デフォルトでは Docker Compose を /var/opt/osstech/lib/ucidm に配置します。ここではデフォルトの位置にインストールされている前提で作業を進めていきます。

compose.yml を配置したディレクトリへ移動します。

$ cd /var/opt/osstech/lib/ucidm

次のように実行してヘルプが表示されることを確認してください。-it の後にサービス名を指定します。agent-ldap, agent-ad, agent-meid というサービス名になります。

$ docker compose exec -it agent-ad /bin/resync help
Usage: resync <flags> <subcommand> <subcommand args>

Subcommands:
	commands         list all command names
	delete           delete entries in the ucidm server
	entry            resync an entry
	flags            describe all known top-level flags
	help             describe subcommands and their syntax
	pass             pass changes to get the latest cookie or deltatoken
	update           update entries in the ucidm server


Use "resync flags" for a list of top-level flags

個別エントリの再同期

種別 (ユーザー, グループまたは組織単位) と DN または ID を指定して個別エントリーを再同期します。

DN とユーザーエントリのとき

$ docker compose exec -it agent-ldap \
  /bin/resync -verbose entry -dn uid=user1,ou=users,dc=example,dc=com -type user

DN とグループエントリのとき

$ docker compose exec -it agent-ad \
  /bin/resync -verbose entry -dn cn=group1,ou=groups,dc=example,dc=com -type group

DN と組織単位エントリのとき

$ docker compose exec -it agent-ad \
  /bin/resync -verbose entry -dn ou=groups,dc=example,dc=com -type ou

ID とユーザーエントリのとき

$ docker compose exec -it agent-meid \
  /bin/resync -verbose entry -id a8d67d70-f83b-453d-9666-1f280a609bf6 -type user

すべてのエントリの再同期

LDAP サーバーまたはクラウドサーバーのすべてのエントリーを UCIDM API サーバーに再同期します。それぞれのサーバーに実行時時点で存在しているエントリーを取得します。

デフォルトではドライランモードで実行されて実際にエントリーは更新しません。またデータソースのエントリが UCIDM API サーバーに存在していない場合はコンソールにその情報を表示します。

ユーザーエントリのとき (ドライラン有効)

$ docker compose exec -it agent-ldap /bin/resync update -type user

グループエントリのとき (ドライラン有効)

$ docker compose exec -it agent-ad /bin/resync update -type group

組織単位エントリのとき (ドライラン有効)

$ docker compose exec -it agent-ad /bin/resync update -type ou

ドライランモードを解除して実際に更新するには次のように実行します。

ユーザーエントリのとき (ドライラン無効)

$ docker compose exec -it agent-ldap /bin/resync update -type user -dryrun=false

グループエントリのとき (ドライラン無効)

$ docker compose exec -it agent-ad /bin/resync update -type group -dryrun=false

組織単位エントリのとき (ドライラン無効)

$ docker compose exec -it agent-ad /bin/resync update -type ou -dryrun=false

UCIDM API サーバーから不整合なユーザーの削除

UCIDM API サーバーに存在して LDAP サーバーまたはクラウドサーバーに存在しないエントリを UCIDM API サーバーから削除します。

デフォルトではドライランモードで実行されて実際にエントリーは削除しません。UCIDM API サーバーで削除対象となるエントリをチェックして一覧表示します。

ユーザーエントリのとき (ドライラン有効)

$ docker compose exec -it agent-ldap /bin/resync delete -type user

グループエントリのとき (ドライラン有効)

$ docker compose exec -it agent-ad /bin/resync delete -type group

組織単位エントリのとき (ドライラン有効)

$ docker compose exec -it agent-ad /bin/resync delete -type ou

ドライランモードを解除して実際に更新するには次のように実行します。

ユーザーエントリのとき (ドライラン無効)

$ docker compose exec -it agent-ldap /bin/resync delete -type user -dryrun=false

グループエントリのとき (ドライラン無効)

$ docker compose exec -it agent-ad /bin/resync delete -type group -dryrun=false

組織単位エントリのとき (ドライラン無効)

$ docker compose exec -it agent-ad /bin/resync delete -type ou -dryrun=false

UCIDM 導入時の初回連携の効率化

LDAP サーバーまたはクラウドサーバーから ID 情報を初回同期するとき、それらのサーバーが長年に渡って運用され、過去の履歴が多い場合、すべての履歴を順番に適用するため、初回同期に数時間や数日といった時間がかかる可能性があります。

Agent モジュールが扱う同期情報と競合しないよう、一時的に Docker Compose の Agent モジュールを停止させてから初回同期を行います。次のようにして初回同期ならびに最新の同期情報を生成します。ここでは agent-meid という Microsoft Entra ID 向けサービスの設定例として紹介します。

$ docker compose stop agent-meid
$ docker compose run --rm --entrypoint "/bin/resync update -type user -dryrun=false" agent-meid
$ docker compose run --rm --entrypoint "/bin/resync update -type group -dryrun=false" agent-meid
$ docker compose run --rm --entrypoint "/bin/resync pass" agent-meid

正常に終了すると volumes/agent-data 配下に保存される同期情報が更新されます。

$ ls -l volumes/agent-data/meid/
total 8
-rw-r--r--. 1 ucidm ucidm 2750 Jul 18 09:54 msgraph-group.deltatoken
-rw-r--r--. 1 ucidm ucidm 2471 Jul 18 09:54 msgraph-user.deltatoken

同期情報が更新されていることを確認したら Agent モジュールを再開させます。

$ docker compose up -d agent-meid

pass サブコマンドを実行したタイミング以降の変更差分のみを検出できるようになります。