在 適用於雲端的 Microsoft Defender 中建立自訂標準與建議

安全性建議在 適用於雲端的 Microsoft Defender 中可協助您改善並強化安全性態勢。 建議是根據對已啟用 適用於雲端的 Defender 的 Azure 訂閱、Amazon Web Services (AWS) 帳戶和 Google Cloud Platform (GCP) 專案,依據為其定義的安全性標準所進行的評估結果提出。

這篇文章說明如何:

  • 用 Kusto 查詢語言(KQL)為所有雲端(Azure、AWS 和 GCP)建立自訂推薦。
  • 將自訂建議指派給自訂安全性標準。

先決條件

在建立自訂建議或標準前,請確保你符合以下要求:

我們建議觀看本集的 適用於雲端的 Defender in the field,以了解更多關於自訂推薦以及如何撰寫 KQL 查詢。

建立自訂建議

建立自訂建議,包括補救步驟、嚴重性,以及應指派建議的標準。 您使用 KQL 新增建議邏輯。 你可以使用內建查詢範本的簡單查詢編輯器,隨時調整,或者從零開始撰寫 KQL 查詢。

要建立自訂推薦:

  1. 登入 Azure 入口網站。

  2. 請移至相關訂用帳戶的適用於雲端的 Microsoft Defender>環境設定>。

  3. 選擇 安全政策>+建立自訂推薦。

    適用於雲端的 Microsoft Defender安全政策頁面截圖,並強調「建立自訂推薦」動作。

  4. 輸入細節:必要條件:名稱、範圍、嚴重程度及安全問題。 可選:描述、修復。

  5. 選取 下一步。

  6. 輸入 KQL 查詢,或選擇 開啟查詢編輯器。

    自訂推薦流程的螢幕擷取畫面,其中使用 [開啟查詢編輯器] 動作來啟動 KQL 編輯器。

  7. 選取 下一步。

  8. 選擇相關標準作為建議。

    適用於雲端的 Microsoft Defender 建議詳細資料窗格的螢幕截圖,其中顯示名稱、嚴重性和指派的標準欄位。

  9. 選取 下一步。

  10. 選擇要指派的自訂標準。

  11. 選取 [檢閱及建立]。

  12. 仔細檢視建議細節。

  13. 選取 ,創建。

    適用於雲端的 Microsoft Defender「審核與建立」頁面的螢幕擷取畫面,顯示提交前的建議摘要。

使用查詢編輯器

建議使用查詢編輯器來建立建議查詢。 你也可以利用提供的 查詢範本和範例 來查看範例查詢,並學習如何建立自己的查詢。

  • 使用編輯器可協助您先建置並測試查詢,再開始使用該查詢。
  • 選取 [操作說明] 以取得如何建構查詢的協助,以及其他指示和連結。
  • 編輯器內建推薦查詢範例,可以幫助你建立自己的查詢。 資料會以 API 中的相同結構出現。
  1. 選擇 新查詢。

    查詢編輯器截圖,選取新查詢開始撰寫推薦查詢。

  2. 使用範例查詢範本及其說明,或從頁面下方選擇內建的推薦查詢範例,開始使用。

  3. 選取 [執行查詢],來測試您已建立的查詢。

  4. 查詢準備好後,從編輯器剪貼到 推薦查詢 窗格。

  5. 選擇 「下一步」,選擇建議相關的標準,選擇要指派的自訂標準,然後選擇 審查與建立。

  6. 檢視推薦細節並選擇 「建立」。

查詢範本與範例

查詢編輯器內建範例,本節範本則展示如何結構化常見的安全檢查。 每個範本回傳範圍內的資源,並將不合規的資源標記為 UNHEALTHY。 在此範本模式中,僅編輯 condition 表達式,並保持 HealthStatus 這一行不變。

備註

本節的範本使用 Azure 資源類型。 對於 AWS 和 GCP 資源,請將 Environment == 'Azure' 改成 Environment == 'AWS' 或 Environment == 'GCP',並更新 Identifiers.Type 以符合你環境中的資源類型。

識別缺少強制治理標籤的虛擬機,例如成本中心或擁有者資訊。

RawEntityMetadata
| where Environment == 'Azure' and Identifiers.Type =~ 'Microsoft.Compute/virtualMachines'
| extend condition = (isnull(Record.tags["CostCenter"]) or isnull(Record.tags["Owner"]))
| extend HealthStatus = iff(condition, 'UNHEALTHY', 'HEALTHY')
| project Id, Name, Environment, Identifiers, AdditionalData, Record, HealthStatus

輸出欄位:Id, Name, , EnvironmentIdentifiersAdditionalDataRecordHealthStatus

評估邏輯: 缺少必要標籤的機器會將 HealthStatus 設為 UNHEALTHY,並顯示為不合規結果。 已設定這兩個標籤的機器皆會將 HealthStatus 設為 HEALTHY。

KQL 輸出結構要求

在撰寫查詢前,先了解所需的輸出結構。 這就是 適用於雲端的 Microsoft Defender 如何解讀你的結果並將發現映射到資源的方式。

必填輸出欄位:

Column 類型 Purpose
Id 字串 (必要) 適用於雲端的 Defender 用來參考資源的資源識別碼。
Name 字串 (必要) 顯示於發現結果中的可供人類讀取的資源名稱。
Environment 字串 (必要) 雲端環境:Azure、AWS,或GCP。
Identifiers 動態(必填) 資源類型與識別碼從來源紀錄傳遞。
AdditionalData 動態(必填) 從來源記錄傳遞的補充資源元資料。
Record 動態(必填) 包含所有屬性的完整資源記錄。
HealthStatus 字串 (必要) 評估結果: UNHEALTHY (不合規)或 HEALTHY (合規)。

請以以下方式結尾詢問: | project Id, Name, Environment, Identifiers, AdditionalData, Record, HealthStatus

評估對應:

每個查詢都必須為每個資源設定一個 HealthStatus 值。 在自訂推薦查詢中,請使用以下模式作為核心健康評估邏輯,將佔位條件替換為您自己的測試:

| extend condition = (your condition here)
| extend HealthStatus = iff(condition, 'UNHEALTHY', 'HEALTHY')

在此模式中,只需編輯表達式 condition 。 請在查詢中保持以下HealthStatus表達式不變,以便 適用於雲端的 Defender 能將匹配資源分類為合規或不合規:

| extend HealthStatus = iff(condition, 'UNHEALTHY', 'HEALTHY')

HealthStatus 為 UNHEALTHY 的資源會在 適用於雲端的 Defender 中顯示為不合規結果。 HealthStatus 為 HEALTHY 的資源均屬合規,且不會出現在結果中。

這很重要

總是設定 HealthStatus 為 'UNHEALTHY' 或 'HEALTHY'。 傳回所有範圍內的資源。 適用於雲端的 Defender 使用 HealthStatus 欄來判定合規性。 從結果集中省略資源是視為沒有資料,非良好狀態。

常見錯誤與修正方式:

  • 缺少必填欄位: 若缺少七個必填欄位,查詢即告失敗。 務必以 | project Id, Name, Environment, Identifiers, AdditionalData, Record, HealthStatus 結尾。
  • 錯誤 HealthStatus 值: 只有 'UNHEALTHY' 和 'HEALTHY' 是有效值(大小寫區分)。 其他值或空值會導致解析錯誤。
  • 錯誤的屬性路徑: 屬性是透過 Record.properties.*存取,而非直接存取。 例如,使用 Record.properties.httpsOnly,而不是 properties.httpsOnly。
  • 資源類型大小寫敏感性: 使用 =~ (大小寫不區分的匹配)來做 Identifiers.Type 比較。 例如: Identifiers.Type =~ 'Microsoft.Storage/storageAccounts' 。
  • 跨訂用帳戶的 Null 屬性:針對具有不同組態的多個訂用帳戶測試您的查詢。 在屬性可能不存在時使用 isnull() 檢查。

大規模套用自訂建議

在 Azure 入口網站建立自訂推薦對大多數使用者來說是最好的選擇。 介面提供便利的 KQL 編輯器及內建驗證工具。 當你需要在多個環境或訂閱中部署推薦時,程式化方法也很有用。

透過 API 自動化

如果你已經預先驗證過 KQL 查詢,並想自動化建立自訂推薦,可以使用 適用於雲端的 Microsoft Defender API。 此方法可讓您快速部署建議,確保其在整個雲端環境中保持一致且可調整。

  • 優點:您可以自動化和調整自定義建議的部署。
  • 使用時機:這個方法很適合大規模實作,您需要在多個環境中一致地套用建議。

如需更多關於使用 API 管理自訂推薦的資訊,請參閱 適用於雲端的 Defender 複合 API 參考。

建立自訂標準

自訂建議可以指派給一或多個自訂標準。

要建立自訂標準:

  1. 登入 Azure 入口網站。

  2. 請移至相關訂用帳戶的適用於雲端的 Microsoft Defender>環境設定>。

  3. 選取 [安全性原則]>[+ 建立]>[標準]。

  4. 選擇你想加入自訂標準的建議。

  5. (可選)關於 Azure 訂閱,請查看來源欄位。

    適用於雲端的 Microsoft Defender 中的自訂標準建立頁面,顯示可供選取的建議清單。

  6. 選取 ,創建。

使用 Azure 原則 (舊版) 建立和增強自訂建議

若是 Azure 訂用帳戶,您可以使用 Azure 原則建立自訂建議和標準,並加以增強。 這是舊版功能,我們建議使用新的自訂建議功能。

建立自訂推薦與標準(舊有)

你可以在 適用於雲端的 Defender 中建立自訂建議與標準,透過在 Azure 原則 中建立政策定義與倡議,並在 適用於雲端的 Defender 中導入。

要用 Azure 原則(舊版)建立自訂推薦或標準:

  1. 在 Azure 原則 入口網站建立一個或多個政策定義,或以程式化方式建立政策定義。
  2. 建立原則倡議,其中包含自訂原則定義。

將倡議納入為自訂標準(舊版)

Azure 原則使用原則指派將 Azure 資源指派給某個原則或倡議。

若要將倡議上線到適用於雲端的 Defender 中的自訂安全性標準,您需要在要求本文中包含"ASC":"true",如下所示。 ASC 欄位會將此方案導入 適用於雲端的 Microsoft Defender。

若要導入客製化計畫:

導入自訂倡議的範例

請使用以下 REST 請求來建立或更新支持您自訂 適用於雲端的 Defender 標準的 Azure 原則 計畫:

PUT https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policySetDefinitions/{policySetDefinitionName}?api-version=2021-06-01

請求主體(JSON):

{
    "properties": {
      "displayName": "Cost Management",
      "description": "Policies to enforce low cost storage SKUs",
      "metadata": {
        "category": "Cost Management",
        "ASC":"true"
      },
      "parameters": {
        "namePrefix": {
          "type": "String",
          "defaultValue": "myPrefix",
          "metadata": {
            "displayName": "Prefix to enforce on resource names"
          }
        }
      },
      "policyDefinitions": [
        {
          "policyDefinitionId": "/subscriptions/<Subscription ID>/providers/Microsoft.Authorization/policyDefinitions/7433c107-6db4-4ad1-b57a-a76dce0154a1",
          "policyDefinitionReferenceId": "Limit_Skus",
          "parameters": {
            "listOfAllowedSKUs": {
              "value": [
                "Standard_GRS",
                "Standard_LRS"
              ]
            }
          }
        },
        {
          "policyDefinitionId": "/subscriptions/<Subscription ID>/providers/Microsoft.Authorization/policyDefinitions/ResourceNaming",
          "policyDefinitionReferenceId": "Resource_Naming",
          "parameters": {
            "prefix": {
              "value": "[parameters('namePrefix')]"
            },
            "suffix": {
              "value": "-LC"
            }
          }
        }
      ]
    }
  }

移除指派的範例

要從訂閱中移除舊有自訂標準,請使用以下 REST 請求刪除該政策指派:

DELETE https://management.azure.com/{subscription}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}?api-version=2018-05-01

強化自訂建議(舊版)

適用於雲端的 Microsoft Defender 內建所提供的建議會包含詳細資料,例如嚴重性層級和補救指示。 若您想要將這種類型的資訊新增至 Azure 的自訂建議,請使用 REST API。

您可以新增兩種類型的資訊:

  • RemediationDescription – 字串
  • Severity – Enum [低, 中, 高]

針對屬於自訂倡議一部份的原則,您應將中繼資料新增至原則定義。 中繼資料應該位於「securityCenter」屬性中,如圖所示:

{
  "metadata": {
    "securityCenter": {
      "RemediationDescription": "Custom description goes here",
      "Severity": "High"
    }
  }
}

以下範例展示了包含 securityCenter 中繼資料屬性及修復與嚴重程度細節的完整自訂政策定義:

{
"properties": {
"displayName": "Security - ERvNet - AuditRGLock",
"policyType": "Custom",
"mode": "All",
"description": "Audit required resource groups lock",
"metadata": {
  "securityCenter": {
    "RemediationDescription": "Resource Group locks can be set via Azure Portal -> Resource Group -> Locks",
    "Severity": "High"
 }
},
"parameters": {
  "expressRouteLockLevel": {
    "type": "String",
    "metadata": {
      "displayName": "Lock level",
      "description": "Required lock level for ExpressRoute resource groups."
    },
    "allowedValues": [
      "CanNotDelete",
      "ReadOnly"
    ]
  }
},
"policyRule": {
  "if": {
    "field": "type",
    "equals": "Microsoft.Resources/subscriptions/resourceGroups"
  },
  "then": {
    "effect": "auditIfNotExists",
    "details": {
      "type": "Microsoft.Authorization/locks",
      "existenceCondition": {
        "field": "Microsoft.Authorization/locks/level",
        "equals": "[parameters('expressRouteLockLevel')]"
      }
    }
  }
}
}
}

關於另一個 securityCenter 屬性範例,請參見 REST API 範例以了解評估的元資料。

下一步

您可以透過下列連結進一步了解 Kusto 查詢: