取得 Azure 資源的合規性資料
Azure 原則的其中一個最大優點,就是能夠針對訂用帳戶中的資源或訂用帳戶的管理群組,提供相關見解和控制權。 此控件可防止在錯誤的位置建立資源、強制執行一般且一致的標籤使用方式,或針對適當的組態和設定稽核現有的資源。 在所有情況下,Azure 原則 會產生數據,讓您了解環境的合規性狀態。
檢閱合規性數據之前,請務必瞭解 Azure 原則 中的合規性狀態。
有數種方式可存取原則和計畫指派所產生的合規性資訊:
在查看這些報告合規性的方法之前,讓我們來看何時會更新合規性資訊,以及觸發評估週期的頻率和事件。
已完成評估週期的結果可透過 PolicyStates
和 PolicyEvents
作業在 Microsoft.PolicyInsights
資源提供者中可用。 如需有關 Azure 原則見解 REST API 之作業的詳細資訊,請參閱 Azure 原則見解。
對指定原則和計畫的評估是各種事件的結果:
- 將新的原則或計畫指派給範圍。 將指派套用至已定義範圍大約需要五分鐘的時間,然後評估週期會針對新指派的原則或計劃開始適用的資源。 根據所使用的效果,資源會標示為符合規範、不符合規範、豁免或未知。 針對大量資源評估的大型原則或計劃可能需要一些時間,因此評估週期完成時不會有預先定義的預期。 完成之後,入口網站和軟體開發工具包 (SDK) 中會提供更新的合規性結果。
- 更新已指派給範圍的原則或計畫。 此案例的評估週期和時間與範圍的新指派相同。
- 資源會透過 Azure Resource Manager、REST API 或支援的 SDK,在範圍內部署或更新指派。 在此案例中,大約 15 分鐘後,單個資源的效果事件 (附加、稽核、拒絕、部署) 和符合規範狀態資訊在入口網站和 SDK 中可用。 此事件不會引起對其他資源的評估。
- 訂用帳戶 (資源類型
Microsoft.Resources/subscriptions
) 在管理群組階層 中建立或移動,並具有以訂用帳戶資源類型為目標的指派原則定義。 評估訂用帳戶支援的效果 (audit、auditIfNotExist、deployIfNotExists、modify)、記錄,以及任何補救動作大約需要 30 分鐘的時間。 - 原則豁免已建立、更新或刪除。 在此案例中,系統會針對定義的豁免範圍評估對應的指派。
- 標準合規性評估週期。 每 24 小時自動重新評估指派一次。 許多資源的大型原則或計劃可能需要一些時間,因此評估週期完成時不會有預先定義的預期。 一旦完成,更新的合規性結果將在入口網站和 SDK 中可用。
- 由受控資源使用合規性詳細資訊更新機器設定資源提供者。
- 隨選掃描。
注意
根據設計,Azure 原則 免去原則評估資源提供者下Microsoft.Resources
的所有資源,但訂用帳戶和資源群組除外,可加以評估。
訂用帳戶或資源群組的評估掃描可以透過 REST、Azure CLI、Azure PowerShell、Visual Studio Code 的 Azure 原則 擴充功能啟動,或 Azure 原則 合規性掃描 GitHub Action。 隨選掃描是一種異步程式,需要很長的時間才能執行,因為會針對所有指派的原則評估資源。
注意
並非所有 Azure 資源提供者都支援隨選評估掃描。 例如,Azure Virtual Network Manager (AVNM) 目前不支援手動觸發程序或標準原則合規性評估週期 (每日掃描)。
作為非同步程序,啟動掃描的 REST 端點並不會等待掃描完成以回應。 相反地,它會提供 URI,可用來查詢要求之評估的狀態。
在每個 REST API URI 中有一些變數,需要您以自己的值取代它們:
-
{resourceGroupName}
:以您的資源群組名稱取代。 -
{subscriptionId}
:以您的訂用帳戶識別碼取代 。
掃描支援訂用帳戶或資源群組中的資源評估。 請使用 REST API POST 命令,運用下列 URI 結構來依據範圍啟動掃描:
使用下列命令來評估訂用帳戶。 您可以使用 [試用] 選項,從瀏覽器在 [原則狀態 - 觸發訂用帳戶評估] 處執行命令。
POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
使用下列命令來評估資源群組。 您可以使用 [試用] 選項,從瀏覽器在 [原則狀態 - 觸發資源群組評估] 處執行命令。
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
訂用帳戶和資源群組 REST API 呼叫會傳 回 202 已接受 的狀態。 包含在回應標頭中是 location
具有下列格式的屬性:
https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/asyncOperationResults/{ResourceContainerGUID}?api-version=2019-10-01
{ResourceContainerGUID}
是針對要求的範圍以靜態方式所產生。 如果某個範圍已在執行隨選掃描,則不會啟動新的掃描。 相反地,新要求會針對狀態提供相同的 {ResourceContainerGUID}
location
URI。 URI 的 location
REST API GET 命令會在評估進行時傳 回 202 已接受 。 評估掃描完成時,會傳 回 200 OK 狀態。 已完成掃描的主體是 JSON 回應,其狀態為: succeeded
。
合規性掃描是透過 az policy state trigger-scan 命令來啟動。
根據預設,az policy state trigger-scan
會針對目前訂用帳戶中的所有資源啟動評估。 若要在特定資源群組上啟動評估,請使用 resource-group
參數。 下列範例會在資源群組的目前訂用帳戶中啟動合規性掃描。
resourceGroupName
取代為您的資源群組名稱:
az policy state trigger-scan --resource-group "resourceGroupName"
您可以選擇不要等候異步程式完成,再繼續進行 no-wait
參數。
合規性掃描是使用 Start-AzPolicyComplianceScan Cmdlet 來啟動。
根據預設,Start-AzPolicyComplianceScan
會針對目前訂用帳戶中的所有資源啟動評估。 若要在特定資源群組上啟動評估,請使用 ResourceGroupName
參數。 下列範例會在資源群組的目前訂用帳戶中啟動合規性掃描。
resourceGroupName
取代為您的資源群組名稱:
Start-AzPolicyComplianceScan -ResourceGroupName 'resourceGroupName'
您可以讓 PowerShell 等候非同步呼叫完成再提供結果輸出,或是讓其以作業的形式於背景執行。 若要使用 PowerShell 作業在背景執行合規性掃描,請使用 AsJob
參數並將值設定為 物件,例如 $job
在此範例中:
$job = Start-AzPolicyComplianceScan -AsJob
您可以檢查 $job
物件來檢查作業的狀態。 作業的類型為 Microsoft.Azure.Commands.Common.AzureLongRunningJob
。 使用 $job
物件上的 Get-Member
來查看可用的屬性與方法。
在合規性掃描執行時,檢查 $job
物件會輸出如下的結果:
$job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 Long Running O... AzureLongRunni... Running True localhost Start-AzPolicyCompliance...
合規性掃描完成時, State
屬性會變更為 Completed。
Visual Studio Code 的 Azure 原則延伸模組能夠執行特定資源的評估掃描。 此掃描是同步處理序,不同於 Azure PowerShell 與 REST 方法。 如需詳細資料與步驟,請參閱使用 VS Code 延伸模組進行隨需評估。
在一或多個資源、資源群組或訂閱上使用 Azure 原則合規性掃描動作 (英文),從 GitHub 工作流程 (英文) 觸發隨需評估掃描,並根據資源的合規性狀態來管制工作流程。 您也可以將工作流程設定為在已排程的時間執行,以便在方便的時間取得最新合規性狀態。 (選擇性) GitHub Actions 可以針對已掃描資源的合規性狀態產生報告,以供進一步分析或封存。
下列範例會執行訂用帳戶的合規性掃描。 使用 scopes
您的訂用帳戶標識碼。
on:
schedule:
- cron: '0 8 * * *' # runs every morning 8am
jobs:
assess-policy-compliance:
runs-on: ubuntu-latest
steps:
- name: Login to Azure
uses: azure/login@v2
with:
creds: ${{secrets.AZURE_CREDENTIALS}}
- name: Check for resource compliance
uses: azure/policy-compliance-scan@v0
with:
scopes: |
/subscriptions/aaaa6a6a-bb7b-cc8c-dd9d-eeeeee0e0e0e
如需詳細資訊與工作流程範例,請參閱 Azure 原則合規性掃描存放庫的 GitHub Actions (英文)。
Azure 入口網站示範視覺化並了解您環境中合規性狀態的圖形化體驗。 在 [原則] 頁面上,[概觀] 選項提供有關原則和計畫合規性之可用範圍的詳細資料。 除了每個指派的合規性狀態和計數之外,還包含一個圖表,顯示過去七天的合規性。 [ 合規性 ] 頁面包含許多相同的資訊(除了圖表之外),但提供更多篩選和排序選項。
由於可以將一個原則或方案指派給不同的範圍,因此表格包含每個指派的範圍,以及所指派的定義類型。 也會提供每個指派的不符合規範的資源和不符合規範的原則數目。 選取資料表中的原則或計畫可讓您更深入地查看該特定指派的合規性。
[資源合規性] 索引標籤上的資源清單會顯示目前指派的現有資源評估狀態。 此索引標籤預設為 [不符合規範],但您可以進行篩選。 由要求所觸發來建立資源的事件 (附加、稽核、拒絕、部署、修改) 會顯示在 [事件] 索引標籤下。
針對資源提供者模式資源,在 [資源合規性] 索引標籤上選取資源,或以滑鼠右鍵按兩下數據列,然後選取 [檢視合規性詳細數據] 會開啟元件合規性詳細數據。 此頁面也會提供索引標籤以查看指派至此資源的原則、事件、元件事件,以及變更歷程記錄。
返回 [資源合規性] 頁面,選取並按住 (以滑鼠右鍵按一下) 您想要收集更多詳細資料的事件資料列,然後選取 [Show activity logs] \(顯示活動記錄\)。 活動記錄頁面隨即開啟,並預先篩選至搜尋,其中顯示指派和事件的詳細數據。 活動記錄檔提供有關這些事件的更多內容和資訊。
注意
您可以使用 Azure Resource Graph 查詢,從入口網站匯出合規性結果。
您可以使用 REST API、Azure CLI 和 Azure PowerShell 來擷取入口網站中可用的相同資訊。
如需 REST API 的詳細資訊,請參閱 Azure 原則 參考。 REST API 參考頁面在每個作業上都有 [ 試用] 選項,可讓您在瀏覽器中執行命令。 您也可以使用 Azure CLI 或慣用的 REST API 用戶端來執行命令。
透過 REST API,您可以依容器、定義或指派來摘要。 以下是使用 Azure 原則見解的對訂用帳戶進行摘要,在訂用帳戶層級進行摘要的範例:
POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/summarize?api-version=2019-10-01
輸出摘要說明訂用帳戶,而摘要的合規性位於 和 nonCompliantPolicies
屬性中nonCompliantResources
。 此要求會提供其他詳細數據,包括組成不符合規範的數位的每個指派,以及每個指派的定義資訊。 階層中的每個原則物件都會提供 queryResultsUri
,可用來取得該層級的詳細數據。
在上一個範例中, value.policyAssignments.policyDefinitions.results.queryResultsUri
針對特定原則定義,為所有不符合規範的資源提供範例 URI。 在值中 $filter
,ComplianceState 等於 (eq) 為 NonCompliant
, PolicyAssignmentId
會針對原則定義指定,然後指定 PolicyDefinitionId 本身。 在篩選中包含 的原因是 PolicyAssignmentId
, PolicyDefinitionId
可能會存在於具有不同範圍之數個原則或方案指派中。 藉由同時 PolicyAssignmentId
指定 和 PolicyDefinitionId
,我們可以在所尋找的結果中明確。 先前, PolicyStates
我們使用了 latest
,這會自動設定 from
過去 24 小時的 和 to
時間範圍。
值的 queryResultsUri
範例:
https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2025-01-01 04:28:22Z&$to=2025-02-10 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77' and PolicyDefinitionId eq '/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62'
當建立或更新資源時,會產生原則評估結果。 結果稱為原則事件。 可使用下列 URI 來檢視與訂閱建立關聯的最新原則事件。
https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/default/queryResults?api-version=2019-10-01
如需查詢原則事件的詳細資訊,請參閱 Azure 原則 事件。
適用於 Azure 原則的 Azure CLI 命令群組涵蓋 REST 或 Azure PowerShell 中可用的大部分作業。 如需可用命令的完整清單,請參閱 az policy。
取得最上層指派原則的狀態摘要,其中包含最多不符合規範的資源數目。
az policy state summarize --top 1
取得最近評估資源的狀態記錄,而輸出預設值會依時間戳遞減順序排列。
az policy state list --top 1
取得所有不符合規範的虛擬網路資源詳細數據。
az policy state list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'"
取得與特定日期之後發生的不符合規範虛擬網路資源相關的事件。
from
使用參數搭配 ISO 8601 格式的日期。
az policy event list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'" --from '2025-02-10T00:00:00Z'
您可以從 Azure Cloud Shell 執行下列命令。
取得最上層指派原則的狀態摘要,其中包含最多不符合規範的資源數目。
Get-AzPolicyStateSummary -Top 1
取得最近評估資源的狀態記錄。 輸出預設會依時間戳遞減順序排列。
Get-AzPolicyState -Top 1
取得所有不符合規範的虛擬網路資源詳細數據。
Get-AzPolicyState -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'"
取得與特定日期之後發生的不符合規範虛擬網路資源相關的事件。
From
使用參數搭配 ISO 8601 格式的日期。
Get-AzPolicyEvent -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'" -From '2025-02-10'
輸出包含 PrincipalOid
屬性,可用來取得具有 Azure PowerShell Cmdlet Get-AzADUser
的特定使用者。 將取代 {principalOid}
為您從上一個命令取得的值。
(Get-AzADUser -ObjectId {principalOid}).DisplayName
如果您有 Log Analytics 工作區 ,其中包含 AzureActivity
系 結至訂用帳戶的活動 Log Analytics 解決方案 ,您也可以使用 Kusto 查詢和 AzureActivity
數據表,檢視新資源與更新資源評估中的不符合規範結果。 有了「Azure 監視器」記錄中的詳細資料,您便可以設定警示來監看不符合規範的情況。
合規性記錄會儲存在 Azure Resource Graph (ARG) 中。 資料可以從 ARG 查詢匯出,以根據感興趣的範圍和原則來形成自訂儀錶板。 檢閱我們的樣本查詢,透過 ARG 匯出合規性資料。
- 在 Azure 原則範例檢閱範例。
- 檢閱 Azure 原則定義結構。
- 檢閱了解原則效果。
- 了解如何以程式設計方式建立原則。
- 了解如何補救不符合規範的資源。
- 透過使用 Azure 管理群組來組織資源來檢閱何謂管理群組。