Azure Policyを使ってDefender CSPMが有効になっていないサブスクリプションを検出・修正・強制してみる
はじめに
通常、Defender CSPMはサブスクリプションに対して有効にすることができ、管理グループに対して有効にすることができません。
そのため、この記事では「管理グループ配下のすべてのサブスクリプションに対してDefender CSPMを有効にしたい」というニーズを満たすために、Azure ポリシーを使ってDefender CSPMが有効になっていないサブスクリプションを検出・修正・強制を行います。
Microsoft Defender for Cloudとは
Microsoft Defender for Cloudは、Microsoftが提供するクラウドネイティブアプリケーション保護プラットフォーム (CNAPP) で、以下の3つのコンポーネントから構成されています。
- 開発セキュリティ運用 (DevSecOps)
- Cloud Security Posture Management (CSPM)
- Cloud Workload Protection Platform (CWPP)

Defender CSPMとは
Microsoft Defender for CloudのCSPM機能は有償プランと無償プランがあります。
- Foundational CSPM(無償版):Defender for Cloud にオンボードするサブスクリプションとアカウントに対して既定で有効になっている無料プラン。
- Defender CSPM(有償版):Foundational CSPM プラン以外の追加機能を提供する有料プラン。 AI セキュリティ体制、攻撃パス分析、リスクの優先順位付けなど、より高度なセキュリティ体制機能が提供される。
両者で利用可能な機能は以下の通りです。
| Feature | Foundational CSPM(無償版) | Defender CSPM(有償版) | Cloud availability | 
|---|---|---|---|
| セキュリティに関する推奨事項 | ⚪ | ⚪ | Azure, AWS, GCP, on-premises, Docker Hub, JFrog Artifactory | 
| 資産インベントリ | ⚪ | ⚪ | Azure, AWS, GCP, on-premises, Docker Hub, JFrog Artifactory | 
| セキュリティ スコア | ⚪ | ⚪ | Azure, AWS, GCP, on-premises, Docker Hub, JFrog Artifactory | 
| Azure Workbooks を使用したデータの視覚化とレポート | ⚪ | ⚪ | Azure, AWS, GCP, on-premises | 
| データのエクスポート | ⚪ | ⚪ | Azure, AWS, GCP, on-premises | 
| ワークフローの自動化 | ⚪ | ⚪ | Azure, AWS, GCP, on-premises | 
| 修復のためのツール | ⚪ | ⚪ | Azure, AWS, GCP, on-premises, Docker Hub, JFrog Artifactory | 
| Microsoft Cloud Security Benchmark | ⚪ | ⚪ | Azure, AWS, GCP | 
| AI セキュリティ体制管理 | - | ⚪ | Azure, AWS | 
| エージェントレス VM の脆弱性スキャン | - | ⚪ | Azure, AWS, GCP | 
| VM シークレットのエージェントレス スキャン | - | ⚪ | Azure, AWS, GCP | 
| 攻撃パス分析 | - | ⚪ | Azure, AWS, GCP, Docker Hub, JFrog Artifactory | 
| リスクの優先順位付け | - | ⚪ | Azure, AWS, GCP, Docker Hub, JFrog Artifactory | 
| セキュリティ エクスプローラーを使用したリスクハンティング | - | ⚪ | Azure, AWS, GCP, Docker Hub, JFrog Artifactory | 
| コンテナーのコードからクラウドへのマッピング | - | ⚪ | GitHub, Azure DevOps, Docker Hub, JFrog Artifactory | 
| IaC のコードからクラウドへのマッピング | - | ⚪ | Azure DevOps, Docker Hub, JFrog Artifactory | 
| PR 注釈 | - | ⚪ | GitHub, Azure DevOps | 
| インターネット露出分析 | - | ⚪ | Azure, AWS, GCP, Docker Hub, JFrog Artifactory | 
| 外部攻撃面の管理 | - | ⚪ | Azure, AWS, GCP, Docker Hub, JFrog Artifactory | 
| 規制コンプライアンス評価 | - | ⚪ | Azure, AWS, GCP, Docker Hub, JFrog Artifactory | 
| ServiceNow 統合 | - | ⚪ | Azure, AWS, GCP | 
| 重要な資産保護 | - | ⚪ | Azure, AWS, GCP | 
| 大規模な修復を推進するためのガバナンス | - | ⚪ | Azure, AWS, GCP, Docker Hub, JFrog Artifactory | 
| データ セキュリティ体制管理 (DSPM)、機密データ スキャン | - | ⚪ | Azure, AWS, GCP | 
| Kubernetes のエージェントレス検出 | - | ⚪ | Azure, AWS, GCP | 
| カスタム推奨事項 | - | ⚪ | Azure, AWS, GCP, Docker Hub, JFrog Artifactory | 
| エージェントレス コードからクラウドまでのコンテナの脆弱性評価 | - | ⚪ | Azure, AWS, GCP, Docker Hub, JFrog Artifactory | 
| API セキュリティ体制管理 (プレビュー) | - | ⚪ | Azure | 
| Azure Kubernetes Service セキュリティ ダッシュボード (プレビュー) | - | ⚪ | Azure | 
料金
Defender CSPM(有償版)の料金は 対象リソース * $5.11/月 で計算されます。
対象のリソースは以下のとおりです。
- VM
- ストレージ アカウント
- OSS DB
- マシン上の SQL PaaS & サーバー
Azure Policy とは
Azure Policyは、Azureリソースの統制・管理を行うサービスです。
Policyを管理グループ、サブスクリプション、リソースグループに適用することができ、その効果は下位の管理グループ、サブスクリプション、リソースグループに継承されます。
Azure Policyの効果 (effect) は下記の通りです。
- addToNetworkGroup
- append
- audit
- auditIfNotExists
- deny
- denyAction
- deployIfNotExists
- disabled
- manual
- modify
- mutate
Azure Policyはカスタムで作成することもできますが、すでに用意された組み込みポリシーを使うこともできます。
この記事では、組み込みのAzure PolicyであるMicrosoft Defender CSPM を有効にするように構成するを使ってみます。
Microsoft Defender CSPM を有効にするように構成する
Microsoft Defender CSPM を有効にするように構成するの効果 (effect) は DeployIfNotExists で、要約すると以下の仕様になっています。
- 新規作成したサブスクリプションで Microsoft Defender CSPM が無効の場合、有効にする
- 別の管理グループから移動してきたサブスクリプションも対象
 
- 既存のサブスクリプションで Microsoft Defender CSPM が無効の場合、非準拠リソースとして検出する
- 修復ルールを実行するとで手動での有効化はできる
 
やってみる
この検証では以下の管理グループサブスクリプションを使用します。
いずれのサブスクリプションも Microsoft Defender CSPM が無効の状態で実施します。
- Tenant Root Group
- wada-management-group ←ここにポリシーをアタッチ
- sandbox-01
 
- sandbox-02
 
- wada-management-group ←ここにポリシーをアタッチ
現状の確認
まずは、2つのサブスクリプションでMicrosoft Defender CSPM が無効になっていることを確認します。
Azure ポータルで、Microsoft Defender for Cloud の概要を開き アップグレードするにはこちらをクリック > をクリックします。

どちらのサブスクリプションもオフになっていることを確認します。

Azure Policy の割り当て
次にAzure Policyの割り当てを行います。
主要なパラメータは以下の通り設定します。
| 項目 | 設定値 | 備考 | 
|---|---|---|
| スコープ | wada-management-group | 割り当てる管理グループ,サブスクリプション,リソースグループを指定可能 | 
| 除外 | - | 割り当てから除外するリソースを定義できる | 
| ポリシー定義 | Microsoft Defender CSPM を有効にするように構成する | 割り当てるポリシーを選択する | 
| 割り当て名 | Microsoft Defender CSPM を有効にするように構成する | |
| ポリシーの適用 | 有効 | |
| マネージド ID を作成します | 有効 | 修復アクションを実行するロールを作成する | 
| マネージド ID の種類 | システム割り当てマネージド ID | |
| システム割り当て ID の場所 | Japan East | |
| コンプライアンス非対応のメッセージ | - | Azure ポリシーによってアクションが拒否された時のメッセージを指定 | 
Azure ポータルからポリシーのページを開きます。

サイドタブから「割り当て」をクリックします。

「ポリシーの割り当て」をクリックします。

スコープの「・・・」をクリックし、割り当て先を選択します。

今回は「wada-management-group」の管理グループを選択し、「Select」をクリックします。

ポリシー定義の「・・・」をクリックし、割り当てたいポリシーを選択します。

「Configure Microsoft Defender CSPM to be enabled」を検索・選択し「追加」をクリックします。

設定を確認し「次へ」をクリックします。

パラメータセクションは特に選択なく「次へ」をクリックします。

システム割り当てマネージドIDをJapan Eastに作成する設定をし「次へ」をクリックします。
このポリシーでは修正まで行うため、修正時に必要なロールを作成する必要があります。

「コンプライアンス非対応のメッセージ」は特に指定せず「次へ」をクリックします。

設定値を確認し「作成」をクリックします。

これでAzure Policyの割り当ては完了です。
ポップの通り、検証は15分ほど時間をおいてから行うことを推奨します。

既存のサブスクリプションの確認
Azure ポリシーの挙動を確認します。
まずは、Azure ポリシーを割り当てた管理グループに所属するsandbox-01のサブスクリプションを確認します。
Azure ポータルで、Microsoft Defender for Cloud の概要を開き アップグレードするにはこちらをクリック > をクリックします。

どちらのサブスクリプションもオフになっていることを確認します。
DeployIfNotExists の仕様通り、既存のサブスクリプションは無効のままでした。

続いてAzure ポリシー側の挙動を確認します。
Azure ポリシーのページから「割り当て」を開きます。

先ほど作成した「Microsoft Defender CSPM を有効にするように構成する」をクリックします。

「コンプライアンスの表示」をクリックします。

sandbox-01のサブスクリプションが「コンプライアンス非対応」として検出されていました。

新規のサブスクリプションの確認
続いて管理グループに所属していない方のサブスクリプションであるsandbox-02を、Azure Policyを割り当てた管理グループであるwada-management-groupに移動します。
Azure ポータルから管理グループのページを開きます。

管理グループ (wada-management-group) をクリックします。

「サブスクリプションの追加」をクリックします。

sandbox-02を選択し「保存」をクリックします。

1時間ほど待ってから確認したところ、sandbox-02のMicrosoft Defender CSPMが有効になっていました。

Azure ポリシーのコンソールからは、「コンプライアンス対応」のステータスになっていることを確認できました。

コンプライアンス非対応の修復
最後に、「コンプライアンス非対応」のステータスであるサブスクリプション (sandbox-01) に対して修復アクションを実行し、Microsoft Defender CSPM を有効にします。
対象の割り当てのページから「修復タスクの作成」をクリックします。

修復オプションを選択します。
「修復する特定のリソースを選択します」を選択することで、対象のリソースを特定して修復することができます。

サブスクリプション (sandbox-01) を選択して「修復」をクリックします。

Microsoft Defender for Cloud の設定を確認すると、sandbox-01のMicrosoft Defender CSPMが有効になっていました。

Azure ポリシーのコンソールからは、「コンプライアンス対応」のステータスになってい流ことを確認できました。

最後に
この記事では、組み込みのAzure PolicyであるMicrosoft Defender CSPM を有効にするように構成するを使ってみました。
組織内のサブスクリプション全てでMicrosoft Defender CSPM を有効にしたい場合にご参考になればと思います。











