Microsoft Defender for Cloudの推奨事項に違反したときに通知する

Microsoft Defender for Cloudの規制コンプライアンス「Microsoft cloud security benchmark」には、多くの推奨事項があります。
特定の推奨事項のみ、違反した場合に検知して通知する仕組みを試したので書き残します。

# 対象の推奨事項
* 今回は以下の推奨事項に違反したとき通知するように設定します
    * NS. ネットワークセキュリティ
        * NS-1. ネットワークセグメント化の境界を確立する
            * ご使用の仮想マシンに関連付けられたネットワークセキュリティグループでは、すべてのネットワークポートを制限する必要があります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/0b9a7d52-50b4-0690-8840-1853231ea35a.png)
* 仮想マシンで3389や22ポートをInternet向けに全開放したとき違反となる項目です

# Logic Apps作成
* Logic Appsを[従量課金プランで作成](https://learn.microsoft.com/ja-jp/azure/logic-apps/quickstart-create-example-consumption-workflow#create-a-consumption-logic-app-resource)します
* 作成後に「When a Microsoft Defender for Cloud recommendation is created or triggered」トリガーを作成します
* 次にアクションとして「office 365 outlook」の「メールの送信(V2)」を選択し、メール送信先情報など入力します
    * 今回の例では以下のようなメール通知内容にしています
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/1a673fe1-e94b-fe39-b989-d3cdd6f6f6e8.png)

* 最終的に以下のようなフローになります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/bb33d65a-0f26-8eaa-c6df-479857cec6d7.png)

* ここはSlack通知など色々カスタマイズ可能です

# Microsoft Defender for Cloudワークフローの自動化
* Azure PortalよりMicrosoft Defender for Cloudを選択し、[管理]→[ワークフローの自動化]の順に選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/1df74c5d-62c8-07f4-4db3-7943093f81b1.png)

* [ワークフロー自動化の追加]を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/9afa618d-138e-2410-b8d6-43dca62fc2a3.png)

* トリガー条件として[Defender for Cloud]のデータ型に[推奨事項]を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/f408c84f-9f53-cd9f-3e6a-c47db4c821c2.png)

* 今回は[ご使用の仮想マシンに関連付けられたネットワークセキュリティグループでは、すべてのネットワークポートを制限する必要があります]を選択します（複数選択可能です）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/fbe7e4a8-895b-f92a-8ae8-d3438dda100e.png)

* [推奨事項の状態]では異常時のみ通知するのか、全ての状態遷移で通知するのかなど要件に合わせて選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/26deeffe-477a-1336-e9e4-45ce63042479.png)

* 最後に先ほど作成したLogic Appsを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/6d6d57f0-f270-0625-cad5-a1a966df8fbb.png)

* Logic Appsのトリガー設定でDefender for Cloudのトリガーを設定していない場合、[トリガー不可]と表示されるため注意が必要です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/08f8a783-25ac-dfa9-e2eb-b3e8b4b9782d.png)

# テスト
* 一時的に異常な状態を作り出してテストしてみます
* 今回の例だとVM停止状態でも検知するので、「VM作成→停止→22ポートを全解放させたNSGをアタッチ」の順で異常状態を作り出します
* しばらく待って検知し、メールが飛べば成功です
    * 更新の間隔は24時間なのでどのタイミングで検知されるかは分かりません（一応24時間といいつつ何度か更新されているような動きには見えました）

# 手動テスト
* Logic Appsの動作を手動でテストすることもできます
* Defender for Cloudから[全般]→[推奨事項]の順に選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/fdb7506f-ee80-0958-9174-35978ddd8760.png)

* 異常なリソースが検知されているはずなので選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/ffa0c1d8-2237-614b-9202-1e6fc16e5e2a.png)

* ワークフローの自動化から[ロジックアプリのトリガー]を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/bacf0983-dd40-2a62-c2d4-913b23be08f4.png)

* 事前に作成したLogic Appsが一覧表示されるので、選択して実行します
    * この推奨事項が検知されたときのトリガーとしてLogic Appsが実行されるため、メール通知内容などテストすることが可能です

# メール通知結果
* 今回の設定例では以下のように通知されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/48a75ddc-ff37-a2e9-f405-1b63d12ea69e.png)

# 注意事項
* この通知設定をしたあとに状態遷移したリソースが通知されます。設定前から異常だったリソースは通知されないので注意ください

以上です