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.
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 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.
- Ouvrez Visual Studio Code et sélectionnez Fichier>Nouveau fichier texte.
- Copiez et collez le modèle ARM dans Visual Studio Code.
- 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 :
- Pour trouver d’autres exemples de modèle ARM, accédez à Parcourir des exemples de code.
- Pour découvrir plus d’informations sur la référence de modèle pour les déploiements, accédez à Référence de modèle Azure.
- Pour savoir comment développer des modèles ARM, accédez à la documentation sur les modèles ARM.
- Pour découvrir les déploiements au niveau de l’abonnement, accédez aux Déploiements d’abonnements avec des modèles 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.