Démarrage rapide : Créer une attribution de stratégie pour identifier les ressources non conformes à l'aide de Terraform
Article
La première étape pour comprendre la conformité dans Azure consiste à identifier l’état de vos ressources.
Ce démarrage rapide vous guide pas à pas dans le processus de création d’une attribution de stratégie pour identifier les machines virtuelles qui n’utilisent pas de disques managés.
À la fin de ce processus, vous identifierez les machines virtuelles qui n’utilisent pas de disques managés dans tous les abonnements. Elles sont non conformes à l’attribution de stratégie.
Lors de l’affectation d’une définition de stratégie ou d’initiative intégrée, il est facultatif de référencer une version. Les affectations de stratégie des définitions intégrées utilisent par défaut la dernière version et héritent automatiquement des changements des versions mineures, sauf indication contraire.
Prérequis
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Pour suivre ce guide de démarrage rapide, vous devez utiliser Azure CLI version 2.13.0 ou ultérieure. Pour connaître la version de l’interface, exécutez az --version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.
Créer les fichiers de configuration, de variables et de sortie Terraform
Dans ce guide de démarrage rapide, vous créez une attribution de stratégie et affectez la définition Auditer les machines virtuelles qui n’utilisent pas de disques managés. Cette stratégie identifie les ressources qui ne sont pas conformes aux conditions définies dans sa définition.
Configurez les fichiers de configuration, de variables et de sortie Terraform. Les ressources Terraform pour Azure Policy utilisent le fournisseur Azure.
Créez un dossier nommé policy-assignment et accédez à ses répertoires.
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"
}
Créez variables.tf avec le code suivant :
Terraform
variable"cust_scope" {
default = "{scope}"
}
Une étendue détermine les ressources ou le regroupement de ressources sur lequel la stratégie est appliquée. Cette étendue peut aller d’un groupe d’administration à une ressource individuelle. Veillez à remplacer {scope} par l’un des modèles suivants en fonction de la ressource déclarée :
Abonnement : /subscriptions/{subscriptionId}
Groupe de ressources : /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
output"assignment_id" {
value = azurerm_subscription_policy_assignment.auditvms.id
}
Initialiser Terraform et créer un plan
Initialisez Terraform pour télécharger les fournisseurs nécessaires, puis créez un plan.
Exécutez la commande terraform init. Cette commande télécharge les modules Azure nécessaires pour créer les ressources Azure dans la configuration Terraform.
Exécutez la commande terraform apply en spécifiant le plan assignment.tfplan créé précédemment.
Bash
terraform apply assignment.tfplan
Le message Apply complete! Resources: 1 added, 0 changed, 0 destroyed. s’affiche, indiquant que l’affectation de stratégie a été créée. Étant donné que nous avons défini le fichier outputs.tf, la valeur assignment_id est également retournée.
Identifier des ressources non conformes
Pour voir les ressources qui ne sont pas compatibles avec cette nouvelle attribution, utilisez la valeur assignment_id retournée par terraform apply. Avec cette valeur, exécutez la commande suivante pour obtenir les ID des ressources non conformes, dans un fichier de sortie JSON :
Console
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>
Vos résultats doivent ressembler à l’exemple suivant :