はじめに
セキュリティインシデントが発生したとき、素早くデバイスをネットワークから切り離すのは初動対応の基本です。一方で、業務で現場の方と会話する機会を頂いて1年弱が経ち、手動で管理ポータルを操作している時間的な余裕はないことも多いと分かってきました。そこで SOAR(Security Orchestration, Automation and Response)の出番です。
今回は Microsoft Defender for Endpoint(MDE)のデバイス分離 を Azure Logic App から自動実行できるか検証しました。さらに、「分離はしたいけど特定の外部サービスとの通信は維持したい」という要件が実現できるかも合わせて確認します。
デバイス分離中でも、基本的にデバイスは MDE のクラウドサービスとは通信できるように制御されます。これは、分離中のデバイスを調査するために、リモートからのコマンド実行などを可能にするためです。今回の検証のような任意に作成した除外ルールから攻撃が拡大してしまう可能性もあるため、個人的に除外ルールは業務上特別必要なもので最小限に構成し、定期的に見直すのが良いかと思います。
想定読者
- MDE を使っている or 検討しているセキュリティ担当者
- SOAR / Logic App に興味がある方
- デバイス分離の仕組みをもう少し深く知りたい方
検証環境
- Microsoft Defender for Endpoint(P2 ライセンス)
- Azure Logic App(従量課金)
- テスト用 VM : Windows 11 Pro 25h2(MDE P2 オンボード済み)
本記事は個人の検証環境で実施した内容をまとめたものです。本番環境での動作を保証するものではありません。また、内容に誤りや気になる点がございましたらコメントでご指摘いただけますと幸いです。
MDE のデバイス分離とは
MDE には、侵害が疑われるデバイスをネットワークから切り離す「デバイス分離(Isolate device)」機能があります。今回は下記の 2 種類の分離を検証します。
| 種類 | 内容 |
|---|---|
| Full(完全分離) | MDE エージェント通信以外、すべてのネットワーク通信をブロック |
| Selective(選択的分離) | 特定の通信のみを制限。除外ルールと組み合わせて使う |
Full (完全分離) では除外ルールは効きません。特定 IP を許可しながら分離したい場合は Selectiveを使う 必要があります。
「分離の除外」とは
MDE には 分離の除外(Isolation Exclusions) という機能があり、分離中でも通信を許可する IP アドレスやプロセスをルールとして登録できます。
設定を有効にするには、Defender Portal で [System]>[Settings]>[Endpoints]>[Advanced features] へ移動し、[Isolation Exclusion Rules] のトグルをオンにする必要があります。
設定を有効にした後は、 [System]>[Settings]>[Endpoints]>[Advanced features]>[Isolation exclusion rules] から除外ルールを登録することができます。Windows と Mac に対してルールを設定でき、今回は下記のように対象端末に合わせて Windows rule を作成しました。
ルールには以下を設定できます。
| パラメーター | 内容 |
|---|---|
| Rule name | ルール名 |
| Direction | Inbound / Outbound |
| Remote IP | 許可する IP |
| Process path | 許可するプロセス |
この機能を有効化すると、以前の選択的分離 (Selective) で暗黙的に許可されていた Teams・Outlook・Skype の除外が削除されます。引き続き使う場合は手動でルールを追加してください。
Logic App で利用する MDE の組み込みコネクタ
Logic App には Microsoft Defender ATP という組み込みコネクタが用意されています。スクリーンショットの右側がその一部で、利用できるコネクタを確認できます。
これらのコネクタでは、例えば以下のアクションが使えます。
- Actions - Isolate machine ← 今回使うやつ
- Actions - Unisolate machine
- Actions - Run antivirus scan
- など多数
認証は OAuth がコネクタ内に内包されているので、サービスプリンシパルの手動作成やトークン管理は不要です。サインインするだけで完結しました。
検証の構成
今回の検証フローはこんな感じです (Copilot に作ってもらいました↓)。
[HTTP トリガー(手動実行)]
↓
[Logic App]
└─ Microsoft Defender ATP コネクタ
└─ "Actions - Isolate machine"
├─ Machine ID: <対象デバイス>
├─ IsolationType: Selective
└─ Comment: "Isolated by Logic App - test"
↓
[MDE がデバイスを選択的分離]
└─ 事前設定済みの分離除外ルール(1.1.1.1 Outbound Port 443)が適用
今回はテスト用途なので HTTP トリガー(手動実行)を使いましたが、本番 SOAR として使う場合は インシデント発生を起点 に自動分離が走るようにもできそうです。
実際にやってみた
Step 0: 分離対象のデバイスの初期の疎通確認
今回の検証では、IP アドレス 1.1.1.1 の通信を除外対象にします。そこで、デバイスを分離する前は 1.1.1.1 と 8.8.8.8 の両方と通信できていることを確認しておきます。疎通の確認には、MDE の Live Response 機能を使用しました。
以下のスクリプトを Live Response のライブラリに登録して実行しました (こちらも Copilot に作ってもらいました)。
# test-connectivity.ps1
$r1 = Test-NetConnection -ComputerName 1.1.1.1 -Port 443
$r2 = Test-NetConnection -ComputerName 8.8.8.8 -Port 443
Write-Output "1.1.1.1 (excluded) : $($r1.TcpTestSucceeded)"
Write-Output "8.8.8.8 (blocked) : $($r2.TcpTestSucceeded)"
スクリプト ファイルを Live Response のライブラリに登録する画面。

Live Response での実行コマンド:
run test-connectivity.ps1
コマンドを実行した結果がこちら。
1.1.1.1 も 8.8.8.8 も通信できていることが確認できました。
Step 1: 分離除外ルールを手動実行
まず Defender Portal で Isolation Exclusion Rules を有効化し、以下のルールを登録しました。(設定個所は、上述の 「分離の除外」とは に記載しています。)
| 項目 | 設定値 |
|---|---|
| Rule name | allow-external-service |
| Direction | Outbound |
| Remote IP | 1.1.1.1 |
続いて、分離を手動で実行していきます。Defender Portal で [Assets]>[Devices]> 検証対象の端末(vm-test-isolate) へ移動し、右上の三点リーダーから [Isolate Device] を選択します。
ポップアップが出てくるので、チェックボックスにチェックを入れて [Confirm] を選択します。このチェックボックスにチェックを入れて実行した場合、分離の除外ルールが有効化された状態となります。
このとき、Live Response 機能で分離されたデバイスの疎通を確認してみると、分離の除外ルールが効いているのが確認できました (1.1.1.1 は True、8.8.8.8 は False)。
Step 2: Logic App を作成してワークフローを実装
続いて、Step 1 にて手動で検証した操作をワークフローに組み込んでみます。Azure Portal で Logic App(従量課金)を作成。[Logic app designer] で以下のフローを組みました。
- トリガー: When an HTTP request is received
- アクション: Microsoft Defender ATP - Actions - Isolate machine
Isolate machine アクションの設定値はこちら。
Step 3: Logic App を実行して分離を実行
[Logic app designer] 上部の 「Run」 でワークフローを手動実行します (スクショ:左)。
私の体感ですが、分離対象の端末との RDP 接続が 5 秒くらいで遮断されました (スクショ:右)。
Defender Portal でデバイスのステータスが Isolated になっていることを確認。
Step 4: 分離後の通信テスト
分離後は RDP 接続が切断されるため、デバイス上での操作は Step 0 と同様に MDE の Live Response を使いました。
Live Response は MDE エージェントのチャネルを経由するため、基本的には分離中でも接続できます。MDE の通信経路をネットワーク製品などで変化させている場合は、本検証と動作が異なる可能性があります。
Live Response での実行コマンドは Step 0 と同様です。
run test-connectivity.ps1
結果はこちら。
1.1.1.1 (excluded) : True #除外ルールが効いて通信維持
8.8.8.8 (blocked) : False #分離によりブロック
期待通りの動作が確認できました!
Step 5: 完全分離 (Full) を実行した場合
Step 4 では、選択的分離 (Selective) で期待通りの動作を確認できました。ここでは、仮に完全分離 (Full) を実施した際に除外ルールが効かないことを確認してみます。結果は下記の通りで、完全分離の場合は除外ルールを無視して通信がブロックされていることが確認できました。
ハマりポイント
「分離の除外を使用する」をオンにしないと除外ルールが効かない
Defender Portal から手動で選択的分離をする際、分離の除外を使用する ためのチェックボックスが表示されます。これをオンにし忘れると除外ルールが効きません(1.1.1.1 も 8.8.8.8 も両方ブロックされます)。英語の UI で検証していて、最初は気づかずハマっていました、、、
Logic App の API 経由では IsolationType: Selective を指定するだけで除外ルールが自動的に適用されるため、この問題は発生しませんでした。
まとめ
| 確認項目 | 結果 |
|---|---|
| Logic App から MDE 分離 API を呼び出せるか | ✅ 成功 |
| 選択的分離で除外ルールの IP への通信が維持されるか | ✅ 成功 |
| 除外ルール外の IP がブロックされるか | ✅ 成功 |
「Logic App + 選択的分離 (Selective) + 分離除外ルール」の組み合わせで、特定の外部サービスとの通信を維持しながらデバイスを分離する SOAR フローが実現できることを確認できました。
次は Microsoft Sentinel のプレイブックと組み合わせて、アラートをトリガーに自動分離が走るフローも検証してみたいと思います。











