Azure ADテナント間同期を解説
この記事の内容
- Azure ADのテナント間同期(Cross-tenant Synchronization)機能の概要と用途を解説します
- 同期を構成するための前提条件として、External Identitiesのアクセス設定が必要です
- 送信側テナントと受信側テナントそれぞれで行う設定手順を説明します
- ユーザー・グループの同期対象指定や、属性マッピングを柔軟にカスタマイズできます
- 利用にはAzure AD P1ライセンスが必要であり、シンプルな構成を維持することが重要です
テナント間同期が必要になる場面
複数のAzure ADテナントをまたいでコラボレーションする場合、B2Bゲスト招待を使うのが一般的な方法です。しかし、招待対象のユーザーが100人・200人と大量になると、その招待作業は非常に煩雑になります。
また、以下のような運用上の課題も発生します。
- 招待されたユーザーにメールが届き、信頼確認のボタンを押してもらう必要がある
- 相手テナントでユーザーが追加・削除・部署変更された際に、こちら側へ自動反映する仕組みが必要
- 企業合併により、それぞれがAzure ADを持つテナントを統合したい
こうした課題を解決するために登場したのが、**テナント間同期(Cross-tenant Synchronization)**です。
構成の全体像
今回の解説では、Dev1(送信元テナント)とDev2(受信先テナント)という2つのテナントを使用します。Dev1に存在するユーザーを、Dev2にゲストユーザーとして同期する構成です。
同期の仕組みは以下のとおりです。
- Dev1側で同期対象のユーザー・グループを選択する
- Dev1のプロセスがDev2に対してユーザーを書き込みに行く
- Dev2にゲストユーザー(またはメンバー)として作成される
- 招待メールの確認プロンプトは表示されない
前提条件:External Identitiesのアクセス設定
テナント間同期を構成する前に、両テナントでExternal Identities > テナント間アクセス設定を構成する必要があります。
Azure ADポータルの「External Identities」メニューから「テナント間アクセス設定」を開きます。設定は「既定の設定」と「組織の設定」に分かれており、特定の組織との同期には「組織の設定」で相手テナントを指定して設定します。
Dev1(送信側)の設定
送信側では、送信アクセス設定 > 信頼の設定を開きます。
- 「同意プロンプトを表示しない」にチェックを入れる
これにより、Dev1のユーザーが相手テナントのアプリ・リソースにアクセスする際に、同意確認プロンプトが表示されなくなります。
Dev2(受信側)の設定
受信側では、受信アクセス設定 > テナント間同期を開きます。
- 「テナント間同期ユーザーにこのテナントへの同期を許可する」にチェックを入れる
- 信頼の設定で「同意プロンプトを表示しない」にチェックを入れる
この設定により、Dev1からDev2への書き込み権限が付与されます。なお、送信側にはこのテナント間同期の許可設定は存在しません。設定できるのは受信側のみです。
テナント間同期の構成手順
前提条件の設定が完了したら、Dev1のAzure ADでテナント間同期を構成します。
1. 新しい構成を作成する
Azure ADポータルで「テナント間同期」を開き、新しい構成を作成します。構成名を入力し、同期先テナントのIDを指定します。
2. 接続テストを実行する
プロビジョニング設定の「管理者資格情報」セクションで、認証方法として「テナント間同期ポリシー」を選択します。同期先テナントIDを入力したら「テスト接続」を実行し、前提条件の設定が正しく完了していることを確認します。
3. 同期対象のユーザー・グループを設定する
「管理 > ユーザーとグループ」から、同期したいユーザーやグループを追加します。個別ユーザーを指定することも、グループ単位で指定することも可能です。
4. スコープフィルターを設定する(任意)
より細かく同期対象を絞り込みたい場合は、「プロビジョニング > マッピング > スコープフィルター」で属性ベースのフィルターを設定できます。
例:部署(department)が「HR」のユーザーのみ同期する
5. プロビジョニングを有効化する
プロビジョニングモードを「自動」に設定し、プロビジョニングを開始します。
属性マッピングのカスタマイズ
テナント間同期では、同期元の属性を同期先にどのように書き込むかを柔軟に制御できます。
ユーザーの種類(メンバー/ゲスト)の制御
既定のマッピングでは、userType 属性に定数値「Member」が設定されており、同期されたユーザーはメンバーとして作成されます。
| 設定項目 | 値 |
|---|---|
| マッピングの種類 | 定数 |
| 定数値 | Member |
| 適用タイミング | オブジェクトの作成中のみ |
「適用タイミング」を「常時」に変更すると、同期のたびに上書きされます。テナント間同期を構成する際には、メンバーとして同期すべきかゲストとして同期すべきかを事前に決定し、適切なマッピングを設定してください。
式(Expression)を使った属性の加工
表示名に所属会社名を付加するなど、複数の属性を組み合わせた値を設定するには「式」マッピングを使用します。
式ビルダーを使って以下のように記述できます。
この式により、displayName に-を付加した文字列に、さらに companyName を追加した値が同期先に書き込まれます。
例:田中 太郎 → 田中 太郎 - Company A
式を適用する前に「式のテスト」機能を使い、対象ユーザーに対して出力結果を確認することを推奨します。
オブジェクトのアクション設定
同期時に実行するアクションは個別に有効/無効を切り替えられます。
- 作成:同期元に新規ユーザーが追加された場合に同期先にも作成する
- 更新:同期元のユーザー属性が変更された場合に同期先も更新する
- 削除:同期元でユーザーが削除された場合に同期先からも削除する
削除を許可しない設定にしておくことで、誤操作による大量削除を防ぐこともできます。また「削除を防止する」設定を有効にすると、一定数を超える削除が発生しようとした際に確認が求められます。
プロビジョニングログの確認
同期の実行結果は「プロビジョニングログ」で確認できます。ログには以下の情報が記録されます。
- 各ユーザーの同期ステータス(成功・失敗)
- 実行されたアクション(作成・更新・削除)
- 変更されたプロパティの内容
ログの反映はAzure ADポータル上の表示より少し遅れることがあります。
複数テナントへの同期
1つのテナントから複数のテナントに同期したい場合は、同期の構成を複数作成することで対応できます。また、双方向での同期構成も可能です。
注意事項
ライセンス要件
テナント間同期の利用には Azure AD P1ライセンス(またはそれ以上) が必要です。無償版のAzure ADでは利用できません。
構成のシンプルさを保つことが重要
テナント間同期は便利な機能ですが、この機能を前提として複数のAzure ADテナントを意図的に分割・増殖させる設計は推奨されません。テナントが増えるほどセキュリティポリシーの管理が複雑になり、トラブルの原因になります。
テナント間同期が本来の力を発揮するのは、以下のようなやむを得ない状況です。
- 企業合併により、それぞれが独自のAzure AD環境を持っている
- 既存の構成が複雑すぎて1テナントへの統合が現実的でない
- 大量のユーザーをゲスト招待する運用が限界に達している
基本的にはAzure ADテナントを1つに統合し、テナント間同期が不要な構成を目指すのがベストプラクティスです。
まとめ
Azure ADのテナント間同期は、複数テナント間のユーザー管理を自動化する強力な機能です。External Identitiesのテナント間アクセス設定で送信・受信それぞれのアクセス許可を構成した上で、同期の構成・対象ユーザーの指定・属性マッピングのカスタマイズを行うことで、柔軟なユーザー同期を実現できます。
式ビルダーを活用することで、単純な属性のコピーだけでなく、複数属性を組み合わせた値の生成も可能です。利用にはP1ライセンスが必要になりますが、手動招待や自前の自動化スクリプトと比較して、標準機能として提供されている点で非常に価値の高い機能と言えます。
ただし、あくまでもシンプルなテナント構成を前提とし、この機能を使わずに済む環境を目指すことが長期的な運用の観点からは重要です。