Inicio rápido: Creación de una asignación de directivas para identificar los recursos no compatibles mediante Terraform
El primer paso para entender el cumplimiento en Azure es identificar el estado de sus recursos. Esta guía de inicio rápido lo guiará por el proceso de creación de una asignación de directiva para identificar las máquinas virtuales que no están usando discos administrados.
Al finalizar este proceso, habrá identificado máquinas virtuales que no utilizan discos administrados en la suscripción. No son compatibles con la asignación de directiva.
Al asignar una definición de iniciativa o directiva integrada, es opcional hacer referencia a una versión. Las asignaciones de directivas de definiciones integradas de forma predeterminada a la versión más reciente y heredan automáticamente los cambios de versión secundaria a menos que se especifique lo contrario.
Requisitos previos
- Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
- Terraform versión 0.12.0 o superior configurado en el entorno. Para obtener instrucciones, consulte Configuración de Terraform mediante Azure Cloud Shell.
- Para realizar este inicio rápido es necesaria la versión 2.13.0 o superior de la CLI de Azure. Para encontrar la versión, ejecute
az --version
. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.
Creación de la configuración, la variable y el archivo de salida de Terraform
En esta guía de inicio rápido, creará una asignación de directiva y asignará la definición Auditoría de máquinas virtuales que no usan discos administrados. Esta definición de directiva identifica los recursos que no cumplen las condiciones establecidas en la definición de directiva.
Configure Terraform, la variable y los archivos de salida. Los recursos de Terraform para Azure Policy usan el proveedor de Azure.
Cree una nueva carpeta llamada
policy-assignment
y vaya a ese directorio.Cree el archivo
main.tf
con el siguiente código:Nota:
Para crear una asignación de directiva en un grupo de administración, use el recurso azurerm_management_group_policy_assignment; para un grupo de recursos, use el recurso azurerm_resource_group_policy_assignment; y para una suscripción, use el recurso azurerm_subscription_policy_assignment.
provider "azurerm" { features {} } 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" }
Cree el archivo
variables.tf
con el siguiente código:variable "cust_scope" { default = "{scope}" }
Un ámbito determina en qué recursos o agrupación de recursos se implementa la asignación de directiva. Podría abarcar desde un grupo de administración a un recurso individual. Asegúrese de reemplazar
{scope}
por uno de los patrones siguientes en función del recurso declarado:- Suscripción:
/subscriptions/{subscriptionId}
- Grupos de recursos:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
- Recurso:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
- Suscripción:
Cree el archivo
output.tf
con el siguiente código:output "assignment_id" { value = azurerm_subscription_policy_assignment.auditvms.id }
Inicialización de Terraform y creación de un plan
Inicialice Terraform para descargar los proveedores necesarios y, a continuación, cree un plan.
Ejecute el comando terraform init. Este comando descarga los módulos de Azure necesarios para crear los recursos de Azure en la configuración de Terraform.
terraform init
Autentique Terraform con la CLI de Azure. Para más información, consulte Proveedor de Azure: autenticación mediante la CLI de Azure.
az login
Cree el plan de ejecución con el comando terraform plan y el parámetro out.
terraform plan -out assignment.tfplan
Nota
Para obtener información sobre la conservación de los planes de ejecución y la seguridad, consulte Plan de Terraform: Advertencia de seguridad.
Aplicación de un plan de ejecución de Terraform
Aplique el plan de ejecución.
Ejecute el comando terraform apply y especifique el archivo assignment.tfplan
ya creado.
terraform apply assignment.tfplan
Con el mensaje de Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
se crea ahora la asignación de directivas. Como hemos definido el archivo outputs.tf
, también se devuelve el valor assignment_id.
Identificación de recursos sin compatibilidad
Para ver los recursos que no son compatibles con esta nueva asignación, utilice el valor de assignment_id que devuelve terraform apply
. Con dicho valor, ejecute el siguiente comando para obtener los identificadores de los recursos no compatibles que se generan en un archivo JSON:
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>
Los resultados deben tener una apariencia similar al ejemplo siguiente:
{
"@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
"@odata.count": 3,
"value": [
{
"@odata.id": null,
"@odata.context": "https://management.azure.com/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.azure.com/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.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"ResourceId": "/subscriptions/<subscriptionName>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachine3ID>"
}
]
}
Son comparables a lo que normalmente vería en Recursos no compatibles, en la vista de Azure Portal.
Limpieza de recursos
Para eliminar la asignación creada, use la CLI de Azure o revierta el plan de ejecución de Terraform con terraform destroy
.
Azure CLI
az policy assignment delete --name 'audit-vm-manageddisks' --scope '/subscriptions/<subscriptionID>/<resourceGroupName>'
Terraform
terraform destroy
Pasos siguientes
En este inicio rápido, se asigna una definición de directiva para identificar los recursos incompatibles en el entorno de Azure.
Para más información sobre la asignación de directivas para garantizar la compatibilidad de los nuevos recursos, continúe con el tutorial para: