快速入門:使用 REST API 建立原則指派,以識別不符合規範的資源
了解 Azure 中合規性的第一個步驟是識別您資源的狀態。 在本快速入門中,您將使用 REST API 來建立一個原則指派,以識別不符合規範的資源。 此原則會指派給資源群組,且其會稽核不使用受控磁碟的虛擬機器。 建立原則指派之後,您將識別不符合規範的虛擬機器。
本指南使用 REST API 來建立原則指派,以及識別 Azure 環境中不符合規範的資源。 本文中的範例會使用 PowerShell 和 Azure CLI az rest
命令。 您也可以從 Bash 殼層 (例如 Git Bash) 執行 az rest
命令。
指派內建原則或計畫定義時,您可以選擇參考版本。 除非另有指定,否則內建定義的原則指派會預設為最新版本,並自動繼承次要版本變更。
必要條件
- 如果您沒有 Azure 帳戶,請在您開始之前先建立 免費帳戶。
- 最新版本的 PowerShell 或 Bash 殼層 (例如 Git Bash)。
- 最新版的 Azure CLI。
- Visual Studio Code \(英文\)。
- 其中至少有一個虛擬機器不使用受控磁碟的資源群組。
檢閱 REST API 語法
有兩個元素可執行 REST API 命令:REST API URI 和要求本文。 如需詳細資訊,請移至原則指派 - 建立。
以下範例顯示了用於建立原則定義的 REST API URI 語法。
PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}?api-version=2023-04-01
scope
:範圍可決定對哪些資源或資源群組強制執行原則指派。 此範圍可包含管理群組到個別資源。 以下列其中一種模式取代{scope}
:- 管理群組:
/providers/Microsoft.Management/managementGroups/{managementGroup}
- 訂用帳戶:
/subscriptions/{subscriptionId}
- 資源群組:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
- 資源:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}
- 管理群組:
policyAssignmentName
:為您的指派建立原則指派名稱。 該名稱會包含在原則指派的policyAssignmentId
屬性中。
以下範例是用於建立要求本文檔案的 JSON。
{
"properties": {
"displayName": "",
"description": "",
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/11111111-1111-1111-1111-111111111111",
"nonComplianceMessages": [
{
"message": ""
}
]
}
}
displayName
:原則指派的顯示名稱。description
:可用來新增原則指派的相關內容。policyDefinitionId
:要用於建立指派的原則定義識別碼。nonComplianceMessages
:設定當資源被評估為不符合規範時要使用的訊息。 如需詳細資訊,請參閱指派不符合規範訊息。
連接到 Azure
從 Visual Studio Code 終端機工作階段中連線到 Azure。 如果您有多個訂用帳戶,請執行命令來設定您訂用帳戶的內容。 使用您的 Azure 訂用帳戶識別碼來取代 <subscriptionID>
。
az login
# Run these commands if you have multiple subscriptions
az account list --output table
az account set --subscription <subscriptionID>
即使您使用的是 PowerShell,也請使用 az login
,因為範例使用 Azure CLI az rest 命令。
建立原則指派
在本範例中,您會建立一個原則指派,並且指派稽核不是使用受控磁碟的 VM 定義。
需要要求本文才能建立指派。 將下列 JSON 儲存在一個名為 request-body.json 的檔案中。
{
"properties": {
"displayName": "Audit VM managed disks",
"description": "Policy assignment to resource group scope created with REST API",
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
"nonComplianceMessages": [
{
"message": "Virtual machines should use managed disks"
}
]
}
}
若要在現有的資源群組範圍中建立您的原則指派,請將下列 REST API URI 與要求本文檔案一起使用。 請將 {subscriptionId}
和 {resourceGroupName}
取代為您的值。 該命令會在您的殼層中顯示 JSON 輸出。
az rest --method put --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01 --body `@request-body.json
在 PowerShell 中,需要使用反引號 (`
) 來逸出 at sign
(@
) 以指定檔名。 在像 Git Bash 這樣的 Bash 殼層中,省略反引號。
如需詳細資訊,請移至原則指派 - 建立。
識別不符合規範的資源
新原則指派的合規性狀態需要幾分鐘的時間才會生效,而且其會提供原則狀態的相關結果。 您可以使用 REST API 來顯示此原則指派不符合規範的資源,且輸出採用 JSON 格式。
若要識別不符合規範的資源,請執行下列命令。 將 {subscriptionId}
和 {resourceGroupName}
取代為您在建立原則指派時所使用的值。
az rest --method post --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01 --uri-parameters `$filter="complianceState eq 'NonCompliant' and PolicyAssignmentName eq 'audit-vm-managed-disks'"
filter
可查詢被評估為不符合您透過原則指派所建立名為 audit-vm-managed-disks 的原則定義規範的資源。 再次注意,反引號是用來在篩選條件中逸出貨幣符號 ($
)。 對於 Bash 用戶端,反斜線 (\
) 是常見的逸出字元。
您的結果類似下列範例:
{
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
"@odata.count": 1,
"@odata.nextLink": null,
"value": [
{
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"@odata.id": null,
"complianceReasonCode": "",
"complianceState": "NonCompliant",
"effectiveParameters": "",
"isCompliant": false,
"managementGroupIds": "",
"policyAssignmentId": "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.authorization/policyassignments/audit-vm-managed-disks",
"policyAssignmentName": "audit-vm-managed-disks",
"policyAssignmentOwner": "tbd",
"policyAssignmentParameters": "",
"policyAssignmentScope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}",
"policyAssignmentVersion": "",
"policyDefinitionAction": "audit",
"policyDefinitionCategory": "tbd",
"policyDefinitionGroupNames": [
""
],
"policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
"policyDefinitionName": "06a78e20-9358-41c9-923c-fb736d382a4d",
"policyDefinitionReferenceId": "",
"policyDefinitionVersion": "1.0.0",
"policySetDefinitionCategory": "",
"policySetDefinitionId": "",
"policySetDefinitionName": "",
"policySetDefinitionOwner": "",
"policySetDefinitionParameters": "",
"policySetDefinitionVersion": "",
"resourceGroup": "{resourceGroupName}",
"resourceId": "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualmachines/{vmName}>",
"resourceLocation": "westus3",
"resourceTags": "tbd",
"resourceType": "Microsoft.Compute/virtualMachines",
"subscriptionId": "{subscriptionId}",
"timestamp": "2024-03-26T02:19:28.3720191Z"
}
]
}
如需詳細資訊,請移至原則狀態 - 列出資源群組的查詢結果。
清除資源
若要移除原則指派,請使用以下命令。 將 {subscriptionId}
和 {resourceGroupName}
取代為您在建立原則指派時所使用的值。 該命令會在您的殼層中顯示 JSON 輸出。
az rest --method delete --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01
您可以使用以下命令來驗證原則指派是否已刪除。 您的殼層中會顯示一則訊息。
az rest --method get --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01
The policy assignment 'audit-vm-managed-disks' is not found.
如需詳細資訊,請移至原則指派 - 刪除和原則指派 - 取得。
下一步
在這個快速入門中,您指派原則定義以識別 Azure 環境中的不相容資源。
若要深入了解如何指派驗證資源合規性的原則,請繼續進行教學課程。