快速入门:使用 REST API 创建策略分配以识别不合规资源
若要了解 Azure 中的符合性,第一步是确定资源的状态。 本快速入门介绍如何使用 REST API 创建策略分配以识别不合规的资源。 策略分配给资源组,并对不使用托管磁盘的虚拟机进行审核。 创建策略分配后,可以识别不合规的虚拟机。
本指南使用 REST API 创建策略分配,并识别 Azure 环境中的不合规资源。 本文中的示例使用 PowerShell 和 Azure CLI az rest
命令。 还可以从 Bash shell(如 Git Bash)运行 az rest
命令。
先决条件
- 如果没有 Azure 帐户,请在开始前创建一个试用帐户。
- 最新版本的 PowerShell 或 Bash shell(如 Git Bash)。
- 最新版本的 Azure CLI。
- Visual Studio Code。
- 具有至少一个不使用托管磁盘的虚拟机的资源组。
查看 REST API 语法
运行 REST API 命令需要两个元素:REST API URI 和请求正文。 有关详细信息,请转到策略分配 - 创建。
以下示例演示用于创建策略定义的 REST API URI 语法。
PUT https://management.chinacloudapi.cn/{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
:用于创建分配的策略定义 ID。nonComplianceMessages
:设置当资源评估为不合规时要使用的消息。 有关详细信息,请参阅“分配不合规”消息。
连接到 Azure
从 Visual Studio Code 终端会话连接到 Azure。 如果具有多个订阅,请运行命令以将上下文设置为你的订阅。 将 <subscriptionID>
替换为你的 Azure 订阅 ID。
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}
替换为自定义值。 该命令将在 shell 中显示 JSON 输出。
az rest --method put --uri https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01 --body `@request-body.json
在 PowerShell 中,需要使用反引号 (`
) 来转义 at sign
(@
) 以指定文件名。 在 Bash shell(如 Git Bash)中,省略反引号。
有关详细信息,请转到策略分配 - 创建。
识别不合规的资源
新策略分配的“符合性状态”需要几分钟才会变为活动状态并提供关于策略状态的结果。 请使用 REST API 显示此策略分配的不合规资源,并且输出采用 JSON 格式。
若要标识不合规的资源,请运行以下命令。 将 {subscriptionId}
和 {resourceGroupName}
替换为创建策略分配时使用的值。
az rest --method post --uri https://management.chinacloudapi.cn/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-management-disks 的策略定义。 同样,请注意,反引号用于在筛选器中转义美元符号 ($
)。 对于 Bash 客户端,反斜杠 (\
) 是一个常用的转义字符。
结果应如以下示例所示:
{
"@odata.context": "https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
"@odata.count": 1,
"@odata.nextLink": null,
"value": [
{
"@odata.context": "https://management.chinacloudapi.cn/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": "chinanorth3",
"resourceTags": "tbd",
"resourceType": "Microsoft.Compute/virtualMachines",
"subscriptionId": "{subscriptionId}",
"timestamp": "2024-03-26T02:19:28.3720191Z"
}
]
}
有关详细信息,请参阅策略状态 - 列出资源组的查询结果。
清理资源
若要删除策略分配,请使用以下命令。 将 {subscriptionId}
和 {resourceGroupName}
替换为创建策略分配时使用的值。 该命令将在 shell 中显示 JSON 输出。
az rest --method delete --uri https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01
你可以使用以下命令验证策略分配是否已删除。 shell 中会显示一条消息。
az rest --method get --uri https://management.chinacloudapi.cn/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 环境中的不合规资源。
若要详细了解如何分配验证资源合规性的策略,请继续学习以下教程。