Condividi tramite


Avvio rapido: Creare un'assegnazione di criteri per identificare le risorse non conformi con Terraform

Il primo passaggio per comprendere la conformità in Azure consiste nell'identificare lo stato delle risorse. Questa guida introduttiva illustra il processo di creazione di un'assegnazione di criteri per identificare le macchine virtuali che non usano dischi gestiti.

Al termine di questo processo, si identificano le macchine virtuali che non usano dischi gestiti nella sottoscrizione. e che sono quindi non conformi all'assegnazione di criteri.

Quando si assegna un criterio predefinito o una definizione di iniziativa, fare riferimento a una versione è facoltativo. Per impostazione predefinita, le assegnazioni di criteri delle definizioni integrate si basano sulla versione più recente ed ereditano automaticamente le modifiche della versione secondaria, se non diversamente specificato.

Prerequisiti

Creare la configurazione, la variabile e il file di output di Terraform

In questa guida introduttiva si crea un'assegnazione di criteri e si assegna la definizione Audit VMs that do not use managed disks (Controllare le macchine virtuali che non usano i dischi gestiti). Questa definizione di criteri identifica le risorse che non rispettano le condizioni in essa impostate.

Configurare la conformazione, le variabili e i file di output di Terraform. Le risorse di Terraform per Criteri di Azure usano il provider Azure.

  1. Creare una nuova cartella denominata policy-assignment e passare alla directory.

  2. Creare main.tf con il codice seguente:

    Nota

    Per creare un'assegnazione di criteri in un Gruppo di gestione, usare la risorsa azurerm_management_group_policy_assignment, per un Gruppo di risorse usare azurerm_resource_group_policy_assignment e per una Sottoscrizione usare la risorsa 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. Creare variables.tf con il codice seguente:

    variable "cust_scope" {
        default = "{scope}"
    }
    

    L'ambito determina le risorse o il raggruppamento di risorse a cui viene applicata l'assegnazione di criteri Può spaziare da un gruppo di gestione a una singola risorsa. Assicurarsi di sostituire {scope} con uno dei modelli seguenti in base alla risorsa dichiarata:

    • Sottoscrizione: /subscriptions/{subscriptionId}
    • Gruppo di risorse: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • Risorsa: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
  4. Creare output.tf con il codice seguente:

    output "assignment_id" {
        value = azurerm_subscription_policy_assignment.auditvms.id
    }
    

Inizializzare Terraform e creare il piano

Inizializzare Terraform per scaricare i provider necessari e quindi creare un piano.

  1. Eseguire il comando terraform init. Questo comando scarica i moduli di Azure necessari per creare le risorse di Azure nella configurazione di Terraform.

    terraform init
    

    Screenshot dell'esecuzione del comando terraform init che mostra il download del modulo azurerm e un messaggio di operazione completata.

  2. Eseguire l'autenticazione con l'interfaccia della riga di comando di Azure per Terraform. Per altre informazioni, vedere Provider di Azure: Autenticazione tramite l'interfaccia della riga di comando di Azure.

    az login
    
  3. Creare il piano di esecuzione con il comando terraform plan e il parametro out.

    terraform plan -out assignment.tfplan
    

    Screenshot dell'esecuzione del comando terraform plan con il parametro out per visualizzare la risorsa di Azure che verrà creata.

    Nota

    Per informazioni sui piani di esecuzione e la sicurezza della persistenza, vedere Piano Terraform: Avviso di sicurezza.

Applicare un piano di esecuzione Terraform

Applicare il piano di esecuzione.

Eseguire il comando terraform apply e specificare il piano assignment.tfplan precedentemente creato.

terraform apply assignment.tfplan

Screenshot dell'esecuzione del comando terraform apply e della creazione della risorsa.

Con il messaggio Apply complete! Resources: 1 added, 0 changed, 0 destroyed., è stata creata l'assegnazione del criterio. Poiché è stato definito il file outputs.tf, viene restituito anche il valore per assignmen_id.

Identificare risorse non conformi

Per visualizzare le risorse non conformi a questa nuova assegnazione, usare il valore di assignment_id restituito da terraform apply. Eseguire quindi questo comando per ottenere gli ID risorsa delle risorse non conformi restituite in un file 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>

I risultati saranno simili all'esempio seguente:

{
  "@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>"
    }
  ]
}

I risultati sono paragonabili alle informazioni in genere riportate sotto Non-compliant resources (Risorse non conformi) nella visualizzazione nel portale di Azure.

Pulire le risorse

Per rimuovere l'assegnazione creata, usare l'interfaccia della riga di comando di Azure o invertire il piano di esecuzione di Terraform con terraform destroy.

  • Interfaccia della riga di comando di Azure

    az policy assignment delete --name 'audit-vm-manageddisks' --scope '/subscriptions/<subscriptionID>/<resourceGroupName>'
    
  • Terraform

    terraform destroy
    

Passaggi successivi

In questa Guida introduttiva è stata assegnata una definizione dei criteri per identificare le risorse non conformi nell'ambiente Azure.

Per altre informazioni sull'assegnazione di criteri per convalidare la conformità delle nuove risorse, continuare con l'esercitazione seguente: