Share via


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 identificheranno correttamente le macchine virtuali che non usano dischi gestiti tra le sottoscrizioni. e che sono quindi non conformi all'assegnazione di criteri.

Prerequisiti

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

In questo avvio rapido i crea un'assegnazione di criteri e si assegna la definizione Controlla macchine virtuali che non usano dischi gestiti (06a78e20-9358-41c9-923c-fb736d382a4d). Questa definizione di criteri identifica le risorse che non rispettano le condizioni in essa impostate.

In primo luogo, creare la configurazione, la variabile 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 il 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

A questo punto, 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 Azure: Autenticazione con 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 sul salvataggio permanente dei piani di esecuzione e sulla sicurezza, vedere Terraform Plan: Avviso di sicurezza.

Applicare un piano di esecuzione Terraform

Infine, 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.

Il messaggio "Apply complete! Risorse: 1 aggiunto, 0 modificato, 0 eliminato". Messaggio, ora viene creata l'assegnazione dei criteri. Poiché il outputs.tf file è stato definito, viene restituito anche il assignment_id .

Identificare risorse non conformi

Per visualizzare le risorse non conformi in questa nuova assegnazione, usare il 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: