🔗

Azure AD のグループと Dataverse の所属部署を同期する

に公開

はじめに

Dataverse におけるセキュリティ モデル、つまり部署とチームの概念は難しいですが、概要は以下のとおりです。

  • ユーザーは必ず 1 つの部署に所属する。これはユーザーの所属部署列で表現される。所属部署列を設定すると、そのユーザーは部署の既定のチームに追加される。この所属部署はレコードの所有権判定に使用される。既定ではユーザーはルート部署に所属する。
  • ユーザーは上記以外に複数のチームに所属できる。このチームは部署に対して追加できる。通常のチーム以外にも、Azure AD のグループと関連付けられる Azure AD グループ チームを作成できる。この場合、Azure AD のグループのメンバーを自動的に部署に含めることができる。

レコードの所有者との関連が複雑です。セキュリティ ロールの特権を 部署部署配下 とした場合、レコードの所有者の所属部署と比較されます。既定ではユーザーはルート部署に所属するため、Azure AD グループ チームでアクセス許可を設定しても、意図したとおりにアクセス許可が動作しません。残念ながらユーザーの所属部署 (つまり部署の既定のチーム) を Azure AD のグループと関連付ける手段は提供されていません。

そのため、Azure AD のグループと Dataverse の所属部署を同期させたい場合は、何らかの手段で実装する必要があります。コードを書く方法もありますが、ここでは Power Automate を使用して実現します。

実行手順

以下のように 営業部 という部署があるとします。

Azure AD にも 営業部 というグループを作成します。今回は必ず Microsoft 365 グループ である必要があります。

フローを作成します。全体像は以下のとおりです。トリガーには Office 365 Group の グループ メンバーが追加または削除されたとき を使用します。このトリガーは Microsoft 365 グループでのみ使用できます。また、削除時にもフローが実行されるため、条件で除外する必要があります。

Azure AD のユーザー ID をキーにして Dataverse の systemuserid を取得します。

所属させる部署の businessunitid を取得します。

Dataverse Web API を呼び出して所属部署を変更します。

実行結果

Azure AD グループにメンバーを追加します。

フローが実行されます。

メンバーの所属部署が変更されていることを確認できます。

おわりに

この方法では、部署ごとにフローを作成する必要があります。より汎用的に運用したい場合は、Microsoft Graph の変更通知を利用し、HTTP トリガーで処理を統合する方法も検討できます。

同期機能については標準対応が望ましいですが、Azure AD グループの管理状況や運用体制によっては、管理を各部署に委任することも選択肢となります。Dataverse と Azure AD の連携は柔軟性が高い反面、運用設計が重要となるため、要件に応じて最適な方法を検討してください。

Discussion