Créer une affectation de stratégie pour identifier des ressources non conformes à l’aide d’un modèle ARM

Dans ce guide de démarrage rapide, vous utilisez un modèle Azure Resource Manager (modèle ARM) pour créer une affectation de stratégie qui valide la conformité des ressources avec une stratégie Azure. La stratégie est attribuée à un groupe de ressources et audite des machines virtuelles qui n’utilisent aucun disque managé. Après avoir créé l’attribution de stratégie, vous identifiez les machines virtuelles non conformes.

Un modèle Azure Resource Manager est un fichier JSON (JavaScript Object Notation) qui définit l’infrastructure et la configuration de votre projet. Le modèle utilise la syntaxe déclarative. Vous décrivez votre déploiement prévu sans écrire la séquence de commandes de programmation pour créer le déploiement.

Si votre environnement remplit les prérequis et que vous êtes déjà familiarisé avec l’utilisation des modèles ARM, sélectionnez le bouton Déployer sur Azure. Le modèle s’ouvre dans le portail Azure.

Capture d’écran du bouton Déployer sur Azure pour affecter une stratégie avec un modèle Azure Resource Manager.

Prérequis

  • Si vous ne disposez pas d’un compte Azure, créez-en un gratuitement avant de commencer.
  • Azure PowerShell ou Azure CLI.
  • Visual Studio Code et les outils Azure Resource Manager (ARM).
  • Microsoft.PolicyInsights doit être inscrit dans votre abonnement Azure. Pour inscrire un fournisseur de ressources, vous devez avoir l’autorisation pour enregistrer les fournisseur de ressources. Cette autorisation est incluse dans les rôles Contributeur et Propriétaire.
  • Un groupe de ressources avec au moins une machine virtuelle qui n’utilise aucun disque managé.

Vérifier le modèle

Le modèle ARM crée une affectation de stratégie pour une étendue de groupe de ressources et affecte la définition de stratégie intégrée Auditer les machines virtuelles qui n’utilisent pas de disques managés.

Créez le modèle ARM suivant en tant que policy-assignment.json.

  1. Ouvrez Visual Studio Code et sélectionnez Fichier>Nouveau fichier texte.
  2. Copiez et collez le modèle ARM dans Visual Studio Code.
  3. Sélectionnez Fichier>Enregistrer et utilisez le nom de fichier policy-assignment.json.
{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "policyAssignmentName": {
      "type": "string",
      "defaultValue": "audit-vm-managed-disks",
      "metadata": {
        "description": "Policy assignment name used in assignment's resource ID"
      }
    },
    "policyDefinitionID": {
      "type": "string",
      "defaultValue": "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
      "metadata": {
        "description": "Policy definition ID"
      }
    },
    "policyDisplayName": {
      "type": "string",
      "defaultValue": "Audit VM managed disks",
      "metadata": {
        "description": "Display name for Azure portal"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Authorization/policyAssignments",
      "apiVersion": "2023-04-01",
      "name": "[parameters('policyAssignmentName')]",
      "properties": {
        "policyDefinitionId": "[parameters('policyDefinitionID')]",
        "description": "Policy assignment to resource group scope created with ARM template",
        "displayName": "[parameters('policyDisplayName')]",
        "nonComplianceMessages": [
          {
            "message": "Virtual machines should use managed disks"
          }
        ]
      }
    }
  ],
  "outputs": {
    "assignmentId": {
      "type": "string",
      "value": "[resourceId('Microsoft.Authorization/policyAssignments', parameters('policyAssignmentName'))]"
    }
  }
}

Le type de ressource défini dans le modèle ARM est Microsoft.Authorization/policyAssignments.

Le modèle utilise trois paramètres pour déployer l’affectation de stratégie :

  • policyAssignmentName crée l’affectation de stratégie appelée audit-vm-managed-disks.
  • policyDefinitionID utilise l’ID de la définition de stratégie intégrée. Pour référence, les commandes permettant d’obtenir l’ID se trouvent dans la section pour déployer le modèle.
  • policyDisplayName crée un nom complet visible dans le portail Azure.

Pour plus d’informations sur les fichiers de modèle ARM :

Déployer le modèle ARM

Vous pouvez déployer le modèle ARM avec Azure PowerShell ou Azure CLI.

Depuis une session de terminal Visual Studio Code, connectez-vous à Azure. Si vous avez plusieurs abonnements, exécutez les commandes pour définir le contexte sur votre abonnement. Remplacez <subscriptionID> par l’identifiant de votre abonnement Azure.

Connect-AzAccount

# Run these commands if you have multiple subscriptions
Get-AzSubScription
Set-AzContext -Subscription <subscriptionID>

Vous pouvez vérifier si Microsoft.PolicyInsights est inscrit. Si ce n’est pas le cas, vous pouvez exécuter une commande pour inscrire le fournisseur de ressources.

Get-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights' |
   Select-Object -Property ResourceTypes, RegistrationState

Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'

Pour plus d’informations, accédez à Get-AzResourceProvider et Register-AzResourceProvider.

Les commandes suivantes affichent la valeur du paramètre policyDefinitionID :

(Get-AzPolicyDefinition |
  Where-Object { $_.Properties.DisplayName -eq 'Audit VMs that do not use managed disks' }).ResourceId

Les commandes suivantes déploient la définition de stratégie dans votre groupe de ressources. Remplacez <resourceGroupName> par le nom de votre groupe de ressources :

$rg = Get-AzResourceGroup -Name '<resourceGroupName>'

$deployparms = @{
Name = 'PolicyDeployment'
ResourceGroupName = $rg.ResourceGroupName
TemplateFile = 'policy-assignment.json'
}

New-AzResourceGroupDeployment @deployparms

La variable $rg stocke les propriétés pour le groupe de ressources. La variable $deployparms utilise splatting pour créer des valeurs de paramètre et améliorer la lisibilité. La commande New-AzResourceGroupDeployment utilise les valeurs de paramètre définies dans la variable $deployparms.

  • Name est le nom de déploiement affiché dans la sortie et dans Azure pour les déploiements du groupe de ressources.
  • ResourceGroupName utilise la propriété $rg.ResourceGroupName pour obtenir le nom de votre groupe de ressources dans lequel la stratégie est attribuée.
  • TemplateFile spécifie le nom du modèle ARM et son emplacement sur votre ordinateur local.

Vous pouvez vérifier le déploiement de l’affectation de stratégie avec la commande suivante :

La commande utilise la propriété $rg.ResourceId pour obtenir l’ID du groupe de ressources.

Get-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId
Name               : audit-vm-managed-disks
ResourceId         : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks
ResourceName       : audit-vm-managed-disks
ResourceGroupName  : {resourceGroupName}
ResourceType       : Microsoft.Authorization/policyAssignments
SubscriptionId     : {subscriptionId}
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks
Properties         : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.Policy.PsPolicyAssignmentProperties

Pour plus d’informations, accédez à Get-AzPolicyAssignment.

Identifier des ressources non conformes

Une fois l’affectation de stratégie déployée, les machines virtuelles déployées dans le groupe de ressources sont auditées en matière de conformité avec la stratégie de disque managé.

L’état de conformité d’une nouvelle affectation de stratégie prend quelques minutes pour devenir actif et fournir des résultats sur l’état de la stratégie.

$complianceparms = @{
ResourceGroupName = $rg.ResourceGroupName
PolicyAssignmentName = 'audit-vm-managed-disks'
Filter = 'IsCompliant eq false'
}

Get-AzPolicyState @complianceparms

La variable $complianceparms crée des valeurs de paramètre utilisées dans la commande Get-AzPolicyState.

  • ResourceGroupName obtient le nom du groupe de ressources de la propriété $rg.ResourceGroupName.
  • PolicyAssignmentName spécifie le nom utilisé lors de la création de l’affectation de stratégie.
  • Filter utilise une expression pour rechercher des ressources qui ne sont pas conformes à l’affectation de stratégie.

Vos résultats doivent ressembler à l’exemple suivant et ComplianceState montre NonCompliant :

Timestamp                : 2/26/2024 19:02:56
ResourceId               : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualmachines/{vmId}
PolicyAssignmentId       : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.authorization/policyassignments/audit-vm-managed-disks
PolicyDefinitionId       : /providers/microsoft.authorization/policydefinitions/06a78e20-9358-41c9-923c-fb736d382a4d
IsCompliant              : False
SubscriptionId           : {subscriptionId}
ResourceType             : Microsoft.Compute/virtualMachines
ResourceLocation         : {location}
ResourceGroup            : {resourceGroupName}
ResourceTags             : tbd
PolicyAssignmentName     : audit-vm-managed-disks
PolicyAssignmentOwner    : tbd
PolicyAssignmentScope    : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}
PolicyDefinitionName     : 06a78e20-9358-41c9-923c-fb736d382a4d
PolicyDefinitionAction   : audit
PolicyDefinitionCategory : tbd
ManagementGroupIds       : {managementGroupId}
ComplianceState          : NonCompliant
AdditionalProperties     : {[complianceReasonCode, ]}

Pour plus d’informations, accédez à Get-AzPolicyState.

Nettoyer les ressources

Remove-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId

Pour vous déconnecter de votre session Azure PowerShell :

Disconnect-AzAccount

É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 qui valident la conformité des ressources, passez au didacticiel.