快速入门:使用 Azure CLI 创建策略分配以识别不合规的资源

若要了解 Azure 中的符合性,第一步是确定资源的状态。 本快速入门介绍如何使用 Azure CLI 创建策略分配以识别不合规的资源。 策略分配给资源组,并对不使用托管磁盘的虚拟机进行审核。 创建策略分配后,可以识别不合规的虚拟机。

Azure CLI 用于从命令行或脚本创建和管理 Azure 资源。 本指南使用 Azure CLI 创建策略分配,并识别 Azure 环境中的不合规资源。

先决条件

  • 如果没有 Azure 帐户,请在开始前创建一个试用帐户
  • Azure CLI
  • Visual Studio Code
  • 必须在 Azure 订阅中重新注册 Microsoft.PolicyInsights。 要注册资源提供程序,必须具有注册资源提供程序的权限。 此权限包含在“参与者”和“所有者”角色中。
  • 具有至少一个不使用托管磁盘的虚拟机的资源组。

连接到 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>

注册资源提供程序

注册资源提供程序后,可在 Azure 订阅中使用。

若要验证是否已注册 Microsoft.PolicyInsights,请运行 Get-AzResourceProvider。 资源提供程序包含多个资源类型。 如果结果为 NotRegistered,则运行 Register-AzResourceProvider

az provider show \
  --namespace Microsoft.PolicyInsights \
  --query "{Provider:namespace,State:registrationState}" \
  --output table

az provider register --namespace Microsoft.PolicyInsights

Azure CLI 命令使用反斜杠 (\) 进行行接续以提高可读性。 有关详细信息,请转到 az provider

创建策略分配

运行以下命令,为资源组创建新的策略分配。 此示例使用的现有资源组包含不带托管磁盘的虚拟机。 该资源组属于策略分配范围。 本示例使用内置策略定义“审核不使用托管磁盘的 VM”。

运行以下命令并将 <resourceGroupName> 替换为资源组名称:

rgid=$(az group show --resource-group <resourceGroupName> --query id --output tsv)

definition=$(az policy definition list \
  --query "[?displayName=='Audit VMs that do not use managed disks']".name \
  --output tsv)

rgid 变量存储资源组 ID。 definition 变量存储策略定义的名称,即 GUID。

运行以下命令创建策略分配:

az policy assignment create \
  --name 'audit-vm-managed-disks' \
  --display-name 'Audit VM managed disks' \
  --scope $rgid \
  --policy $definition \
  --description 'Azure CLI policy assignment to resource group'
  • name 创建分配的 ResourceId 中使用的策略分配名称。
  • display-name 是策略分配的名称,在 Azure 门户中可见。
  • scope 使用 $rgid 变量将策略分配给资源组。
  • policy 分配存储在 $definition 变量中的策略定义。
  • description 可用于添加有关策略分配的上下文。

策略分配的结果类似于以下示例:

"description": "Azure CLI policy assignment to resource group",
"displayName": "Audit VM managed disks",
"enforcementMode": "Default",
"id": "/subscriptions/{subscriptionID}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks",
"identity": null,
"location": null,
"metadata": {
  "createdBy": "11111111-1111-1111-1111-111111111111",
  "createdOn": "2024-02-23T18:42:27.4780803Z",
  "updatedBy": null,
  "updatedOn": null
},
"name": "audit-vm-managed-disks",

若要重新显示策略分配信息,请运行以下命令:

az policy assignment show --name "audit-vm-managed-disks" --scope $rgid

有关详细信息,请转到 az policy assignment

识别不合规的资源

新策略分配的“符合性状态”需要几分钟才会变为活动状态并提供关于策略状态的结果。

使用以下命令来识别不符合所创建的策略分配的资源:

policyid=$(az policy assignment show \
  --name "audit-vm-managed-disks" \
  --scope $rgid \
  --query id \
  --output tsv)

az policy state list --resource $policyid --filter "(isCompliant eq false)"

policyid 变量使用表达式获取策略分配的 ID。 filter 参数将向不合规资源限制输出。

az policy state list 输出很详尽,但在本文中 complianceState 显示 NonCompliant

"complianceState": "NonCompliant",
"components": null,
"effectiveParameters": "",
"isCompliant": false,

有关详细信息,请转到 az policy state

清理资源

运行以下命令删除策略分配。

az policy assignment delete --name "audit-vm-managed-disks" --scope $rgid

若要退出登录 Azure CLI 会话,请执行以下操作:

az logout

后续步骤

本快速入门已分配一个策略定义用于识别 Azure 环境中的不合规资源。

若要详细了解如何分配验证资源合规性的策略,请继续学习以下教程。