Partage via


Démarrage rapide : Créer une attribution de stratégie pour identifier des ressources non conformes à l'aide d'un fichier Bicep

Au cours de ce démarrage rapide, vous utilisez un fichier Bicep pour créer une affectation de stratégie qui valide la conformité de la ressource à 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’affectation de stratégie, vous identifiez les machines virtuelles non conformes.

Bicep est un langage spécifique à un domaine (DSL) qui utilise la syntaxe déclarative pour déployer des ressources Azure. Il fournit une syntaxe concise, une cohérence des types fiable et une prise en charge de la réutilisation du code. Bicep offre la meilleure expérience de création pour vos solutions d’infrastructure en tant que code dans Azure.

Prérequis

Examiner le fichier Bicep

Le fichier Bicep crée une affectation de stratégie pour une étendue de groupe de ressources et attribue la définition de stratégie intégrée Faire l’audit des machines virtuelles n’utilisant aucun disque managé.

Créez le fichier Bicep suivant en tant que policy-assignment.bicep.

  1. Ouvrez Visual Studio Code et sélectionnez Fichier>Nouveau fichier texte.
  2. Copiez et collez le fichier Bicep dans Visual Studio Code.
  3. Sélectionnez Fichier>Enregistrer et utilisez le nom de fichier policy-assignment.bicep.
param policyAssignmentName string = 'audit-vm-managed-disks'
param policyDefinitionID string = '/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d'
param policyDisplayName string = 'Audit VM managed disks'

resource assignment 'Microsoft.Authorization/policyAssignments@2023-04-01' = {
  name: policyAssignmentName
  scope: resourceGroup()
  properties: {
    policyDefinitionId: policyDefinitionID
    description: 'Policy assignment to resource group scope created with Bicep file'
    displayName: policyDisplayName
    nonComplianceMessages: [
      {
        message: 'Virtual machines should use managed disks'
      }
    ]
  }
}

output assignmentId string = assignment.id

Le type de ressource défini dans le fichier Bicep est Microsoft.Authorization/policyAssignments.

Le fichier Bicep 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 obtenir plus d’informations sur les fichiers Bicep :

Déployer le fichier Bicep

Vous pouvez déployer le fichier Bicep 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.bicep'
}

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 fichier Bicep et l’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/20/2024 18:55:45
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.