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 modifications de version 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.

  1. Créez un dossier nommé policy-assignment et accédez à ses répertoires.

  2. 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"
      }
    
  3. 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}/]
  4. 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.

  1. 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
    

    Capture d’écran de l’exécution de la commande terraform init qui montre le téléchargement du module azurerm et un message de réussite.

  2. 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
    
  3. Créez le plan d’exécution avec la commande terraform plan et le paramètre out.

    terraform plan -out assignment.tfplan
    

    Capture d’écran de l’exécution de la commande terraform plan avec le paramètre out qui montre la ressource Azure créée.

    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

Capture d’écran de l’exécution de la commande terraform apply et de la création de la ressource résultante.

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 :