Entra IDとGoogle Workspaceのメンバーを同期させる方法 - Provisioning編
前回の記事にて、Google Workspace側のGoogle Directory Syncという機能を利用して、Azure Entra ID(Azure Active Directory)と同期させて、メンバーを自動的に追加する手法を記しました。一方で、Azure側にもEntra IDのメンバーをGoogle Workspace側に自動プロビジョニングする機能があり、これとSSO連携する機能を組み合わせることで、Entra ID側だけをメンテすればGWS側のメンバー管理が楽になります。
今回はAzure Entra IDのプロビジョニング機能を使って、ユーザを同期する手法を検証してみます。
目次
今回利用する機能
今回の検証はあまりGoogle Workspace側での作業がありません。殆どがAzure Entra ID側の設定となります。(ちなみにグループを指定するにはMicrosoft Entra ID P1 以上のライセンスが必要です)。今回は無償のMicrosoft365に付属ライセンスにてユーザ単位でプロビジョニングします。
この機能をセットすることで、Entra ID側でユーザが追加された場合、自動でルールに従いGoogle Workspace側でもユーザが作成される仕組みになっています。但し、パスワード同期されるわけではないので、以下のSSO連携を追加で行い、SAML認証でGoogle Workspace側に入れるようにするのが定石のようです。
※不思議なのが、Entra管理センターからのライセンス管理画面からだとP1ライセンスの試用について何も出てきません。P2については出てきますが・・・P1を試用したい場合はこちらから入りましょう。
図:Entra管理センターからはP1の試用が出てこない
事前準備
前述のGoogle WorkspaceにSSO連携してみた記事同様に、Google Workspace側はCloud Identity Freeにてアカウントを自動作成するようにします。Google Cloud Directoryのケースとは逆でEntra ID側からGoogle側に同期を図るので、Google側での準備はそこまで多くありません。
Google Workspace側では、Entra ID側からユーザ作成を行わせる専用のCloud Identity Freeアカウントを用意し、管理者権限を付与します。
※前回の記事の続きであるため、Entra ID側ではGWSと同じ独自ドメインを利用してユーザを作成しています。
専用アカウントの作成
Entra ID側からのユーザ作成を代行する管理者アカウントとその為の組織部門が必要です。
- 管理コンソールにログインする
- 左サイドパネルのディレクトリ⇒組織部門をクリックする
- 組織部門の作成をクリックして、親ドメインにぶら下がる形で「entra_id」という組織部門を作成します。
- 左サイドパネルからユーザをクリックして、作成したmicrosoft組織部門をクリック、新しいユーザーの追加をクリック
- 名、姓を入力し、provisioningという名称のアカウントにしました(名と姓は適当に入力)。パスワードもセットしておきましょう。
自分の場合余分なライセンス枠はないので、この時点ではCloud Identity Freeアカウントになっています。Google Workspaceライセンスは勿体ないので自動付与の場合は外してあげましょう。
図:通常のアカウント作成
管理者権限を付与
このままでは何も出来ないユーザですので、管理者権限を付与します。
- 作成したユーザをクリックして中に入ります。
- 管理者ロールと権限をクリックします。
- 今回はユーザ・グループの作成や削除といった権限で十分なのですが、丁度良いロールが無いので、カスタムロールを作成をクリックします。
- 新しいロールを作成をクリックする
- ロール名称を入れて、続行をクリック(今回は、EntraManageという名前で作成)
- 管理コンソールの権限は組織部門読み取り、ユーザおよびグループは全権限、セキュリティはセキュリティの設定のみでセット
- また管理APIの権限は、組織部門読み取り、ユーザ及びグループは全権限を指定する
- 保存をクリックする
特権管理者じゃありませんが、ユーザの作成・更新・削除が担当出来るようになったので、このアカウントに関しては厳格な管理が必要になります。カスタムロールは組織部門を限定することが出来ないので要注意。
図:カスタムロールを作成する
図:最小限の管理者権限を付与
自動プロビジョニングの設定
Entra ID側でアプリの準備する
GWS側に作成担当のユーザが準備できたので次に、Entra ID側で自動プロビジョニングの設定を行います。
- Azure Entra IDのトップ画面を開く
- 左サイドバーの下のほうにある「エンタープライズアプリケーション」をクリックする
- 上部にある「新しいアプリケーション」をクリックする
- Microsoft Entra ギャラリーを参照すると出てくるので、「Google Cloud Platform」をクリックする
- Google Cloud / G Suite Connector by Microsoftが出てくるのでクリックする
- 右サイドパネルの作成をクリックします。名前は適当につけます(今回はAuto Provisioningと命名)
- しばらくすると、アプリが作成されて概要画面が出てきます。
- 左サイドバーから「プロパティ」をクリックします。
- 以下の内容の設定をします。
12345678//ユーザーのサインインが有効になっていますか?いいえ//割り当てが必要ですか?いいえ//ユーザに表示しますか?いいえ - 保存をクリックする
図:GCPを選択する
図:プロパティ設定
プロビジョニング設定を開始
続いて、以下の作業を続行します。
- 左サイドバーから「プロビジョニング」をクリックします。
- 作業の開始をクリックします。
- プロビジョニングモードを「自動」に変更します。
- 管理者資格情報を開いて、承認するをクリックする
- Googleログイン画面がポップアップする。
- ここで、事前準備で作成しておいたCloud Identity Freeのアカウントでログインする
- Azure Active Directoryに対する許可認証を求めてくるので、許可をクリックする。
- テスト接続をクリックする
- 右上にプロビジョニングする権限がありますと出たらオッケーです。
図:承認をクリックするとGoogleログインが出てくる
図:アクセスを許可する
属性マッピング
ユーザ属性情報
続けて、Entra ID側のユーザの属性情報とGoogle Workspace側のユーザ属性情報を連結する為のマッピングを行います。必要なものだけをセットすると良いでしょう。
- 前述の同じ画面の下にあるマッピングをクリックし、Provision Microsoft Entra ID Usersをクリックする。
- 属性マッピングの画面が出てくるので、今回はprimaryEmail、name.familyName、name.givenNameの3つだけにして他は削除しました。
- name.familyNameおよびname.givenNameの編集をクリックする
- null の場合の規定値 (オプション)の値を「_」に変更しておく
- 最後に保存をクリックする
別途同期させたい属性情報があれば、新しいマッピングの追加から追加することも可能です。
※但し、Entra ID側に独自ドメインをセットしユーザを独自ドメインのユーザプリンシパル名となっていない場合、onmicrosoft.comのままでは追加はできないので、グループの場合同様に変換式を追加する必要性があります。
図:マッピングメイン画面
図:属性マッピング編集画面
グループ属性情報
グループの属性情報もマッピング編集可能です。ただ問題なのは、Azure Entra IDのグループはxxxx.onmicrosoft.comという形式になっているので、これをGWS側の独自ドメインに変換するマッピングを追加する必要があります。
- マッピングにおいて、Provision Microsoft Entra ID Groupsをクリックする
- 属性情報のmailの編集をクリックする
- マッピングの種類を直接⇒式に変更する
- 式の欄に以下のように変換式を追加する
1Join("@", NormalizeDiacritics(StripSpaces([displayName])), "ドメイン名") - OKをクリックして保存をクリックする
図:Entra IDのグループドメインはonmicrosoft
図:ドメイン変換式を設定
同期対象のユーザを追加する
作成したエンタープライズアプリケーションであるAuto Provisioningの概要画面まで戻ります。そこで、次に同期対象となるEntra ID側のユーザを追加します(グループを追加する事も可能)。
今回は予め、独自ドメインにてユーザを作成しており、このユーザをGWS側に自動プロビジョニングさせます。
- 左サイドパネルからユーザとグループをクリックする
- 上部のユーザまたはグループの追加をクリックする
- ユーザの選択されていませんをクリックし、作成しておいたユーザにチェックを入れて、選択をクリックします。
- 下部にある割り当てをクリックする
これで同期対象が選定できました。
図:同期対象ユーザの追加
プロビジョニングの実行
同期の開始
ここまででGoogle WorkspaceおよびAzure Entra IDのプロビジョニングに関する準備が整いました。早速実行して、Google Workspace側にユーザが同期されるかテストしてみたいと思います。
- 作成したエンタープライズアプリケーションのプロビジョニングの概要に入る
- 左サイドバーからプロビジョニングをクリックする
- さらにプロビジョニングに入り編集画面を開く
- 下部にあるプロビジョニング状態を「オン」にして、保存をクリックする
- 上部に「プロビジョニングの開始」という項目があるのでクリックする
同期の間隔は40〜80分で行われるようです。オンデマンドでプロビジョニングにて手動で即座に特定ユーザのみを反映してテストが出来ます。
図:ステータスの変更を行う
図:プロビジョニング開始
同期の検証
少しいろいろな面で検証をしてみました。
アカウントを削除
GWS側でアカウントを削除後に、Entra ID側で再度手動でプロビジョニングすると新たに同じアカウントが生成されました。常にEntra ID側からスケジューリングで同期が掛かり指定ユーザについては常に存在するようになります。
逆にEntra ID側で同期対象ユーザから除外場合どうなるのか?そのまま1時間程度放置してみました(手動で出来ない為)。
この場合こちらにも記載があるように、Google Workspace側のユーザは「停止」となり、アカウントが削除されることはありません。よって、手動で削除する必要があります(なんですが、自分で検証してみた結果、サスペンドされてなかった・・・)。
マッピングにて、ソースのsuspendedの値をGWS側のsuspendedに対して同期を掛けることで手動でも停止をさせることが可能です。初回同期はさせるけれど停止状態にしたい場合などでも利用します(Cloud Identity Freeライセンスで追加されても、一部のGoogleサービスは使えてしまう為)
組織部門について
個別メンバーに設定する方法
デフォルトのままだとGoogle Workspace側の特定の組織部門に所属するようにマッピングが出来ません。ルートの組織に登録されてしまいます。また、Entra IDとGWSでは組織部門的な管理手法が異なるので、例えばEntra ID側の管理単位は複数所属可能なのでそのまま適用も出来ません。
ローカルADからEntra IDへConnectで属性値のマッピングをしてる場合、15個のextensionAttributeという属性値にマップして、それをプロビジョニングのマップで選択して使えるのですが、問題はこの値、Azure Entra ID上ではGUIで設定する手段がありません(Graph APIを使って設定は可能)。
トリッキーなテクですが、以下のようにして組織部門として設定して同期を掛けられます。
- ユーザのプロパティの利用頻度が低いフィールドを代用する(例えばFAX番号)
- 1.のフィールドに対して、GWSのルートから見てサブディレクトリをパスとして入力(今回はルート直下にentra_idという組織部門を作ったので、ここに同期するならば、/entra_idと入力する)
- プロビジョニングのマッピングに於いて、ソース属性は「facsimile TelephoneNumber」を指定
- 対象の属性は、「OrgUnitPath」を指定
- OKをクリックして、保存をクリックする
実際に既にルート直下で同期をしてしまったユーザに対して手動で同期を掛けてみた所、きちんと所属する組織部門が変更されました。
OrgUnitPathはルートから見てのパスとなるのでさらにサブディレクトリがあるならば、/entra_id/subdirnameといったようにパスを入力すれば、深い組織部門に細かく配置することが可能です。
※Null値だったらというケースを検証してみましたが、Null判定されずエラーになりました。故に必ず対象のプロパティに組織部門のパスを入れておく必要性があります。
図:空いてるフィールドを代用する
アプリロールで設定する方法
前述の方法の場合、個別のユーザのプロパティにそれぞれ値をセットしなければなりません。少人数ならともかく相応の人数がいる場合にはなかなか組織部門の変更をするとなると面倒です。
そこでこちらのサイトで紹介されてるようなグループとアプリロールを使った手法でまとめてマッピングを設定することが可能です。アプリロール作成とグループで同期させる手法はEntra ID P1もしくはP2のライセンスが必要です。以下の手順でグループとアプリロールを作成します。ちょっと手順が長いです。
- Azure Entra IDにログインします
- 左サイドバーのグループを開きます
- 上部メニューの新しいグループをクリックしてグループを作成し、所有者は自分、このグループがCIFという組織部門に配置予定ならば、メンバーには対象者を選んで追加します。必要な組織部門の数だけグループを用意し対象者を追加しておきます(今回はGWSとCIFの2つのグループを作成)
- 続いて、左サイドバーからエンタープライズアプリケーションをクリック
- 今回利用してる「Google Cloud / G Suite Connector by Microsoft」のプロジェクトを開く
- 左サイドバーのユーザーとグループを開く
- 左パネルに出てる文中の「アプリケーション登録」をクリックする
- アプリロールの作成になっていたら、上部にある「アプリロールの作成」をクリックする
- 右サイドバーが出てくるので、表示名と値には組織部門へのパスをいれます(例:/CIF/test)
- 許可されたメンバーの種類は両方でオッケー
- アプリロールを有効にしますか?のチェックはチェックを入れて、適用をクリックする
- もう1つの部門用にも同じように作成する
- 5.のプロジェクトのトップ画面に戻り、左サイドバーからユーザとグループをクリックする
- 上部にあるユーザまたはグループの追加をクリックする
- 割り当ての追加画面になり、ユーザとグループでは作成したグループを選択します。
- ロールを選択では、7.で作成したアプリロールを選択します。(Default Organizationを選ぶと同期出来ません)
- 割り当てをクリックします。
あとはユーザのマッピングする際に、式でもってSingleAppRoleAssignment([appRoleAssignments])を作成し、対象の属性をOrgUnitPathにすればアプリロールの値を持って、目的の組織部門へユーザを流し込むことが可能です。
※嵌り所はグループとアプリロールを使った手法で紹介されてるような「アプリの登録」からアプリロールを作っても、上記の関数からは値が取れないばかりか、14.の画面でロールの選択がグレーアウトで出来ません。そのため、関数で取得した値が「Default Organization」になってしまい、OrgUnitPathに割り当てが出来ずエラーとなります。
※故にSingleAppRoleAssignment関数にてnullだったらの処理で違う組織部門へ配属させるという手は使えません。明示的にロール選択が必須となるがゆえに、それであればもう一つのアプリロールを作るのと大差ないからです。
※1人に対して複数のロールがつくようなグループの構成にすると上手く動作しませんので1人には1ロールで運用が必要です。
※グループとアプリロールを使った手法では、アプリロールのマニフェストに「"availableToOtherTenants": false」を1行入れる設定になっていますが、今回は入れずに適用しています。
図:アプリロールを作る前の時点
図:アプリロール作成画面
図:ロールの割当画面
図:式でマッピング
関連リンク
- Microsoft Entra ID のユーザーとグループを Cloud Identity に同期して SSO する
- チュートリアル: Microsoft Entra SSO と Google Cloud/G Suite Connector by Microsoft の統合
- Microsoft Entra ID を使った ID プロビジョニングとは
- あらゆるデータソースから Microsoft Entra ID に ID を同期する新しい方法のご紹介
- Microsoft Entra ID のユーザープロビジョニング機能を使って cybozu.com にユーザー情報を同期する
- Microsoft Entra ID自動プロビジョニングアプリのOAuthへの移行手順
- How to set up Google Workspace Federation with Microsoft Entra ID (Azure AD)
- How to sync groups from Google Workspace to Microsoft Entra ID (formerly Azure AD)
- Azure ADを使ってSSO連携したGsuiteへプロビジョニングユーザーでログインしてみた
- 組織部門の管理者ロールを作成する
- ユーザー プロビジョニングの状態を確認する
- 管理単位の作成または削除
- Microsoft Entra ID でカスタム セキュリティ属性の定義を追加または非アクティブ化する
- Provisioning Azure AD users into G. Suite Organizational Units
- Add app roles to your application and receive them in the token
- SingleAppRoleAssignment
- Google Cloud と Microsoft Entra ID(旧 Azure AD)の連携
- Microsoft Entra ID で属性マッピングの式を記述するためのリファレンス
- Microsoft Entra ID を使用して SCIM 経由でシートを管理する
- AzureADのグループをG Suiteへプロビジョニングする
- Microsoft Entra ID と ChromeOS 間の SSO およびユーザー プロビジョニングを設定する