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
- Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
- Terraform versione 0.12.0 o successiva configurata nell'ambiente in uso. Per le istruzioni, vedere Configurare Terraform con Azure Cloud Shell.
- Questa guida di avvio rapido richiede l'interfaccia della riga di comando di Azure 2.13.0 o versioni successive. Per trovare la versione, eseguire
az --version
. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.
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.
Creare una nuova cartella denominata
policy-assignment
e passare alla directory.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" }
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}/]
- Sottoscrizione:
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.
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
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
Creare il piano di esecuzione con il comando terraform plan e il parametro out.
terraform plan -out assignment.tfplan
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
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: