Démarrage rapide : Créer une attribution de stratégie pour identifier les ressources non conformes à l'aide de Terraform
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.
- Terraform version 0.12.0 ou supérieure configurée dans votre environnement. Pour obtenir des instructions, consultez Configurer Terraform avec Azure Cloud Shell.
- 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.Créez
main.tf
avec le code suivant :Notes
Pour créer une affectation de stratégie dans un groupe d’administration, utilisez la ressource azurerm_management_group_policy_assignment. Pour un groupe de ressources, utilisez azurerm_resource_group_policy_assignment et pour un abonnement, utilisez la ressource 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" }
Créez
variables.tf
avec le code suivant :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}
- Ressource :
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
- Abonnement :
Créez
output.tf
avec le code suivant :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.
terraform init
Authentifiez-vous auprès de Terraform à l’aide d’Azure CLI. Pour plus d’informations, consultez Fournisseur Azure : Authentification à l’aide d’Azure CLI.
az login
Créez le plan d’exécution avec la commande terraform plan et le paramètre out.
terraform plan -out assignment.tfplan
Notes
Pour plus d’informations sur la conservation des plans d’exécution et sur la sécurité, consultez Plan Terraform : Avertissement de sécurité.
Appliquer le plan d’exécution Terraform
Appliquez le plan d’exécution.
Exécutez la commande terraform apply en spécifiant le plan assignment.tfplan
créé précédemment.
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 :
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 :
{
"@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>"
}
]
}
Les résultats sont comparables à ce que vous devriez généralement voir sous Ressources non conformes dans la vue du portail Azure.
Nettoyer les ressources
Pour supprimer l’attribution créée, utilisez Azure CLI ou annulez le plan d’exécution Terraform avec terraform destroy
.
Azure CLI
az policy assignment delete --name 'audit-vm-manageddisks' --scope '/subscriptions/<subscriptionID>/<resourceGroupName>'
Terraform
terraform destroy
Étapes suivantes
Dans ce démarrage rapide, vous avez affecté une définition de stratégie pour identifier les ressources non conformes de votre environnement Azure.
Pour en savoir plus sur l’affectation de stratégies visant à vérifier que les nouvelles ressources sont conformes, suivez le tutoriel :