Microsoft Defender for Cloud の連続エクスポートを用いて、時系列のセキュリティスコア/推奨事項を管理する

# 1. はじめに
Microsoft Defender for Cloud (MDfC) は様々な機能が提供されていますが、Azure 環境の健全性をスコア値で表示する「セキュリティスコア」と、CSPM (Cloud Security Posture Management) として知られる推奨事項は、代表的なセキュリティの指標として活用することになります。

|  機能  | 概要 | イメージ |
| ---- | ---- | ---- |
| セキュリティスコア | Azure サブスクリプションのセキュリティ統計値 | <img alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/4c70a0e4-88cd-6ffe-7899-49e6d384465c.png" width="60%"> |
| 推奨事項 | Azure Policyによるセキュリティ推奨事項 | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/607fa37e-de84-6721-2ff1-47573fcfe5ba.png)|

初期設定では上記の情報はAzure Portal を開いた際に出力される定点情報になっています。
Azure 環境を運用していると、過去から時系列の情報でセキュリティスコアがどのように変化したのか、推奨事項がどのような状態であったのかを確認するようなケースも出てきますが、どのようにしたらよいのでしょうか？

# 2. 連続エクスポートで継続的にデータを出力してみよう
Microsoft Defender for Cloud では、セキュリティスコアの継続的なモニタリング、CSPM による推奨事項の変化を捉えるため、**[連続エクスポート](https://docs.microsoft.com/ja-jp/azure/defender-for-cloud/continuous-export?tabs=azure-portal)機能**を提供しています。この機能を用いることで、推奨事項やセキュリティスコアの情報を Azure Event Hub を通じて 3rd Party 製品に流したり、Log Analytics に出力して監視を行うことが出来るようになります。 
**初期設定では無効化されている**ため、Microsoft Defender for Cloud の運用を開始する場合は本機能を活用することをお勧めします。

サブスクリプション毎を束ねて、一元化して、統合管理するような構成が望ましいです。
イメージを以下に示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/04a0830b-3ea9-844b-528a-c6eb0f6a57b6.png)

連続エクスポートは Azure Active Directory (AAD) 内のサブスクリプション間に対しては設定可能ですが、異なる AAD テナント宛の通知は不可なのでご注意ください。

# 3. 設定方法
連続エクスポートの設定は Microsoft Defender for Cloud のサブスクリプション設定より行います。
以下設定イメージを添付します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/9c95d54b-0579-a52e-b31b-bdebdaf1b6c4.png)

エクスポートの設定では以下2 種類の方法があります。
基本はストリーミングで設定しておいて、ログ量が大きすぎたり、データを1週間単位で保管するのが良い場合は後者を選択するのが良いのではと思います。

|  設定  | 出力間隔 | 説明 |
| ---- | ---- | ---- |
| 更新のストリーミング | 随時 | リソースの正常性状態が更新されると、評価が送信されます<BR> (更新がなければ、データは送信されません) |
| スナップショット | 1週間 | 選択したデータ型の現在の状態のスナップショットが、サブスクリプションごとに 1 週間に 1 回送信されます。<BR>スナップショットしたデータを抽出する場合、 ```IsSnapshot``` フィールドが True になっているものをクエリーします。 |

「構成のエクスポート」のリソースグループは、単にこの構成エクスポート設定を保存するリソースグループです。命名規則で MDfC のワークブックや構成管理を行う専用のリソースグループを作っておけば良さそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/c50ca043-de49-f2b0-d91e-d9d28f5d2fcc.png)

最期のAzure Monitor アラートとの統合では、Azure Monitor 側でセキュリティスコアやアラートが設定出来ますが、Azure Monitor からのアラート通知は通知時に詳細情報を入れることが出来ません。
今回は Microsoft Sentinel を用いて分析ルールを用いて通知させ、Entity 情報を用いてサブスクリプションなどの情報を通知させることを想定しています。

# 4. 設定後の確認 - Log Analytics のテーブル
上記設定が行われると、ターゲットの Log Analytics テーブルに対して「SecurityCenterFree」が作成されます。連続エクスポートのデータは各テーブルに保管されるため、設定後の確認にテーブルを参照することをお勧めします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/5a219775-511e-343d-15fe-7ad8ada94d24.png)

各テーブルの内容は以下の通りです。詳細はリンク先の公式Docsを参照して下さい。

| テーブル名 | 概要 |
| ---- | ---- |
| ProtectionStatus | [マルウェア対策のインストール情報とコンピューターのセキュリティの正常性状態](https://docs.microsoft.com/ja-jp/azure/azure-monitor/reference/tables/protectionstatus) |
| SecurityScoreControls | [各コントロール毎のセキュリティスコア情報](https://docs.microsoft.com/en-us/azure/azure-monitor/reference/tables/securescorecontrols) |
| SecurityScores | [セキュリティスコア情報](https://docs.microsoft.com/en-us/azure/azure-monitor/reference/tables/securescores) |
| SecurityAlert | [Microsoft Defender for Cloudのアラート情報](https://docs.microsoft.com/en-us/azure/azure-monitor/reference/tables/securescores) |
| SecurityBaseline | [セキュリティベースライン情報](https://docs.microsoft.com/en-us/azure/azure-monitor/reference/tables/securescores) |
| SecurityBaselineSummary | [セキュリティベースラインサマリー情報](https://docs.microsoft.com/en-us/azure/azure-monitor/reference/tables/securescores) |
| SecurityNestedRecommendation | [ネストされた推奨事項。<BR>「親」レコメンデーションにグループ化された「サブ」レコメンデーション情報](https://docs.microsoft.com/en-us/azure/azure-monitor/reference/tables/securescores) |
| SecurityRecommendation | [CSPM 推奨事項情報](https://docs.microsoft.com/ja-jp/azure/azure-monitor/reference/tables/securityrecommendation) |
| SecurityReguratoryCompliance | [規制コンプライアンス評価の状態‎](https://docs.microsoft.com/en-us/azure/azure-monitor/reference/tables/securityregulatorycompliance) |
| Update | [‎更新スケジュール実行の詳細。<BR>利用可能な更新プログラムやインストールされた更新プログラムなどの情報が含まれる](https://docs.microsoft.com/en-us/azure/azure-monitor/reference/tables/update) |
| UpdateSummary | [各更新スケジュールの実行の概要。<BR>インストールされなかった更新プログラムの数などの情報が含まれる](https://docs.microsoft.com/en-us/azure/azure-monitor/reference/tables/securescores) |

- SecurityAlert については、Microsoft Sentinel 側で Microsoft Defender for Cloud コネクタを用いて接続した場合は、既に Micosoft Sentinel 側のワークスペースに「Sentinel」-> 「SecurityAlert」として取り込まれています。
    - この場合は、二重の取り込むを防ぐため、連続エクスポートのアラート設定箇所は外して下さい。
    - 保存時に警告が出ますので、Sentinel 側の Defender for Cloud コネクタを ON にしている場合はご注意ください。   
- 要望が多いのは各サブスクリプション毎のセキュリティスコア値と、推奨事項をチェックすることが多いと思います。以下 Log Analytics でクエリーを出力した例です。

## SecurityScores
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/5b9f1a47-27e7-6471-c6d4-2f97b5fd2b7a.png)

## SecurityRecommendation
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/cad5158d-f534-6ba5-c9a8-a3980126e000.png)

# 5. 可視化
連続エクスポートの設定後、対象の Log Analytics ワークスペースに対してクエリーを打つことで可視化が出来るようになります。
Microsoft Defender for Cloud からも、標準で分析を行うためのテンプレートが提供されています。
「セキュリティ態勢」から「経時的なセキュリティスコア」を参照すると表示されます。
もし、マルチクラウド連携しているのであれば、GCP / AWS のコネクタ経由の情報も表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/24b2f8fd-b415-a0e1-49ba-81c2046ac78d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/1bce1f7e-718f-9fec-b723-cc1c4cbedd2c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/036a3370-8010-72df-7720-3608eecbd5bb.png)

# 6. 応用例
Microsoft Sentinel を用いると、分析ルールを用いて様々なアラートを検出出来るようになります。
以下例です。

- 一定の閾値に対するセキュリティスコア上昇時にアラートを通知する
    - アラート通知後は Entity 情報にサブスクリプション情報を含んで、管理者宛に通知させる
- 特定の推奨事項に対して、非準拠時にアラートを通知する
    - 企業として特に違反監視が必要となる推奨事項（例：MFA 非準拠など）は通知対象とさせる
    - アラート通知時は Entity 情報に対象のサブスクリプション、リソース情報を追加して、管理者に通知させる

# 7. 注意事項など
連続エクスポート設定ですが、設定によって全量が出る・出ないの違いがあります。

- 「**更新のストリーミング**」を用いてエクスポートした場合、推奨事項のデータは **「データが可変したタイミング」** で通知されます。
    - Microsoft Defender for Cloud による CSPM 監査では日時で Azure Policy を通じて評価されます
    - データが変更されていない場合は過剰なイベントを抑制するため通知されない仕様のため、毎日全量の計測データがログとして保管されるものではない点にご注意下さい。
- 「**スナップショット**」による週次毎のエクスポートを設定した場合は、1週間おきに全量データがエクスポートされます。
    - すべてのデータを保全しておく場合はこちらを有効にすることが推奨されます。


# 7. まとめ
Microsoft Defender for Cloud の運用観点から、連続エクスポートによる監視についてまとめてみました。どなたかの参考になれば幸いです。

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