リソース単位で Microsoft Defender for Servers を API を用いて展開する（デプロイ編）

# 1. はじめに
Azure 基盤で利用できる Microsoft Defender for Cloud では、Azure VM / Arc リソースに対してエンドポイントの保護を提供する Microsoft Defender for Servers を提供しています。これまで、Defender for Servers の展開はサブスクリプション単位に対する有効のみで、リソース単位での有効化は未サポートでした。
この度、晴れて 2023/12/23 に Azure VM / Arc リソース毎に Microsoft Defender for Servers を有効化出来る機能が GA になりました！
これにより、Azure VM に対して個々のリソース毎に EDR である MDE (Microsoft Defender for Endpoint) を適用することが出来るようになります。詳細は以下の公式サイトをご参照下さい。

- [リリースノート：Release notes - Microsoft Defender for Cloud](https://learn.microsoft.com/en-us/azure/defender-for-cloud/release-notes#defender-for-servers-at-the-resource-level-available-as-ga)
- [Learn：Protect your servers with Defender for Servers - Microsoft Defender for Cloud](https://learn.microsoft.com/en-us/azure/defender-for-cloud/tutorial-enable-servers-plan#enable-the-plan-at-the-resource-level)
- [API：Pricings - REST API (Azure Defender for Cloud)](https://learn.microsoft.com/en-us/rest/api/defenderforcloud/pricings?view=rest-defenderforcloud-2024-01-01)

# 2. これまでの仕様と改善ポイント
改めて、これまでの仕様を振り返ると以下のようになります。
- これまで Defender for Servers の有効化は**サブスクリプション単位**であり、Microsoft Defender for Cloud 側から Defender for Servers を用いて有効化することしかできなかった
- サブスクリプション配下の Azure VM は強制で MDE が展開される仕様だった。例外も不可能だった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/920522ee-3a02-e891-0f5e-d55b2c52742b.png)

今回 GA になった 機能（リソースレベルの有効化）によって、Azure サブスクリプションの指定リソースだけを選定して、Defender for Servers の適用を行うことが出来るようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/fa73d926-5830-9380-369e-d316b41b99da.png)

これによって、これまで課題だった他社 EPP/EDR で展開されたリソースとの共存や、クリティカルなシステムの特性上エンドポイントを入れられないリソースなどの除外、段階を踏んだ MDE(EDR) の導入などが可能になります。

# 3. 現在の制限事項など
2024.1 現在、以下の仕様制限があります。詳細は公式ドキュメントをご参照下さい。
- リソース単位の有効化は API 経由による設定のみ対応（2024.1 現在、Azure ポータルからの設定は未サポート）
    - 後述に展開用のスクリプトが提供されています。
- Defender for Servers の各プランで機能の制限あり。
    - Defender for Servers プラン 1: リソース単位で有効化/無効化が可能。
     - Defender for Servers プラン 2: リソース単位で無効化のみサポート。
         - サブスクリプション レベルでプランを有効にし、特定のリソースを無効にすることはできますが、特定のリソースに対してのみプランを有効にすることはできません。
 - MDE はサブスクリプションの Entra ID テナントの Microsoft 365 Defender への登録になります。
     - 他テナントへの登録は不可、未サポート
 - Defender for Cloud の「コスト見積もりブック」は 2024.1 現在本機能利用時のリソースは対象外（サブスクリプション内の全コンピューティングリソースで見積もりされる）
 - Defender for Servers 無効化の場合、API の Disabled と合わせて、OS 側から MDE のオフボーディングが別途必要

# 4. やってみる (リソース単位での Microsoft Defender for Servers P1 有効化)
2024.1 現在、本機能は API による設定のみサポートしています。
公式では API を用いてタグを判別して Defender for Servers を有効化するスクリプトが提供されています。

https://github.com/Azure/Microsoft-Defender-for-Cloud/tree/main/Powershell%20scripts/Defender%20for%20Servers%20on%20resource%20level

お客様環境では Azure のタグ運用を用いていないケースも有るため、csv ファイルで指定して一括展開するスクリプトを作成してみました。
- csv ファイルに対象のリソースグループ、Azure VM / Arc 名を記入するだけ
- Powershell スクリプトを実行するだけで対象リソースを有効化
- 無効化スクリプト、チェックスクリプトも用意

以下の [Github レポジトリ](https://github.com/hisashin0728/EnableDefenderForServersByResourceLevelByCSV)に公開していますのでご参照下さい。

https://github.com/hisashin0728/EnableDefenderForServersByResourceLevelByCSV

## 4.1 Powershell による API 展開設定例
[上記のレポジトリ](https://github.com/hisashin0728/EnableDefenderForServersByResourceLevelByCSV)のスクリプトを用いて、対象のリソースを有効化してみます。
Powershell を実行すると、以下のような画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/ab2044db-b46e-54d0-4b05-2fca43fbc1ae.png)

この機能は Azure VM / Arc マシンの拡張 API 情報として、以下のフラグを有効化しています。
Pricing API の値を ``PricingTier : Standard``, ``subPlan : P1`` に反映することで、リソース毎に Defender for Servers P1 機能を有効化しています。

```json
{
  "properties": {
    "PricingTier": "Standard",
    "subPlan": "P1"
  }
}
```

## 4.2 確認方法
API によってフラグが反映されると、12時間に1回の間隔で Azure 基盤側から MDE (Microsoft Defender for Endpoint) がインストールされます。無事にインストールされると、Azure VM / Arc マシンの拡張情報で ``MDE.Windows``、``MDE.Linux``が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/efa10372-5766-ec75-71d3-ff04531e7880.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/eb9525dd-773f-49cc-ceb9-9e90744467cb.png)


インストールされない場合は、対象リソースから MDE への通信経路がブロックされている可能性があります。[MDE の接続URL](https://view.officeapps.live.com/op/view.aspx?src=https%3A%2F%2Fdownload.microsoft.com%2Fdownload%2F6%2Fb%2Ff%2F6bfff670-47c3-4e45-b01b-64a2610eaefa%2Fmde-urls-commercial.xlsx&wdOrigin=BROWSELINK) の Firewall / Proxy などの通信経路を確保するようにしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/5c885243-6c6d-5d93-1517-a60a26be75f5.png)

拡張機能で MDE が展開していれば、自テナントの Microsoft 365 Defender にオンボードとして登録されていることを確認してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/3a6bdbcb-bd9f-03af-fdd6-013b2ab2d66a.png)

# 5. まとめ
これまで課題となっていた、個々のリソース毎に Microsoft Defender for Servers を有効にしてサーバーリソースを保護することが出来るようになりました。Azure 側課金体系のため、稼働時間に対してのみ請求されるところも大きなメリットになります。Azure ポータルからの GUI による操作が待ち望まれますが、サンプルスクリプトなどを参考にしてご検討頂けたらと思います。本記事がどなたかの参考になれば幸いです。

＊本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。