問題描述

在 Azure 平台中,當使用Azure Policy配置了非常多的策略定義時,想快速瞭解這些策略對資源創建的影響和限制,並批量導出策略的方法。Azure Policy 門户卻沒有直接的導出功能,所以只好藉助 Azure Resource Graph 查詢策略分配、符合性狀態以及策略定義的詳細信息,實現導出的目的。

【Azure Policy】藉助 Azure Resource Graph 查詢策略分配、符合性狀態以及策略定義_Azure

 

問題解答

Azure Policy 本身不提供批量導出按鈕,但可以通過 Azure Resource Graph Explorer 編寫 KQL 查詢,獲取策略相關數據並導出為 CSV 文件。

本文中提供了三類核心查詢語句,分別用於 策略分配信息、不合規資源統計 和 策略定義詳情。這些查詢不僅能幫助快速定位策略影響,還能支持後續合規性分析和治理優化。

 

查詢語句一:獲取所有已分配策略(Policy Assignments)

KQL 語句

policyresources
| where type == "microsoft.authorization/policyassignments"
| project 
    assignmentName = name, 
    scope = tostring(properties.scope),  // 分配範圍(訂閲/資源組)
    policyDefinitionId = tostring(properties.policyDefinitionId), // 關聯的策略定義ID
    displayName = tostring(properties.displayName),
    enforcementMode = tostring(properties.enforcementMode),// 執行模式(Enabled/Disabled)
    assignedBy = tostring(properties.metadata.assignedBy),  // 分配操作人
    createdBy = tostring(properties.metadata.createdBy)     // 創建者(服務主體/用户ID)
| order by scope asc

【Azure Policy】藉助 Azure Resource Graph 查詢策略分配、符合性狀態以及策略定義_Graph_02

介紹

該查詢用於列出當前 Azure 環境中所有已分配的策略,包括策略名稱、分配範圍(訂閲或資源組)、關聯的策略定義 ID、顯示名稱、執行模式(Enabled/Disabled)、分配人和創建者信息。

通過這些字段,管理員可以快速瞭解策略的應用範圍和責任人,便於後續治理和審計。

查詢結果可導出為 CSV 文件,支持進一步分析或歸檔。

 

查詢語句二:統計不合規資源數量

KQL 語句

policyresources
| where type == "microsoft.policyinsights/policystates"
| where properties.complianceState == "NonCompliant"  
| summarize blockedCount=count() by 
    policyDefinitionName = tostring(properties.policyDefinitionName), 
    resourceType = tostring(properties.resourceType)
| order by blockedCount desc

介紹

該查詢用於統計所有處於“不合規”狀態的資源數量,並按策略名稱和資源類型分組排序。

管理員可以快速識別哪些策略導致最多的合規性問題,幫助優先處理高影響策略。通過 blockedCount 字段,可以量化策略的影響範圍,結合資源類型信息,制定針對性的整改計劃。

此查詢非常適合用於合規性報告和治理優化。

 

查詢語句三:獲取策略定義詳情

KQL 語句

policyresources
| where type == "microsoft.authorization/policydefinitions"  // 篩選策略定義資源類型
| extend 
    policyDefinitionId = id, 
    displayName = tostring(properties.displayName),  // 策略顯示名稱
    description = tostring(properties.description),  // 策略描述
    effectType = tostring(properties.policyRule.then.effect)  // 策略效果(deny/audit)
| project 
    properties,
    name,  
    policyDefinitionId,
    displayName,
    description,
    effectType,  
    category = tostring(properties.metadata.category)  
| order by category asc

介紹

該查詢用於獲取策略定義的詳細信息,包括策略 ID、顯示名稱、描述、策略效果(如 deny、audit)以及分類。

通過這些信息,管理員可以全面瞭解策略的功能和用途,便於策略優化和分類管理。結合 category 字段,可以按策略類別進行排序,快速定位特定類型的策略(如安全、網絡、合規)。

此查詢適用於策略庫維護和治理策略審查場景

 

參考資料

使用 Azure 門户運行 Resource Graph 查詢 : https://learn.microsoft.com/azure/governance/resource-graph/first-query-portal

Azure Resource Graph sample queries for Azure Policy : https://learn.microsoft.com/azure/governance/policy/samples/resource-graph-samples

Azure Policy 文檔 : https://learn.microsoft.com/azure/governance/policy/

 


當在複雜的環境中面臨問題,格物之道需:濁而靜之徐清,安以動之徐生。 雲中,恰是如此!