Microsoft Defender for Cloud で自社専用ポリシーを監視する方法

# 1. はじめに
Microsoft Defender for Cloud では CSPM (Cloud Security Posture Management) と呼ばれるベンチマーク基準から外れた状態を監視する機能が提供されています。多くの方は標準でリリースされている MCSB (Microsoft Cloud セキュリティベンチマーク) に設定されているルールを用いて監視することが多いと思いますが、MCSB で提供されていないポリシーを監視するケースもあるため、本記事では方法についてまとめてみました。

# 2. 設定方法
自社専用のベンチマークを設定する方法は 2 通り有ります。
後発で MDC 内で KQL を用いて開発可能な機能が提供されました。

| 方法 | 手法 | メリット | デメリット |
| ---- | ---- |:---- |:---- |
| Azure Policy で設定する | 「ポリシー」画面から、自社用のイニシアティブ、ポリシーを選択して設定する。旧来から提供されてきた方法。 | - 昔から提供されてきたこともあり、サンプルポリシーが豊富<BR> | - Azure Policy 画面と Defender for Cloud 画面を行き来する必要がある<BR>- スクラッチで開発するのが難しい（独自の JSON 形式を理解して開発する必要がある |
| Defender for Cloud で設定する<BR>**New** | MDC 画面からイニシアティブを作成し、KQL ベースで作成する | - MDC 画面内で完結する<BR>- KQL を駆使することで開発が容易になった<BR> - Azure だけでなく、マルチクラウド(GCP/AWS) に対応 | - [**2024.7 現在**] サンプルクエリーが少なく、開発のハードルが高い |

# 3. 試してみる
## 3.1 Azure Policy からの設定
Azure Policy では、MCSB ベンチマーク以外に含まれていない多数のポリシーが提供されています。
Azure のみ(マルチクラウド要件で無ければ)、既存の資産を生かした方が簡単なのでこちらをお勧めします。

【Azure Policy 画面】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/f04d6fc7-6ae2-9e4b-06ed-6032065d783a.png)

### 3.1.1 Azure Policy からイニシアティブ定義を作成する
ポリシー画面から、新規にイニシアティブ定義を作成します。
- イニシアティブの場所は自社の管理グループを考慮して設定します
- カテゴリは後に分かりやすいものを選択しましょう (本例では ``General`` を設定しています)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/9fbf4164-5b15-4b63-42a8-6d652c586e49.png)

### 3.1.2 イニシアティブにポリシーを追加する
作成するイニシアティブにポリシー定義を追加します。
- 多数のポリシーが表示されますので、カテゴリーなどでフィルターして設定しましょう。
- 本例では MCSB では提供されていない App Service の Public Network Access 禁止を想定して設定しています。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/b2e98ab7-c830-da98-4f65-161e3dd67876.png)

### 3.1.3 (Option) グループの作成
ポリシーが多数存在する場合は、グループを作成してマッピングすることが出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/12cd1f04-466a-c745-c45a-fa00a5e88a22.png)
グループを作成することで、ポリシー選択画面からグループに登録することが出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/398781a0-e47e-1f50-b28b-b9ea21d62707.png)


### 3.1.4 (Option) イニシアティブパラメーター / ポリシーパラメーター
各ポリシーでは、ポリシー内に設定する項目（パラメーター）が存在します。
ポリシーで設定するタグ情報や、期間などを設定する日数など、ポリシー上設定する値をパラメータとして定義する機能が提供されています。

https://learn.microsoft.com/ja-jp/azure/governance/policy/samples/pattern-group-with-initiative

ポリシーの中には、パラメータとして設定が必要となる項目が提供されています。
(例：Azure Key Vault の有効期限など)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/50718796-8c79-4b57-13a6-23fd4ceab2a8.png)


### 3.1.5 保存して確認する
最後に保存して設定を確認します。
ビルトインのポリシーについては、参照 ID の欄に日本語の説明が付加されており分かりやすいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/b48fee96-01a1-e7f1-fd0b-839b9f4233d0.png)

### 3.1.6 Microsoft Defender for Cloud から反映させる
3.1.5 まで設定して Custom のイニシアティブを作成することで、Microsoft Defender for Cloud の設定 / ポリシー画面に表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/d653d43b-36df-3d8a-11aa-f80358a55c4a.png)

### 3.1.7 自社イニシアティブのガバナンス状況を確認する
設定が反映し、ポリシー判定が行われることで、MCSB 同様に「規制コンプライアンス」からポリシー準拠状況を確認することが出来ます

::: note info
※規制コンプライアンスの利用は Defender CSPM、もしくは何らかの CWPP 機能の有効化 (Defender for -Resource Manager など) が必要です
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/d512b617-780a-5d95-1e05-58929d8901b6.png)

また、推奨事項画面より、イニシアティブでフィルターすることからも確認が出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/3706d429-0801-42dc-1550-6ce41c5cc175.png)

## 3.2 Microsoft Defender Cloud からの設定
新しく Microsoft Defender for Cloud 側で作成することが出来るカスタムイニシアティブ（標準）、およびカスタムの推奨事項です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/1bb62ca5-fb52-801b-79f6-57a91d143b99.png)

### 3.2.1 カスタムの推奨事項を作成する
MDC 側からのポリシー選択は限定されており、Azure Policy で提供されていたポリシーリストすべてを選ぶことが出来ない仕様になっています。また、AWS/GCP などのマルチクラウドに対応出来るように KQL (Kusto Query) ベースで開発が出来るようになったのが本機能です。

メニューから「カスタムの推奨事項」を選択すると以下のような画面に移ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/c323ab72-d2c8-5f64-674a-b8113aa37454.png)

### 3.2.2 KQL ベースで推奨事項ポリシーを作成する
設定を「クエリ」に移すと、クエリーエディタを用いてポリシーを開発することが出来るようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/b07ee30c-49ca-347c-5e64-9f96934a9a91.png)

クエリーエディタ画面では、実際の KQL と組み込まれている推奨事項ポリシーからサンプルが選べるようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/94c694a8-b211-82bf-5030-a0454f6380ec.png)

### 3.2.3 クエリエディタで作成したクエリーを保存
クエリエディタで評価したクエリを保存して先に進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/95b2e4e6-0755-b2a1-e2b1-9345b8b2be22.png)

### 3.2.4 カスタムイニシアティブを選択する
KQLベースで作成したクエリーを格納するカスタムイニシアティブを作成 or 設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/69175273-a252-8d03-7858-dd3e17c01c25.png)

### 3.2.5 (Option) 標準ルールと組み合わせる
MDCから作成したカスタムイニシアティブは、標準ルールと組み合わせることも可能です。
以下、KQLベースで作成したカスタムルールと標準ルールを組み合わせた例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/e0c2d2f6-f689-5c5d-8f7f-76da35e4522c.png)

### 3.2.6 設定を確認する
MDC のポリシー画面から設定を確認します。
Azure Policy で作成したイニシアティブが「カスタム（レガシ）」と表示されるのに対して、MDCのイニシアティブは「カスタム」と表示される点にご注意下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/a0671e0e-434e-3ebe-11d6-87b51327a03e.png)

### 3.2.7 イニシアティブを確認する
3.1.7 の確認方法と同様な手順になります。

# 4. 考察
2 通りの方法とも、Microsoft Defender for Cloud の画面（規制コンプライアンスや推奨事項など）から確認することが出来ました。MDC から設定可能な方式は 2024.7 現在プレビュー中といったこともあり、KQL の作成やサンプル例が少ないため、スクラッチで開発する工数がかかりそうです。但し AWS/GCP の情報を ARG (Azure Resource Graph) から自由に作れるため、これまで以上に自由度が広がったと思います。
Azure 内だけの自社ポリシーであれば、Azure Policy (ポリシー) で提供されている豊富なポリシー群で要が足りるのではないかと思います。また、Github には Microsoft Internal Team と有志メンバーによるカスタムポリシーが公開されており、気になるポリシーをこちらから追加して組み立てるのもアリなのではと思います。

https://github.com/Azure/Community-Policy

# 5. 最後に
イニシアティブ / カスタムポリシーはあまり情報が掲載されておらず、MDC 側で追加された新方式もリリースされたため、混乱される方も出てくるのではないかと思います。本記事がどなたかの参考になれば幸いです。

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