安全性建議在 適用於雲端的 Microsoft Defender 中可協助您改善並強化安全性態勢。 建議是根據對已啟用 適用於雲端的 Defender 的 Azure 訂閱、Amazon Web Services (AWS) 帳戶和 Google Cloud Platform (GCP) 專案,依據為其定義的安全性標準所進行的評估結果提出。
這篇文章說明如何:
- 用 Kusto 查詢語言(KQL)為所有雲端(Azure、AWS 和 GCP)建立自訂推薦。
- 將自訂建議指派給自訂安全性標準。
先決條件
在建立自訂建議或標準前,請確保你符合以下要求:
- 您需要訂用帳戶的擁有者權限,才能建立新的安全性標準。
- 您需要安全性管理員權限,才能建立自訂建議。
- 若要基於 Kusto 查詢語言(KQL)建立自訂推薦,您必須啟用 Defender 雲端安全態勢管理(CSPM)計畫。 所有客戶都可以根據 Azure 原則建立自訂建議。
- 檢閱 Azure 雲端中的支援,以取得自訂建議。
我們建議觀看本集的 適用於雲端的 Defender in the field,以了解更多關於自訂推薦以及如何撰寫 KQL 查詢。
建立自訂建議
建立自訂建議,包括補救步驟、嚴重性,以及應指派建議的標準。 您使用 KQL 新增建議邏輯。 你可以使用內建查詢範本的簡單查詢編輯器,隨時調整,或者從零開始撰寫 KQL 查詢。
要建立自訂推薦:
登入 Azure 入口網站。
請移至相關訂用帳戶的適用於雲端的 Microsoft Defender>環境設定>。
選擇 安全政策>+建立自訂推薦。
輸入細節:必要條件:名稱、範圍、嚴重程度及安全問題。 可選:描述、修復。
選取 下一步。
輸入 KQL 查詢,或選擇 開啟查詢編輯器。
選取 下一步。
選擇相關標準作為建議。
選取 下一步。
選擇要指派的自訂標準。
選取 [檢閱及建立]。
仔細檢視建議細節。
選取 ,創建。
使用查詢編輯器
建議使用查詢編輯器來建立建議查詢。 你也可以利用提供的 查詢範本和範例 來查看範例查詢,並學習如何建立自己的查詢。
- 使用編輯器可協助您先建置並測試查詢,再開始使用該查詢。
- 選取 [操作說明] 以取得如何建構查詢的協助,以及其他指示和連結。
- 編輯器內建推薦查詢範例,可以幫助你建立自己的查詢。 資料會以 API 中的相同結構出現。
選擇 新查詢。
使用範例查詢範本及其說明,或從頁面下方選擇內建的推薦查詢範例,開始使用。
選取 [執行查詢],來測試您已建立的查詢。
查詢準備好後,從編輯器剪貼到 推薦查詢 窗格。
選擇 「下一步」,選擇建議相關的標準,選擇要指派的自訂標準,然後選擇 審查與建立。
檢視推薦細節並選擇 「建立」。
查詢範本與範例
查詢編輯器內建範例,本節範本則展示如何結構化常見的安全檢查。 每個範本回傳範圍內的資源,並將不合規的資源標記為 UNHEALTHY。 在此範本模式中,僅編輯 condition 表達式,並保持 HealthStatus 這一行不變。
備註
本節的範本使用 Azure 資源類型。 對於 AWS 和 GCP 資源,請將 Environment == 'Azure' 改成 Environment == 'AWS' 或 Environment == 'GCP',並更新 Identifiers.Type 以符合你環境中的資源類型。
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 參考。
建立自訂標準
自訂建議可以指派給一或多個自訂標準。
要建立自訂標準:
登入 Azure 入口網站。
請移至相關訂用帳戶的適用於雲端的 Microsoft Defender>環境設定>。
選取 [安全性原則]>[+ 建立]>[標準]。
選擇你想加入自訂標準的建議。
(可選)關於 Azure 訂閱,請查看來源欄位。
選取 ,創建。
使用 Azure 原則 (舊版) 建立和增強自訂建議
若是 Azure 訂用帳戶,您可以使用 Azure 原則建立自訂建議和標準,並加以增強。 這是舊版功能,我們建議使用新的自訂建議功能。
建立自訂推薦與標準(舊有)
你可以在 適用於雲端的 Defender 中建立自訂建議與標準,透過在 Azure 原則 中建立政策定義與倡議,並在 適用於雲端的 Defender 中導入。
要用 Azure 原則(舊版)建立自訂推薦或標準:
- 在 Azure 原則 入口網站建立一個或多個政策定義,或以程式化方式建立政策定義。
- 建立原則倡議,其中包含自訂原則定義。
將倡議納入為自訂標準(舊版)
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 查詢: