こんにちは、臼田です。
みなさん、DLPしてますか?(挨拶
今回は全てではなく一部のメールアドレスをMicrosoft PurviewのエンドポイントDLPで検出してみます。
背景
メールアドレスが記述されたファイルを機密として扱いたくなります。
しかし、すべてのメールアドレスが検出されたら困るケースもあります。例えばcontact@example.comなどパブリックに公開している窓口などが含まれる場合です。
今回はこのケースに対応する手法を検討し、実際に設定してみました。
アプローチ
下記2種類の機密情報の種類を定義することで実現できます。
- 自社ドメイン以外のメールアドレスを検出する
- 従業員メールアドレスのリストを検出する
これをDLPポリシーを設定する際に2つの機密情報の種類を条件に「いずれか」で追加することで必要なものが検出され、検出したくないものを除外できます。
やってみた
下記手順で実行していきます。
- 機密情報の種類の設定
- DLPポリシーの設定
- 検出
- アクティビティの確認
機密情報の種類の設定
DLPで利用するパターンはInformation Protectionの機密情報の種類から登録します。「機密情報の種類を作成する」から作っていきます。

1つ目のパターンとして「自社ドメイン以外のメールアドレスを検出する正規表現」を書いていきます。
パターンの作成で「正規表現」を選択します。

正規表現に(?i)[\w\d._%+-]+@(?!example.com)[\w\d.-]+.[A-Za-z]{2,}を入力して、「文字列の一致」の状態で登録します。

これで作成します。
2つ目のパターンとして「従業員メールアドレスのリストを検出する」を登録します。新しいパターンの主要要素を追加するから「キーワード辞書」を選択します。

キーワード辞書ではあらかじめ作成してある従業員メールアドレスのリストを登録できます。

これで作成します。
2つの機密情報の種類を作成したら、それぞれテストしていきます。機密情報の種類の詳細ページの「テスト」から実行します。

「自社ドメイン以外のメールアドレスを検出する正規表現」でマッチしてほしくないファイルは以下のように用意しました。
## example.net: マッチする user@example.net ## example.net (大文字): マッチする USER@EXAMPLE.NET ## 混合ケース example.net: マッチする User@Example.NET ## CSV途中 example.net: マッチする id, name, user@example.net, status ## 自然文前後スペースあり example.net: マッチする ご連絡は support@example.net までお願いいたします。 ## 自然文前後スペースなし example.net: マッチする ご連絡はsupport@example.netまでお願いいたします。 ## 文末に句読点あり example.net: マッチする user@example.net, ## サブドメイン付き example.com: マッチする user@sub.example.com ## サブドメイン付き example.net: マッチする user@sub.example.net
こちらは引っかかりません。

続いて引っかかる内容を下記のように作成します。
## example.net: マッチする user@example.net ## example.net (大文字): マッチする USER@EXAMPLE.NET ## 混合ケース example.net: マッチする User@Example.NET ## CSV途中 example.net: マッチする id, name, user@example.net, status ## 自然文前後スペースあり example.net: マッチする ご連絡は support@example.net までお願いいたします。 ## 自然文前後スペースなし example.net: マッチする ご連絡はsupport@example.netまでお願いいたします。 ## 文末に句読点あり example.net: マッチする user@example.net, ## サブドメイン付き example.com: マッチする user@sub.example.com ## サブドメイン付き example.net: マッチする user@sub.example.net
こちらは引っかかります。基本的に除外したドメイン(example.com)は引っかからず、それ以外のドメイン(example.net)が引っかかるのですが、サブドメインを含むもの(sub.example.com)は引っかかるようになっています。これは意図した動作で、これも除外する場合はドメインを併記するかうまく正規表現してもらうなどが必要ですが、今回はそこまで扱いません。

続いて「従業員メールアドレスのリストを検出する」のテストです。
以下のようにログファイルにうっかり混入してしまったファイルで試してみます。
2025-10-25 09:15:42 INFO User login successful: charlie@example.com from IP 203.0.113.45 2025-10-25 11:07:53 WARNING Failed to load profile for user: isabel87@example.com
これは検出できます。

内部のメールアドレスが公開されたものも用意します。(あんまりログとしてこの様になることは無いですが、まあテキスト中に埋め込まれたメールアドレスでの検証のためなのでそんなに気にせず)
2025-10-25 09:15:42 INFO User login successful: noreply@example.com from IP 203.0.113.45 2025-10-25 11:07:53 WARNING Failed to load profile for user: support@example.com
これは検出しません。

一通り機密情報の種類を作成し検証できました。
DLPポリシーの設定
それではDLPポリシーに組み込んでいきます。
ポリシーのルール作成時の条件として、作成した2つの機密情報の種類を選択します。この時、「グループ演算子」を「これらのいずれか」とする必要があります。組み合わせとして必要ですね。他のルールとの共存は、このグループ演算子が同じであれば基本的に可能です。

検出
設定したら実際に検出しましょう。
Windows11上ではポリシーが展開されると以下のように検出できます。

MacOSでも同様にポップアップが出て禁止されている動作がブロックされました。

アクティビティの確認
アクティビティエクスプローラーからイベントを確認します。
DLP rule matchedで検出され、ファイル名などの情報を確認できます。

ファイルパスや操作したアプリケーションもわかります。

証跡収集の設定を入れていると、ファイルの詳細も確認できます。

証跡収集については下記をご確認ください。
Microsoft PurviewエンドポイントDLPでルールに引っかかったファイルを証跡収集してみた – CloudNative Inc. BLOGs
まとめ
Microsoft PurviewのエンドポイントDLPで機密になるメールアドレスを検出してみました。
ロジックを検討するのは大変ですが、ハマるやり方を考えつけば実装はそんなに難しくはありません。
とはいえこれも実用化には色々条件があると思いますが、1つの形として良いのではないでしょうか?ぜひご活用ください。

