取得 Azure 資源的合規性資料
Azure 原則的其中一個最大優點,就是能夠針對訂用帳戶中的資源或訂用帳戶的管理群組,提供相關見解和控制權。 此控制權可用來防止在錯誤的位置建立資源、強制執行通用且一致的標記使用方式,或稽核現有的資源以取得適當的組態和設定。 在所有情況下,Azure 原則都會產生資料來讓您了解環境的合規性狀態。
檢閱合規性數據之前,請務必瞭解 Azure 原則 中的合規性狀態。
有數種方式可存取原則和計畫指派所產生的合規性資訊:
- 使用 Azure 入口網站
- 透過命令列指令碼
- 藉由檢視 Azure 監視器記錄
- 透過 Azure Resource Graph 查詢
在查看這些報告合規性的方法之前,讓我們來看何時會更新合規性資訊,以及觸發評估週期的頻率和事件。
評估觸發程序
已完成評估週期的結果可透過 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
資源提供者 (RP) 下的所有資源豁免於原則評估,除了訂用帳戶和資源群組之外,其可以加以評估。
隨選評估掃描
可透過 Azure CLI、Azure PowerShell、REST API 的呼叫,或使用 Azure 原則合規性掃描 GitHub Action (英文) 來啟動訂閱或資源群組的評估掃描。 這個掃描是一個非同步程序。
注意
並非所有 Azure 資源提供者都支援隨選評估掃描。 例如,Azure Virtual Network Manager (AVNM) 目前不支援手動觸發程序或標準原則合規性評估週期 (每日掃描)。
隨需評估掃描 - GitHub Action
在一或多個資源、資源群組或訂閱上使用 Azure 原則合規性掃描動作 (英文),從 GitHub 工作流程 (英文) 觸發隨需評估掃描,並根據資源的合規性狀態來管制工作流程。 您也可以將工作流程設定為在已排程的時間執行,以便在方便的時間取得最新合規性狀態。 (選擇性) GitHub Actions 可以針對已掃描資源的合規性狀態產生報告,以供進一步分析或封存。
下列範例會執行訂用帳戶的合規性掃描。
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@v1
with:
creds: ${{secrets.AZURE_CREDENTIALS}}
- name: Check for resource compliance
uses: azure/policy-compliance-scan@v0
with:
scopes: |
/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
如需詳細資訊與工作流程範例,請參閱 Azure 原則合規性掃描存放庫的 GitHub Actions (英文)。
隨需評估掃描 - Azure CLI
合規性掃描是透過 az policy state trigger-scan 命令來啟動。
根據預設,az policy state trigger-scan
會針對目前訂用帳戶中的所有資源啟動評估。 若要在特定資源群組上啟動評估,請使用 resource-group
參數。 下列範例會在目前的訂用帳戶中針對 MyRG 資源群組啟動合規性掃描:
az policy state trigger-scan --resource-group "MyRG"
您可以選擇不要等候異步程式完成,再繼續進行 no-wait
參數。
隨選評估掃描 - Azure PowerShell
合規性掃描是使用 Start-AzPolicyComplianceScan Cmdlet 來啟動。
根據預設,Start-AzPolicyComplianceScan
會針對目前訂用帳戶中的所有資源啟動評估。 若要在特定資源群組上啟動評估,請使用 ResourceGroupName
參數。 下列範例會在目前的訂用帳戶中針對 MyRG 資源群組啟動合規性掃描:
Start-AzPolicyComplianceScan -ResourceGroupName 'MyRG'
您可以讓 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。
隨選評估掃描 - REST
作為非同步程序,啟動掃描的 REST 端點並不會等待掃描完成以回應。 相反地,它會提供 URI,可用來查詢要求之評估的狀態。
在每個 REST API URI 中有一些變數,需要您以自己的值取代它們:
{YourRG}
- 以您的資源群組名稱取代{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/{YourRG}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
呼叫會傳回 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 回應:
{
"status": "Succeeded"
}
隨需評估掃描 - Visual Studio Code
Visual Studio Code 的 Azure 原則延伸模組能夠執行特定資源的評估掃描。 此掃描是同步處理序,不同於 Azure PowerShell 與 REST 方法。 如需詳細資料與步驟,請參閱使用 VS Code 延伸模組進行隨需評估。
入口網站
Azure 入口網站示範視覺化並了解您環境中合規性狀態的圖形化體驗。 在 [原則] 頁面上,[概觀] 選項提供有關原則和計畫合規性之可用範圍的詳細資料。 除了每個指派的合規性狀態和計數之外,還包含一個圖表,顯示過去七天的合規性。 [ 合規性 ] 頁面包含許多相同的資訊(除了圖表之外),但提供更多篩選和排序選項。
由於可以將一個原則或方案指派給不同的範圍,因此表格包含每個指派的範圍,以及所指派的定義類型。 也會提供每個指派的不符合規範的資源和不符合規範的原則數目。 選取資料表中的原則或計畫可讓您更深入地查看該特定指派的合規性。
[資源合規性] 索引標籤上的資源清單會顯示目前指派的現有資源評估狀態。 此索引標籤預設為 [不符合規範],但您可以進行篩選。 由要求所觸發來建立資源的事件 (附加、稽核、拒絕、部署、修改) 會顯示在 [事件] 索引標籤下。
針對資源提供者模式資源,在 [資源合規性] 索引標籤上選取資源,或以滑鼠右鍵按一下資料列,然後選取 [檢視合規性詳細資料] 會開啟元件合規性詳細資料。 此頁面也會提供索引標籤以查看指派至此資源的原則、事件、元件事件,以及變更歷程記錄。
返回 [資源合規性] 頁面,選取並按住 (以滑鼠右鍵按一下) 您想要收集更多詳細資料的事件資料列,然後選取 [Show activity logs] \(顯示活動記錄\)。 活動記錄頁面隨即開啟,並預先篩選至搜尋,其中顯示指派和事件的詳細數據。 活動記錄檔提供有關這些事件的更多內容和資訊。
注意
合規性結果可以透過 Azure Resource Graph 查詢從入口網站匯出。
命令列
您可以使用 REST API (包括 ARMClient)、Azure PowerShell 與 Azure CLI 來擷取入口網站中所提供的相同資訊。 如需 REST API 的完整詳細資料,請參閱 Azure 原則參考。 REST API 參考頁面在每個作業上都有綠色 的 [試用] 按鈕,可讓您直接在瀏覽器中試用。
使用 ARMClient 或類似工具來處理 REST API 範例的 Azure 驗證。
摘要結果
使用 REST API 時,可以由容器、定義或指派來執行摘要。 以下是使用 Azure 原則見解的對訂用帳戶進行摘要,在訂用帳戶層級進行摘要的範例:
POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/summarize?api-version=2019-10-01
此輸出會摘要訂用帳戶。 在下列範例輸出中,摘要合規性位於 和value.results.nonCompliantPolicies
之下value.results.nonCompliantResources
。 此要求提供進一步詳細資料,包括組成不相容數目的每個指派及每個指派的定義資訊。 階層中的每個原則物件都會提供 queryResultsUri
,可用來取得該層級的詳細數據。
{
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary",
"@odata.count": 1,
"value": [
{
"@odata.id": null,
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary/$entity",
"results": {
"queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant'",
"nonCompliantResources": 15,
"nonCompliantPolicies": 1
},
"policyAssignments": [
{
"policyAssignmentId": "/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77",
"policySetDefinitionId": "",
"results": {
"queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77'",
"nonCompliantResources": 15,
"nonCompliantPolicies": 1
},
"policyDefinitions": [
{
"policyDefinitionReferenceId": "",
"policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
"effect": "deny",
"results": {
"queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 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'",
"nonCompliantResources": 15
}
}
]
}
]
}
]
}
查詢資源
在上一個範例中, value.policyAssignments.policyDefinitions.results.queryResultsUri
針對特定原則定義,為所有不符合規範的資源提供範例 URI。 在值中 $filter
,ComplianceState 等於 (eq) 為 NonCompliant
, PolicyAssignmentId
會針對原則定義指定,然後指定 PolicyDefinitionId 本身。 在篩選中包含 的原因是 PolicyAssignmentId
, PolicyDefinitionId
可能會存在於具有不同範圍之數個原則或方案指派中。 藉由同時 PolicyAssignmentId
指定 和 PolicyDefinitionId
,我們可以在所尋找的結果中明確。 先前, PolicyStates
我們使用了 latest
,這會自動設定 from
過去 24 小時的 和 to
時間範圍。
https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 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'
下列範例回應已修剪為單一不符合規範的資源,以求簡潔。 詳細的回應則包含數項有關資源、原則或方案及指派的資料。 請注意,您也可以查看哪些指派參數已傳遞至原則定義。
{
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
"@odata.count": 15,
"value": [
{
"@odata.id": null,
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"timestamp": "2018-05-19T04:41:09Z",
"resourceId": "/subscriptions/{subscriptionId}/resourceGroups/rg-tags/providers/Microsoft.Compute/virtualMachines/linux",
"policyAssignmentId": "/subscriptions/{subscriptionId}/resourceGroups/rg-tags/providers/Microsoft.Authorization/policyAssignments/37ce239ae4304622914f0c77",
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
"effectiveParameters": "",
"ComplianceState": "NonCompliant",
"subscriptionId": "{subscriptionId}",
"resourceType": "/Microsoft.Compute/virtualMachines",
"resourceLocation": "westus2",
"resourceGroup": "RG-Tags",
"resourceTags": "tbd",
"policyAssignmentName": "37ce239ae4304622914f0c77",
"policyAssignmentOwner": "tbd",
"policyAssignmentParameters": "{\"tagName\":{\"value\":\"costCenter\"},\"tagValue\":{\"value\":\"Contoso-Test\"}}",
"policyAssignmentScope": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags",
"policyDefinitionName": "1e30110a-5ceb-460c-a204-c1c3969c6d62",
"policyDefinitionAction": "deny",
"policyDefinitionCategory": "tbd",
"policySetDefinitionId": "",
"policySetDefinitionName": "",
"policySetDefinitionOwner": "",
"policySetDefinitionCategory": "",
"policySetDefinitionParameters": "",
"managementGroupIds": "",
"policyDefinitionReferenceId": ""
}
]
}
檢視事件
當建立或更新資源時,會產生原則評估結果。 結果稱為原則事件。 可使用下列 URI 來檢視與訂閱建立關聯的最新原則事件。
https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/default/queryResults?api-version=2019-10-01
您的結果類似下列範例:
{
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/$metadata#default",
"@odata.count": 1,
"value": [
{
"@odata.id": null,
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/$metadata#default/$entity",
"NumAuditEvents": 16
}
]
}
如需有關查詢原則事件的詳細資訊,請參閱 Azure 原則事件參考文章。
Azure CLI
適用於 Azure 原則的 Azure CLI 命令群組涵蓋 REST 或 Azure PowerShell 中可用的大部分作業。 如需可用命令的完整清單,請參閱 Azure CLI - Azure 原則概觀。
範例:取得其不相容資源數目最高之最上層指派原則的狀態摘要。
az policy state summarize --top 1
回應的上半部分看起來像下列範例:
{
"odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary/$entity",
"odataid": null,
"policyAssignments": [
{
"policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
"policyDefinitions": [
{
"effect": "audit",
"policyDefinitionGroupNames": [
""
],
"policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionReferenceId": "",
"results": {
"nonCompliantPolicies": null,
"nonCompliantResources": 398,
"policyDetails": [
{
"complianceState": "noncompliant",
"count": 1
}
],
"policyGroupDetails": [
{
"complianceState": "noncompliant",
"count": 1
}
],
"queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2020-07-14 14:01:22Z&$to=2020-07-15 14:01:22Z and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8' and PolicyDefinitionId eq '/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a'",
"resourceDetails": [
{
"complianceState": "noncompliant",
"count": 398
},
{
"complianceState": "compliant",
"count": 4
}
]
}
}
],
...
範例:取得最近評估資源的狀態記錄 (預設是依時間戳記遞減排序)。
az policy state list --top 1
[
{
"complianceReasonCode": "",
"complianceState": "Compliant",
"effectiveParameters": "",
"isCompliant": true,
"managementGroupIds": "{managementgroupId}",
"odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"odataid": null,
"policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/securitycenterbuiltin",
"policyAssignmentName": "SecurityCenterBuiltIn",
"policyAssignmentOwner": "tbd",
"policyAssignmentParameters": "",
"policyAssignmentScope": "/subscriptions/{subscriptionId}",
"policyAssignmentVersion": "",
"policyDefinitionAction": "auditifnotexists",
"policyDefinitionCategory": "tbd",
"policyDefinitionGroupNames": [
""
],
"policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/aa633080-8b72-40c4-a2d7-d00c03e80bed",
"policyDefinitionName": "aa633080-8b72-40c4-a2d7-d00c03e80bed",
"policyDefinitionReferenceId": "identityenablemfaforownerpermissionsmonitoring",
"policyDefinitionVersion": "",
"policyEvaluationDetails": null,
"policySetDefinitionCategory": "security center",
"policySetDefinitionId": "/providers/Microsoft.Authorization/policySetDefinitions/1f3afdf9-d0c9-4c3d-847f-89da613e70a8",
"policySetDefinitionName": "1f3afdf9-d0c9-4c3d-847f-89da613e70a8",
"policySetDefinitionOwner": "",
"policySetDefinitionParameters": "",
"policySetDefinitionVersion": "",
"resourceGroup": "",
"resourceId": "/subscriptions/{subscriptionId}",
"resourceLocation": "",
"resourceTags": "tbd",
"resourceType": "Microsoft.Resources/subscriptions",
"subscriptionId": "{subscriptionId}",
"timestamp": "2020-07-15T08:37:07.903433+00:00"
}
]
範例:取得所有不相容虛擬網路資源的詳細資料。
az policy state list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'"
[
{
"complianceReasonCode": "",
"complianceState": "NonCompliant",
"effectiveParameters": "",
"isCompliant": false,
"managementGroupIds": "{managementgroupId}",
"odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"odataid": null,
"policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
"policyAssignmentName": "e0704696df5e4c3c81c873e8",
"policyAssignmentOwner": "tbd",
"policyAssignmentParameters": "",
"policyAssignmentScope": "/subscriptions/{subscriptionId}",
"policyAssignmentVersion": "",
"policyDefinitionAction": "audit",
"policyDefinitionCategory": "tbd",
"policyDefinitionGroupNames": [
""
],
"policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionName": "2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionReferenceId": "",
"policyDefinitionVersion": "",
"policyEvaluationDetails": null,
"policySetDefinitionCategory": "",
"policySetDefinitionId": "",
"policySetDefinitionName": "",
"policySetDefinitionOwner": "",
"policySetDefinitionParameters": "",
"policySetDefinitionVersion": "",
"resourceGroup": "RG-Tags",
"resourceId": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Microsoft.Network/virtualNetworks/RG-Tags-vnet",
"resourceLocation": "westus2",
"resourceTags": "tbd",
"resourceType": "Microsoft.Network/virtualNetworks",
"subscriptionId": "{subscriptionId}",
"timestamp": "2020-07-15T08:37:07.901911+00:00"
}
]
範例:取得特定日期之後出現之不相容虛擬網路資源的相關事件。
az policy state list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'" --from '2020-07-14T00:00:00Z'
[
{
"complianceReasonCode": "",
"complianceState": "NonCompliant",
"effectiveParameters": "",
"isCompliant": false,
"managementGroupIds": "{managementgroupId}",
"odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"odataid": null,
"policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
"policyAssignmentName": "e0704696df5e4c3c81c873e8",
"policyAssignmentOwner": "tbd",
"policyAssignmentParameters": "",
"policyAssignmentScope": "/subscriptions/{subscriptionId}",
"policyAssignmentVersion": "",
"policyDefinitionAction": "audit",
"policyDefinitionCategory": "tbd",
"policyDefinitionGroupNames": [
""
],
"policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionName": "2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionReferenceId": "",
"policyDefinitionVersion": "",
"policyEvaluationDetails": null,
"policySetDefinitionCategory": "",
"policySetDefinitionId": "",
"policySetDefinitionName": "",
"policySetDefinitionOwner": "",
"policySetDefinitionParameters": "",
"policySetDefinitionVersion": "",
"resourceGroup": "RG-Tags",
"resourceId": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Microsoft.Network/virtualNetworks/RG-Tags-vnet",
"resourceLocation": "westus2",
"resourceTags": "tbd",
"resourceType": "Microsoft.Network/virtualNetworks",
"subscriptionId": "{subscriptionId}",
"timestamp": "2020-07-15T08:37:07.901911+00:00"
}
]
Azure PowerShell
在 PowerShell 資源庫中,會以 Az.PolicyInsights \(英文\) 的形式提供適用於 Azure 原則的 Azure PowerShell 模組。 您可以使用 PowerShellGet,透過 Install-Module -Name Az.PolicyInsights
來安裝模組 (請確定您已安裝最新的 Azure PowerShell):
# Install from PowerShell Gallery via PowerShellGet
Install-Module -Name Az.PolicyInsights
# Import the downloaded module
Import-Module Az.PolicyInsights
# Login with Connect-AzAccount if not using Cloud Shell
Connect-AzAccount
模組擁有下列 Cmdlet:
Get-AzPolicyStateSummary
Get-AzPolicyState
Get-AzPolicyEvent
Get-AzPolicyRemediation
Remove-AzPolicyRemediation
Start-AzPolicyRemediation
Stop-AzPolicyRemediation
範例:取得其不相容資源數目最高之最上層指派原則的狀態摘要。
PS> Get-AzPolicyStateSummary -Top 1
NonCompliantResources : 15
NonCompliantPolicies : 1
PolicyAssignments : {/subscriptions/{subscriptionId}/resourcegroups/RG-Tags/providers/micros
oft.authorization/policyassignments/37ce239ae4304622914f0c77}
範例:取得最近評估資源的狀態記錄 (預設是依時間戳記遞減排序)。
PS> Get-AzPolicyState -Top 1
Timestamp : 5/22/2018 3:47:34 PM
ResourceId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Network/networkInterfaces/linux316
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState : NonCompliant
SubscriptionId : {subscriptionId}
ResourceType : /Microsoft.Network/networkInterfaces
ResourceLocation : westus2
ResourceGroup : RG-Tags
ResourceTags : tbd
PolicyAssignmentName : 37ce239ae4304622914f0c77
PolicyAssignmentOwner : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction : deny
PolicyDefinitionCategory : tbd
範例:取得所有不相容虛擬網路資源的詳細資料。
PS> Get-AzPolicyState -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'"
Timestamp : 5/22/2018 4:02:20 PM
ResourceId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Network/virtualNetworks/RG-Tags-vnet
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState : NonCompliant
SubscriptionId : {subscriptionId}
ResourceType : /Microsoft.Network/virtualNetworks
ResourceLocation : westus2
ResourceGroup : RG-Tags
ResourceTags : tbd
PolicyAssignmentName : 37ce239ae4304622914f0c77
PolicyAssignmentOwner : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction : deny
PolicyDefinitionCategory : tbd
範例:取得與特定日期之後發生的不符合規範虛擬網路資源相關的事件、轉換為 CSV 物件,以及匯出至檔案。
$policyEvents = Get-AzPolicyEvent -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'" -From '2020-09-19'
$policyEvents | ConvertTo-Csv | Out-File 'C:\temp\policyEvents.csv'
$policyEvents
物件的輸出看起來如下列輸出:
Timestamp : 9/19/2020 5:18:53 AM
ResourceId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Network/virtualNetworks/RG-Tags-vnet
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState : NonCompliant
SubscriptionId : {subscriptionId}
ResourceType : /Microsoft.Network/virtualNetworks
ResourceLocation : eastus
ResourceGroup : RG-Tags
ResourceTags : tbd
PolicyAssignmentName : 37ce239ae4304622914f0c77
PolicyAssignmentOwner : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction : deny
PolicyDefinitionCategory : tbd
TenantId : {tenantId}
PrincipalOid : {principalOid}
欄位 PrincipalOid
可用來取得具有 Azure PowerShell Cmdlet Get-AzADUser
的特定使用者。 將 取代 {principalOid}
為您從上一個範例取得的回應。
PS> (Get-AzADUser -ObjectId {principalOid}).DisplayName
Trent Baker
Azure 監視器記錄
若您有一個 Log Analytics 工作區,其中來自活動記錄分析解決方案的 AzureActivity
已繫結至您的訂閱,則您也可以使用簡單的 Kusto 查詢與 AzureActivity
資料表,檢視來自最新資源及已更新資源之評估的不符合規範結果。 有了「Azure 監視器」記錄中的詳細資料,您便可以設定警示來監看不符合規範的情況。
Azure Resource Graph
合規性記錄會儲存在 Azure Resource Graph (ARG) 中。 資料可以從 ARG 查詢匯出,以根據感興趣的範圍和原則來形成自訂儀錶板。 檢閱我們的樣本查詢,透過 ARG 匯出合規性資料。
下一步
- 在 Azure 原則範例檢閱範例。
- 檢閱 Azure 原則定義結構。
- 檢閱了解原則效果。
- 了解如何以程式設計方式建立原則。
- 了解如何補救不符合規範的資源。
- 透過使用 Azure 管理群組來組織資源來檢閱何謂管理群組。