Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
若要了解 Azure 中的符合性,第一步是确定资源的状态。 本快速入门逐步讲解如何创建策略分配,以识别未使用托管磁盘的虚拟机。
此过程结束时,你可以识别订阅中哪些虚拟机未使用托管磁盘。 他们未遵从政策分配。
在分配内置策略或计划定义时,可以选择性地引用一个版本。 内置定义的策略分配默认采用最新版本,并会自动接受次要版本更新,除非另有指定。
如果没有 Azure 订阅,请在开始前创建一个试用版订阅帐户。
在你的环境中配置 Terraform 0.12.0 或更高版本。
本快速入门需要运行 Azure CLI 2.13.0 或更高版本。 若要查找版本,请运行
az --version
。 如果需要进行安装或升级,请参阅安装 Azure CLI。
本快速入门将创建一个策略分配,并分配“审核未使用托管磁盘的 VM”定义。 此策略定义可识别不符合策略定义中设置的条件的资源。
配置 Terraform 配置、变量和输出文件。 Azure Policy 的 Terraform 资源使用 Azure 提供程序。
创建名为
policy-assignment
的新文件夹,并将目录更改到其中。使用以下代码创建
main.tf
:Nota
若要在管理组中创建策略分配,请使用 azurerm_management_group_policy_assignment 资源,对于资源组,请使用 azurerm_resource_group_policy_assignment,对于订阅,请使用 azurerm_subscription_policy_assignment 资源。
provider "azurerm" { features {} environment = "china" } terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = ">= 2.96.0" } } } resource "azurerm_subscription_policy_assignment" "auditvms" { name = "audit-vm-manageddisks" subscription_id = var.cust_scope policy_definition_id = "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d" description = "Shows all virtual machines not using managed disks" display_name = "Audit VMs without managed disks assignment" }
使用以下代码创建
variables.tf
:variable "cust_scope" { default = "{scope}" }
范围用于确定策略分配将在哪些资源或资源组上强制执行。 它的范围可以从管理组到单个资源。 请务必将
{scope}
替换为基于所声明资源的以下模式之一:- 订阅:
/subscriptions/{subscriptionId}
- 资源组:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
- 资源:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
- 订阅:
使用以下代码创建
output.tf
:output "assignment_id" { value = azurerm_subscription_policy_assignment.auditvms.id }
初始化 Terraform 以下载所需的提供程序,然后创建计划。
运行 terraform init 命令。 此命令将下载在 Terraform 配置中创建 Azure 资源所需的 Azure 模块。
terraform init
使用 Azure CLI 为 Terraform 进行身份验证。 有关详细信息,请参阅Azure 提供程序:使用 Azure CLI 进行身份验证。
az cloud set -n AzureChinaCloud az login
使用 terraform plan 命令和 out 参数创建执行计划。
terraform plan -out assignment.tfplan
Nota
有关保留执行计划和安全性的信息,请参阅 Terraform 计划:安全警告。
应用执行计划。
运行 terraform apply 命令并指定已创建的 assignment.tfplan
。
terraform apply assignment.tfplan
出现 Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
消息,表示策略分配现已创建。 由于我们已定义 outputs.tf
文件,因此还会返回 assignment_id。
若要查看此新分配下不合规的资源,请使用terraform apply
返回的assignment_id。 使用它,运行以下命令,获取输出到 JSON 文件中的不合规资源的资源 ID:
armclient post "/subscriptions/<subscriptionID>/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$filter=IsCompliant eq false and PolicyAssignmentId eq '<policyAssignmentID>'&$apply=groupby((ResourceId))" > <json file to direct the output with the resource IDs into>
结果如以下示例所示:
{
"@odata.context": "https://management.chinacloudapi.cn/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
"@odata.count": 3,
"value": [
{
"@odata.id": null,
"@odata.context": "https://management.chinacloudapi.cn/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"ResourceId": "/subscriptions/<subscriptionId>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachineId>"
},
{
"@odata.id": null,
"@odata.context": "https://management.chinacloudapi.cn/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"ResourceId": "/subscriptions/<subscriptionId>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachine2Id>"
},
{
"@odata.id": null,
"@odata.context": "https://management.chinacloudapi.cn/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"ResourceId": "/subscriptions/<subscriptionName>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachine3ID>"
}
]
}
这些结果与 Azure 门户视图中“不合规资源”下通常所列的结果类似。
若要删除创建的分配,请使用 Azure CLI,或使用 terraform destroy
撤销 Terraform 执行计划。
Azure CLI(Azure 命令行界面)
az policy assignment delete --name 'audit-vm-manageddisks' --scope '/subscriptions/<subscriptionID>/<resourceGroupName>'
Terraform
terraform destroy
本快速入门已分配一个策略定义用于识别 Azure 环境中的不合规资源。
要了解有关分配策略以验证新资源是否符合要求的详细信息,请继续以下教程: