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
- 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 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.
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 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
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 di Azure: Autenticazione tramite 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 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
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: