Compartir por


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

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.

  1. Cree una nueva carpeta llamada policy-assignment y vaya a ese directorio.

  2. 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"
      }
    
  3. 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}/]
  4. 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.

  1. 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
    

    Captura de pantalla de la ejecución del comando terraform init que muestra la descarga del módulo azurerm y un mensaje de operación correcta.

  2. 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
    
  3. Cree el plan de ejecución con el comando terraform plan y el parámetro out.

    terraform plan -out assignment.tfplan
    

    Captura de pantalla de la ejecución del comando terraform plan y el parámetro out para mostrar el recurso de Azure que se crearía.

    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

Captura de pantalla de la ejecución del comando terraform apply y la creación de recursos resultante.

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: