はじめに
Entra ID では、ライセンスやポリシーの割り当て単位としてグループを使うことができます。
運用負荷を考えると動的グループ1を使いたい場面が多いものですが、規則性をルール記述に落とし込むことができずに悩むこともあるのではないでしょうか。
今回、「数字8桁で始まるユーザープリンシパルネームのアカウント (一般ユーザーアカウント) をメンバーとする」動的グループを作成したかったのですが、特定の文字列/数列を含むわけではないので -startsWith
や -contains
では表現できないし.... と悩んでいました。
ためしに 正規表現を使ったところ、実現できました!
本記事では、この検証体験をもとに正規表現を使って Entra ID 動的ユーザーグループを作る方法を例とポイントを交えてまとめます。
本記事の構成
# | 章題 | 概要 |
---|---|---|
1 | 設定例 | 「数字8桁で始まるユーザープリンシパルネームのアカウントをメンバーとする」動的グループのメンバーシップルールを例としてご紹介します |
2 | 構成のポイント | 動的メンバーシップルールで正規表現を使う際のポイントをまとめます |
3 | 便利ツール | 正規表現初心者として助けられたツールをご紹介します |
ちょうどメンバーシップルール記述に困っていてアイデアを探していたり、これから正規表現を使おうと思って情報を探していたりといった方のご参考になればうれしいです!
1. 設定例
動的グループのメンバーシップルールは、property
と operator
と value
を組み合わせてひとつのルールを構成します。
今回は、「数字8桁で始まるユーザープリンシパルネームのアカウントをメンバーとする」動的グループが欲しいので、以下のルール記述を使いました。
Property | Operator | Value |
---|---|---|
user.userPrincipalName | -match | "^\d{8}@" |
-
Property:
user.userPrincipalName
今回はユーザープリンシパルネームに規則性があるため、プロパティは「user.userPrincipalName」を使用 -
Operator:
-match
正規表現をサポートする -match オペレーターを使用 -
Value:
"^\d{8}@"
「数字8桁で始まる (ドメイン前が数字8桁)」を意味する「^\d{8}@」をダブルクオーテーションで括って使用
Tips:value
について
ドメイン名まで指定したい場合は、ドメイン名まで正規表現に組み込んで value
として指定することも可能です。
例えば、UPN形式が「数字8桁@domain.com」の場合、正規表現は ^\d{8}@domain\.com$
になります。
Tips:AND / OR 条件記述について
-and
や -or
を使って複数ルールとつなげることも可能です。
(正規表現を使うルール同士、または正規表現を使うものと使わないルールをつなげることも可能です。)
- (ルール 1)
-and
(ルール 2)
例:(user.userPrincipalName -match "^\d{8}@") -and (user.mail -match "@domain\.com$")
(user.userPrincipalName -match "^\d{8}@") -and (user.dirSyncEnabled -eq true)
- (ルール 1)
-or
(ルール 2)
例:(user.userPrincipalName -match "^\d{8}@") -or (user.mail -match "@domain\.com$")
(user.userPrincipalName -match "^\d{8}@") -or (user.dirSyncEnabled -eq true)
2. 構成のポイント
成功例を作れたところで、動的メンバーシップルールで正規表現を使う際のポイントを順にまとめます!
2-1. オペレーターは -match
を使う
2-2. 設定に「ルール構文テキストボックス」を使う
2-3. ルール記述はシンプル is best
2-4. 構成確認に「ルールの検証」機能を使う
2-1. オペレーターは -match
を使う
今回のような「○○から始まる~」ルールを構成する場合、直観的には「-startsWith
オペレーターでもいいんじゃない?」という気がします。
が、実際検証でオペレーターだけを -startsWith
に書き換えてみたところ動きませんでした。
公開情報によると、正規表現 (regular expression) は -match
オペレーターでサポートされているそうです。
Using the -match operator
You can use the -match operator for matching any regular expression.―― Manage rules for dynamic membership groups in Microsoft Entra ID より (2025年8月5日閲覧)
おとなしく -match
オペレーターを使ったところ、冒頭の写真のように意図した通りメンバー追加されました🎉
2-2. 設定に「ルール構文テキストボックス」を使う
件の -match
オペレーターなのですが、ルール ビルダー (GUI) 上では一覧に表示されず選択できませんでした。
画面下部の「ルール構文テキストボックス」> 「編集」をクリックして、直接ルールを書き込む必要があります。
2-3. ルール記述はシンプル is best
- 参考:
正規表現も駆使してちょっと応用版のルール記述ができるようになりましたが、とはいえ複雑なルールを手放しに歓迎できるわけではない点、ちょっと注意が必要かと思います。
メンバーシップルールが複雑になるほど処理に時間がかかる旨、上公開情報にも注意書きがあり、シンプルなルール記述が推奨されています。
なんならオペレーターによっても処理効率性があるらしく、-match
オペレーターは比較的処理が長くかかるオペレーターとのこと。
正規表現で -match
を使わざるを得ないときこそルール記述はシンプルにとどめたいものです。
2-4. 構成確認に「ルールの検証」機能を使う
「ルールの検証」機能を使うと、グループを保存して作成する前に、意図した構成であるか適当なユーザーアカウントを指定してメンバーシップルールをテストすることができます。
何個かアカウントをピックアップして確認しておくと安心です。
メンバーになるはずのユーザーと、ならないはずのユーザーをそれぞれ選んでみてみるのがおすすめです。
Tips:「ルールの検証」でテスト可能なユーザーについて
「ルールの検証」機能で「ユーザーを追加」をクリックして選択しテスト可能なのは、すでにテナント上に存在しているユーザーです。
テナント上にまだ存在していない架空のユーザーは、本機能でルールにマッチするか確認することができません。
架空のユーザーの正規表現に対するマッチを確認したい場合は、外部の正規表現テストサイトを利用するのがおすすめです。
本記事 3-2. 正規表現テストサイト 章に例を挙げていますので、ご参考ください!
3. 便利ツール
と、ここまで知った風に記載していましたが... なにを隠そう、当方これまで正規表現使ったことがなく、今回も「なんか正規表現だといける気がするんだけど、どうやって記述するの?」というところからスタートしていました。
そんな私が実際助けられた、正規表現の記述に自信がないという方におすすめなサイトをまとめます!
3-1. 正規表現サンプル集
3-2. 正規表現テストサイト
3-1. 正規表現サンプル集
頭の中の規則をどう正規表現に落とし込むか、ネットでフリーサーチや AI に聞くのもいいのですが、私の場合はサンプル集が参考になりました。
↓↓
3-2. 正規表現テストサイト
それっぽい正規表現にあたりをつけたあとに、「これだ!」と確信を持つために使えるテストサイトがあります。
↓↓
「REGULAR EXPRESSION」欄に正規表現を、「TEST STRING」タブ下にテストしたいサンプルを張り付けると、何件・どこがマッチするか判定してくれます。
さらに「REGULAR EXPRESSION」欄の正規表現の各パーツの意味も解説してくれます!
サンプルサイトから拾ってきた正規表現例などで理解できない点があっても、この解説を参考に取捨選択吟味することができそうですね。
Tips:架空のユーザーの正規表現に対するマッチ確認
2-4. 構成確認に「ルールの検証」機能を使う 章で取り上げた Entra ID の「ルールの検証」機能では、テナントに存在しているユーザーしかマッチ確認できませんでした。
本章でとりあげたような外部の正規表現テストツールを使うと、テナントに存在していない架空のユーザーも正規表現に対するマッチ度を確認できます!
(https://regex101.com/)
テストサイト利用時の注意点
なかには改行を認識せず「^ (キャレット。先頭を意味)」の評価ができないテストサイトもありましたので、挙動の癖にご注意ください。
(https://regexr.com/)
さいごに
以上、正規表現をつかうことにより、文字列は異なるが同じ特徴をもつユーザーをグループメンバーにするルールを記述することができました。
正規表現を使った動的メンバーシップルールは、動的ユーザーグループのみならず動的デバイスグループでも利用可能です。
今回大いに参考にさせていただいた記事があるのですが、こちらはデバイスグループの例でした。
↓↓
余談ですが、デバイスは命名規則としてプリフィックスが設定されていることが多く、device.displayName -startsWith "X"
などで対応できることが多いように感じます。
その点ユーザーは displayName
や userPrincipalName
でプリフィックスが使われているのはあまり見ないですし、別のアプローチが必要になります。
department
や jobTitle
で区別するというのも手ですが、どんな組織でも当然概念としてあるこれらもユーザー属性としては設定していない (空値) ということも往々にしてあります。
そんなとき、正規表現も使えるということを知っていると手札が増えるなと思いました。
-
動的グループ:ユーザーやデバイスの属性にもとづいて自動的にメンバーを構成する機能 (参考:Microsoft Entra ID で動的メンバーシップ グループの規則を管理する ↩