【Entra ID】memberOf属性を用いた動的グループによる効率的なライセンス割り当て

Microsoft Entra IDではグループに対してライセンスやアプリロールを割り当てた際に、ネストグループ(入れ子のグループ)がサポートされていません。このような場合に、メンバーを直接入れたグループを作成することで対応するケースが多いです。

本記事では、このような状況でmemberOf属性を用いて動的グループを作成し、グループを束ねてまとめてライセンスが割り当てられる方法を紹介します。

ネストグループに関する課題

Microsoft Entra ID(以降 Entra ID)では、セキュリティグループをネスト(入れ子)にすることができます。しかし、ネストグループに対してライセンスやEntraロールの割り当てをした場合に、割り当て対象はグループのダイレクトメンバーのみになります。

例えば、以下の構成でグループAに対してライセンスを付与した際に、ライセンスが割り当てられるのはユーザーAのみです。

主要機能のネストグループへの対応有無(2024年2月時点)は、以下の通りです。

【ネストグループをサポートされているシナリオ】

  • 条件付きアクセスポリシーのスコープとしてグループを指定する
  • Azureロールをグループに割り当てる
  • グループメンバーシップクレームアプリにおけるユーザートークンに含むグループ情報

【ネストグループをサポートしていないシナリオ】

  • Microsoft Entra ロールをグループに割り当てる
  • グループベースのライセンス割り当て
  • アプリロールをグループに割り当てる

※参照情報

  1. サービスの制限と制約 - Microsoft Entra ID | Microsoft Learn
  2. Azure ロールベースのアクセス制御 (Azure RBAC) とは | Microsoft Learn

memberOf属性を用いた動的グループ

今回紹介する方法は、memberOf属性を用いた動的グループ(以下、「memberOf属性動的グループ」と呼びます)をネストグループの代わりに使用する方法です。

動的グループの条件として、memberOf属性で他のグループを指定すると、指定したグループのダイレクトメンバーを動的グループのメンバーとして設定することができます。

memberOf属性動的グループでは、階層構造がないダイレクトメンバーとしてメンバーリストを返すので、ネストグループをサポートしていない機能に対しても利用することができます。

例えば、以下の状態(a)のようにグループA, B, C が存在する場合に、状態(b)のように各グループのメンバーをmemberOf属性動的グループとして束ねます。この状態で、グループDにライセンスを割り当てることで、グループA, B, CのダイレクトメンバーであるユーザーA, B, Cにまとめてライセンスを割り当てることができます。

注意事項

memberOf属性動的グループの利用に関して、2024年2月時点で主に以下の注意事項があります。その他にも細かい注意事項もありますので、実際の利用時にはドキュメントをご確認ください。

  • memberOf属性は現在プレビュー中の機能です。
  • 利用にはMicrosoft Entra ID P1 または P2 ライセンスが必要です。
  • Entra ロールに関しては、memberOf属性動的グループに限らず動的グループに割り当てることができません。ライセンス・アプリロール・Azureロールについては、memberOf属性動的グループに割り当て可能なことを実際に確認しました。
  • memberOf属性動的グループのメンバーとして扱われるのは、memberOf属性で指定したグループのダイレクトメンバーのみです。
  • memberOf属性動的グループ同士をネストすることはできません。

最後2つの注意事項を解釈すると、以下の状況になります。動的グループFでmemberOf属性としてグループA, C, E を指定した場合、グループFのメンバーとして扱われるのはユーザーA, C のみです。

実際の動的グループの作成方法

具体的な動的グループの作成方法を簡単に説明します。

今回は以下のように、グループA, Bを束ねるmemberOf属性動的グループCを作りたいと思います。

まず、グループA, Bを作成し、オブジェクトIDを控えておきます。

次にグループCを作成します。グループ作成画面にて、"メンバーシップの種類"として"動的ユーザー"を選択し、"動的クエリの編集"に移ります。

memberOf属性に関して、ルールビルダーと検証機能は使用できません。そのため、ルール構文を直接編集します。以下のように、グループA, BのオブジェクトIDを指定して、memberOf属性を用いたルール構文を作成します。動的クエリを保存し、グループを作成します。

user.memberof -any (group.objectId -in ["グループAのオブジェクトID", "グループBのオブジェクトID"])

まとめ

以上をまとめると、memberOf属性動的グループの使いどころとしては、ライセンスやアプリロールを複数グループのダイレクトメンバーに割り当てたい場合です。

複数グループを束ねたmemberOf属性動的グループを1つ用意しておくことで、各グループへの割り当て作業が不要になり、動的グループ1つだけに割り当てすればよいことになります。複数グループのメンバーを1つにまとめた割り当て済みグループを作成するよりも、メンバー変更時の管理が軽減するので、選択肢の一つとして有効です。

参照情報

執筆担当者プロフィール
赤津 陸

赤津 陸(日本ビジネスシステムズ株式会社)

Azure環境向けのクラウドマネージドサービスの運用に従事し、現在はAI関連の業務をしています。

担当記事一覧