🛡️

Defender for Servers の設定を Azure Policy で自動化する

2024/03/21に公開

はじめに

Defender for Servers は Defender for Cloud の サーバー向けの脅威検知機能です。この機能にはいくつか以下のような設定があります。


こちらですが、複数のサブスクリプションや新規サブスクリプションなどで都度有効化と初期設定する場合に手間がかかります。そこで今回は Azure Policy を使用して設定する方法を検証していきます。

情報集め

ターゲットは以下とします。(Log Analytics エージェントの自動デプロイはすでに非推奨なので除外)

  • Defender for Servers の有効化
  • マシンの脆弱性評価 (Microsoft Defender 脆弱性の管理を使用)
  • Endpoint Protection
  • マシンのエージェントレス スキャン

Defender for Servers の有効化は以下に情報がある通り、組み込みのポリシーが準備されています。今回はこちらを流用します。
https://learn.microsoft.com/ja-jp/azure/defender-for-cloud/plan-defender-for-servers-scale#scale-a-defender-for-servers-plan


マシンの脆弱性評価 (Microsoft Defender 脆弱性の管理) は以下の API を参考にします。
https://learn.microsoft.com/en-us/rest/api/defenderforcloud/settings/update?view=rest-defenderforcloud-2021-06-01&tabs=HTTP

Endpoint Protection の設定は以下のドキュメントを参考にします。
https://learn.microsoft.com/ja-jp/azure/defender-for-cloud/enable-defender-for-endpoint#enable-the-microsoft-defender-for-endpoint-unified-solution-at-scale

マシンのエージェントレス スキャンは以下の Pricing の API を参考にします。
https://learn.microsoft.com/ja-jp/rest/api/defenderforcloud/pricings/update?view=rest-defenderforcloud-2024-01-01&tabs=HTTP

こちらの API から分かる通り、Defender for Servers の有効化の設定の中の "extensions" で指定します。なお、もうひとつの MdeDesignatedSubscription は MDE ダイレクト オンボーディングでサブスクリプションを指定するための設定のため、今回は使用しません。

ちなみに、こちらの設定に関しては同じく組み込みのポリシーが準備されています。
https://portal.azure.com/#view/Microsoft_Azure_Policy/PolicyDetail.ReactView/id/%2Fproviders%2FMicrosoft.Authorization%2FpolicyDefinitions%2F5eb6d64a-4086-4d7a-92da-ec51aed0332d

ポリシー作成

以下のようにポリシーを構成します。下記は以下の条件としています。

  • Defender for Servers が無効の場合に非準拠となり修復が実行
  • Defender for Servers P2: 有効化
  • マシンのエージェントレス スキャン: 有効化
  • マシンの脆弱性評価: Microsoft Defender 脆弱性の管理を有効化
  • Endpoint Protection: 無効化
Azure Policy
{
  "mode": "All",
  "policyRule": {
    "if": {
      "allOf": [
        {
          "field": "type",
          "equals": "Microsoft.Resources/subscriptions"
        }
      ]
    },
    "then": {
      "effect": "[parameters('effect')]",
      "details": {
        "type": "Microsoft.Security/pricings",
        "name": "VirtualMachines",
        "deploymentScope": "subscription",
        "existenceScope": "subscription",
        "roleDefinitionIds": [
          "/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635"
        ],
        "existenceCondition": {
          "field": "Microsoft.Security/pricings/pricingTier",
          "equals": "Standard"
        },
        "deployment": {
          "location": "westeurope",
          "properties": {
            "mode": "incremental",
            "parameters": {},
            "template": {
              "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
              "contentVersion": "1.0.0.0",
              "parameters": {},
              "variables": {},
              "resources": [
                {
                  "type": "Microsoft.Security/pricings",
                  "apiVersion": "2024-01-01",
                  "name": "virtualMachines",
                  "properties": {
                    "pricingTier": "Standard",
                    "extensions": [
                      {
                        "name": "AgentlessVmScanning",
                        "isEnabled": "true"
                      }
                    ]
                  }
                },
                {
                  "type": "Microsoft.Security/serverVulnerabilityAssessmentsSettings",
                  "apiVersion": "2023-05-01",
                  "name": "AzureServersSetting",
                  "kind": "AzureServersSetting",
                  "dependsOn": [
                    "[resourceId('Microsoft.Security/pricings','virtualMachines')]"
                  ],
                  "properties": {
                    "selectedProvider": "MdeTvm"
                  }
                },
                {
                  "type": "Microsoft.Security/settings",
                  "apiVersion": "2021-06-01",
                  "kind": "DataExportSettings",
                  "name": "WDATP",
                  "properties": {
                    "enabled": "false"
                  }
                }
              ],
              "outputs": {}
            }
          }
        }
      }
    }
  },
  "parameters": {
    "effect": {
      "type": "String",
      "metadata": {
        "displayName": "結果",
        "description": "ポリシーの実行を有効または無効にします"
      },
      "allowedValues": [
        "DeployIfNotExists",
        "Disabled"
      ],
      "defaultValue": "DeployIfNotExists"
    }
  }
}

ポリシーが適用され修復されると、以下のようにサブスクリプションでデプロイ完了が確認できます。

まとめ

本記事では Defender for Servers の設定を Azure Policy で自動化する方法を確認しました。特に Azure 利用者ごとに新規サブスクリプションを払い出しているケースではこちらのポリシーを活用することで払い出し時の初期設定の工数削減が可能になるため、ぜひ検討いただければと思います。

Microsoft (有志)

Discussion