Corriger les ressources non conformes avec Azure Policy
Article
Les ressources qui ne sont pas conformes à des stratégies avec des effets deployIfNotExists ou modify peuvent être placées dans un état conforme par le biais d’une correction. La correction s’effectue via des tâches de correction qui déploient le modèle deployIfNotExists ou les opérations modify de la stratégie attribuée sur vos ressources et abonnements existants, que cette attribution s’adresse à un groupe d’administration, à un abonnement, à un groupe de ressources ou à une ressource individuelle. Cet article explique les étapes nécessaires pour comprendre et exécuter des corrections avec Azure Policy.
Fonctionnement du contrôle d’accès de correction
Quand Azure Policy démarre le déploiement d’un modèle lors de l’évaluation des stratégies deployIfNotExists ou modifie une ressource lors de l’évaluation des stratégies modify, il le fait en utilisant une identité managée associée à l’affectation de stratégie. Les attributions de stratégie utilisent des identités managées pour l’autorisation des ressources Azure. Vous pouvez utiliser une identité managée affectée par le système créée par le service de stratégie ou une identité affectée par l’utilisateur fournie par l’utilisateur. L’identité managée doit se voir attribuer le rôle minimal de contrôle d’accès en fonction du rôle Azure (Azure RBAC) requis pour corriger les ressources. S’il manque des rôles à l’identité managée, une erreur est affichée dans le portail durant l’affectation de la stratégie ou d’une initiative. Quand vous utilisez le portail, une fois l’affectation lancée, Azure Policy accorde automatiquement à l’identité managée les rôles listés. Quand vous utilisez un Kit de développement logiciel (SDK) Azure, les rôles doivent être accordés manuellement à l’identité managée. La localisation de l’identité managée n’affecte pas son fonctionnement avec Azure Policy.
Note
La modification d’une définition de stratégie ne met pas automatiquement à jour l’attribution ou l’identité managée associée.
La sécurité des corrections peut être configurée en procédant comme suit :
En tant que prérequis, la définition de stratégie doit définir les rôles dont deployIfNotExists et modify ont besoin pour déployer correctement le contenu du modèle inclus. Aucune action n’est requise pour une définition de stratégie intégrée, car ces rôles sont préremplis. Pour une définition de stratégie personnalisée, sous la propriété details, ajoutez une propriété roleDefinitionIds. Il s’agit d’un tableau de chaînes qui correspondent à des rôles dans votre environnement. Pour obtenir un exemple complet, consultez deployIfNotExists ou modify.
La propriété roleDefinitionIds utilise l’identificateur de ressource complet et ne prend pas le roleName court du rôle. Pour obtenir l’ID du rôle Contributeur dans votre environnement, utilisez le code Azure CLI suivant :
Azure CLI
az role definition list --name"Contributor"
Important
Les autorisations doivent être limitées au plus petit ensemble possible lors de la définition de roleDefinitionIds dans une définition de stratégie ou de l’affectation manuelle d’autorisations à une identité managée. Pour d’autres bonnes pratiques, consultez les recommandations relatives aux identités managées.
Configurer l’identité managée
Chaque affectation Azure Policy peut être associée à une seule identité managée. Toutefois, l’identité managée peut être affectée à plusieurs rôles. La configuration se produit en deux étapes : créez d’abord une identité managée affectée par le système ou affectée par l’utilisateur, puis accordez-lui les rôles nécessaires.
Note
Lors de la création d’une identité managée via le portail, les rôles sont accordés automatiquement à l’identité managée. Si roleDefinitionIds est modifié ultérieurement dans la définition de stratégie, les nouvelles autorisations doivent être accordées manuellement, même dans le portail.
Quand vous créez une affectation à l’aide du portail, Azure Policy peut générer une identité managée affectée par le système et lui accorder les rôles définis dans le roleDefinitionIds de la définition de stratégie. Vous pouvez également spécifier une identité managée affectée par l’utilisateur qui reçoit la même attribution de rôle.
Pour définir une identité managée affectée par le système dans le portail :
Sous l’onglet Correction de la vue Créer/modifier une affectation, sous Types d’identités managées, vérifiez que Identité managée affectée par le système est sélectionné.
Spécifiez l’emplacement où l’identité managée doit être placée.
N’attribuez pas d’étendue pour l’identité managée affectée par le système, car l’étendue est héritée de l’étendue d’affectation.
Pour définir une identité managée affectée par l’utilisateur dans le portail :
Sous l’onglet Correction de la vue Créer/modifier une affectation, sous Types d’identités managées, vérifiez que Identité managée affectée par l’utilisateur est sélectionné.
Spécifiez l’étendue dans laquelle l’identité managée est hébergée. Il n’est pas nécessaire que l’étendue de l’identité managée soit équivalente à l’étendue de l’affectation, mais elle doit être dans le même locataire.
Sous Identités affectées par l’utilisateur existantes, sélectionnez l’identité managée.
Pour créer une identité pendant l’affectation de la stratégie, vous devez définir Localisation et utiliser Identité.
L’exemple suivant obtient la définition de la stratégie intégrée Déployer le chiffrement transparent des données sur les bases de données SQL, définit le groupe de ressources cible, puis crée l’affectation avec une identité managée affectée par le système.
Azure PowerShell
# Login first with Connect-AzAccount if not using Cloud Shell# Get the built-in "Deploy SQL DB transparent data encryption" policy definition$policyDef = Get-AzPolicyDefinition -Id'/providers/Microsoft.Authorization/policyDefinitions/86a912f6-9a06-4e26-b447-11b16ba8659f'# Get the reference to the resource group$resourceGroup = Get-AzResourceGroup -Name'MyResourceGroup'# Create the assignment using the -Location and -Identity properties$assignment = New-AzPolicyAssignment -Name'sqlDbTDE' -DisplayName'Deploy SQL DB transparent data encryption' -Scope$resourceGroup.ResourceId -PolicyDefinition$policyDef -Location'westus' -IdentityType"SystemAssigned"
L’exemple suivant obtient la définition de la stratégie intégrée Déployer Transparent Data Encryption SQL DB, définit le groupe de ressources cible, puis crée l’affectation avec une identité managée affectée par l’utilisateur.
Azure PowerShell
# Login first with Connect-AzAccount if not using Cloud Shell# Get the built-in "Deploy SQL DB transparent data encryption" policy definition$policyDef = Get-AzPolicyDefinition -Id'/providers/Microsoft.Authorization/policyDefinitions/86a912f6-9a06-4e26-b447-11b16ba8659f'# Get the reference to the resource group$resourceGroup = Get-AzResourceGroup -Name'MyResourceGroup'# Get the existing user assigned managed identity ID$userassignedidentity = Get-AzUserAssignedIdentity -ResourceGroupName$rgname -Name$userassignedidentityname$userassignedidentityid = $userassignedidentity.Id
# Create the assignment using the -Location and -Identity properties$assignment = New-AzPolicyAssignment -Name'sqlDbTDE' -DisplayName'Deploy SQL DB transparent data encryption' -Scope$resourceGroup.ResourceId -PolicyDefinition$policyDef -Location'westus' -IdentityType"UserAssigned" -IdentityId$userassignedidentityid
La $assignment variable contient à présent l’ID du principal de l’identité managée, ainsi que les valeurs standard retournées au moment de la création d’une affectation de stratégie. Vous pouvez y accéder via $assignment.Identity.PrincipalId pour les identités managées affectées par le système et $assignment.Identity.UserAssignedIdentities[$userassignedidentityid].PrincipalId via pour les identités managées affectées par l’utilisateur.
Pour créer une identité pendant l’affectation de la stratégie, utilisez les commandes az policy assignment create avec les paramètres --location, --mi-system-assigned, --mi-user-assigned et --identity-scope selon que l’identité managée doit être affectée par le système ou par l’utilisateur.
Pour ajouter une identité affectée par le système ou une identité affectée par l’utilisateur à une attribution de stratégie, suivez l’exemple de commandes az policy assignment identity assign.
Accorder des autorisations à l’identité managée via des rôles définis
Important
Si l’identité managée ne dispose pas des autorisations nécessaires pour exécuter la tâche de correction requise, les autorisations ne seront accordées automatiquement que via le portail. Vous pouvez ignorer cette étape si vous créez une identité managée via le portail.
Pour toutes les autres méthodes, l’identité managée de l’affectation doit être accordée manuellement à l’aide de l’ajout de rôles. Sinon, le déploiement de correction échouera.
Exemples de scénarios nécessitant des autorisations manuelles :
Si l’affectation est créée via un kit de développement logiciel Azure (SDK)
Si une ressource modifiée par deployIfNotExists ou modify est en dehors de l’étendue de l’affectation de stratégie
Si le modèle accède à des propriétés sur des ressources en dehors de l’étendue de l’affectation de stratégie
À l’aide du portail, vous pouvez accorder les rôles définis à l’identité managée d’une affectation de deux façons : en utilisant la gestion des identités et des accès ou en modifiant l’affectation de la stratégie ou d’une initiative et en sélectionnant Enregistrer.
Pour ajouter un rôle à l’identité managée de l’affectation, effectuez les étapes suivantes :
Lancez le service Azure Policy dans le portail Azure en sélectionnant Tous les services, puis en recherchant et en cliquant sur Stratégie.
Sélectionnez Affectations du côté gauche de la page Azure Policy.
Recherchez l’affectation qui a une identité managée, puis sélectionnez le nom.
Rechercher la propriété ID de l’affectation dans la page de modification. L’ID d’affectation ressemble à celui de l’exemple suivant :
Le nom de l’identité managée est la dernière partie de l’ID de ressource d’affectation, c’est-à-dire 2802056bfc094dfb95d4d7a5 dans cet exemple. Copiez cette partie de l’ID de ressource d’affectation.
Accédez à la ressource ou au conteneur de ressources parent (groupe de ressources, abonnement, groupe d’administration) auquel la définition de rôle doit être ajoutée manuellement.
Sélectionnez le lien Contrôle d’accès (IAM) dans la page des ressources, puis sélectionnez + Ajouter une attribution de rôle en haut de la page du contrôle d’accès.
Sélectionnez le rôle approprié qui correspond à un roleDefinitionIds dans la définition de stratégie. Laissez Attribuer l’accès à défini sur la valeur par défaut, à savoir « Utilisateur, groupe ou application ». Dans la zone Sélectionner, collez ou tapez la partie de l’ID de ressource d’affectation trouvée plus haut. Une fois la recherche terminée, sélectionnez l’objet portant le même nom pour sélectionner l’ID, puis sélectionnez Enregistrer.
La nouvelle identité managée doit effectuer la réplication par le biais de Microsoft Entra ID pour pouvoir obtenir les rôles nécessaires. Une fois la réplication terminée, l’exemple suivant parcourt la définition de stratégie dans $policyDef à la recherche de roleDefinitionIds et utilise New-AzRoleAssignment pour accorder les rôles à la nouvelle identité managée.
Plus précisément, le premier exemple montre comment accorder des rôles à l’étendue de la stratégie. Le deuxième exemple montre comment accorder des rôles à l’étendue de l’initiative (ensemble de stratégies).
Azure PowerShell
#################################################### Grant roles to managed identity at policy scope ##################################################### Use the $policyDef to get to the roleDefinitionIds array$roleDefinitionIds = $policyDef.Properties.policyRule.then.details.roleDefinitionIds
if ($roleDefinitionIds.Count -gt0)
{
$roleDefinitionIds | ForEach-Object {
$roleDefId = $_.Split("/") | Select-Object -Last1New-AzRoleAssignment -Scope$resourceGroup.ResourceId -ObjectId$assignment.Identity.PrincipalId
-RoleDefinitionId$roleDefId
}
}
######################################################## Grant roles to managed identity at initiative scope #########################################################If the policy had no managed identity in its logic, then no impact. If there is a managed identity
used for enforcement, replicate it on the new assignment.
$getNewInitiativeAssignment = Get-AzPolicyAssignment -Name$newInitiativeDefinition.Name
#Create an array to store role definition's IDs used by policies inside the initiative.$InitiativeRoleDefinitionIds = @();
#Loop through the policy definitions inside the initiative and gather their role definition IDsforeach ($policyDefinitionIdInsideInitiativein$InitiativeDefinition.Properties.PolicyDefinitions.policyDefinitionId) {
$policyDef = Get-AzPolicyDefinition -Id$policyDefinitionIdInsideInitiative$roleDefinitionIds = $policyDef.Properties.PolicyRule.then.details.roleDefinitionIds
$InitiativeRoleDefinitionIds += $roleDefinitionIds
}
#Create the role assignments used by the initiative assignment at the subscription scope.if ($InitiativeRoleDefinitionIds.Count -gt0) {
$InitiativeRoleDefinitionIds | Sort-Object -Unique | ForEach-Object {
$roleDefId = $_.Split("/") | Select-Object -Last1New-AzRoleAssignment -Scope"/subscriptions/$($subscription)" -ObjectId$getNewInitiativeAssignment.Identity.PrincipalId
-RoleDefinitionId$roleDefId
}
}
La nouvelle identité managée doit effectuer la réplication par le biais de Microsoft Entra ID pour pouvoir obtenir les rôles nécessaires. Une fois la réplication terminée, les rôles spécifiés dans le roleDefinitionIds de la définition de stratégie doivent être accordés à l’identité managée.
Accédez aux rôles spécifiés dans la définition de stratégie à l’aide de la commande az policy definition show, puis effectuez une itération sur chaque roleDefinitionIds pour créer l’attribution de rôle à l’aide de la commande az role assignment create.
Lancez le service Azure Policy dans le portail Azure en sélectionnant Tous les services, puis en recherchant et en sélectionnant Policy.
Étape 1 : Lancer la création d’une tâche de correction
Il existe trois façons de créer une tâche de correction via le portail.
Option 1 : Créer une tâche de correction à partir de la page Correction
Sélectionnez Correction sur le côté gauche de la page Azure Policy.
Toutes les affectations de stratégie deployIfNotExists et modify sont affichées sous l’onglet Stratégies à corriger. Sélectionnez-en une avec des ressources non conformes pour ouvrir la page Nouvelle tâche de correction.
Option 3 : Créer une tâche de correction pendant l’attribution de stratégie
Si la définition de stratégie ou d’initiative à affecter a un effet deployIfNotExists ou modify, l’onglet Correction de l’Assistant offre une option Créer une tâche de correction, ce qui crée une tâche de correction en même temps que l’attribution de stratégie.
Note
Il s’agit de l’approche la plus rationalisée pour la création d’une tâche de correction et elle est prise en charge pour les stratégies affectées sur un abonnement. Pour les stratégies affectées sur un groupe d’administration, les tâches de correction doivent être créées à l’aide de l’option 1 ou de l’option 2 après que l’évaluation a déterminé la conformité des ressources.
À partir de l’Assistant Affectation dans le portail, accédez à l’onglet Correction. Activez la case à cocher pour créer une tâche de correction.
Si la tâche de correction est lancée à partir d’une affectation d’initiative, sélectionnez la stratégie à corriger dans la liste déroulante.
Configurez l’identité managée et renseignez le reste de l’Assistant. La tâche de correction est créée lors de la création de l’affectation.
Étape 2 : Spécifier les détails de la tâche de correction
Cette étape s’applique uniquement lors de l’utilisation de l’option 1 ou de l’option 2 pour lancer la création d’une tâche de correction.
Si la tâche de correction est lancée à partir d’une affectation d’initiative, sélectionnez la stratégie à corriger dans la liste déroulante. Une stratégie deployIfNotExists ou modify peut être corrigée par le biais d’une seule tâche de correction à la fois.
Modifiez éventuellement les paramètres de correction dans la page. Pour plus d’informations sur les contrôles de chaque paramètre, consultez l’article Structure des tâches de correction.
Dans la même page, filtrez les ressources à corriger à l’aide des points de suspension de l’option Étendue pour sélectionner les ressources enfants à partir de l’endroit où la stratégie est affectée (y compris jusqu’aux objets de ressource individuels). En outre, utilisez la liste déroulante Emplacements pour filtrer davantage les ressources.
Lancez la tâche de correction une fois les ressources filtrées en sélectionnant Corriger. La page de conformité à la stratégie s’ouvre sur l’onglet Tâches de correction, qui affiche l’état de la progression des tâches. Les déploiements créés par la tâche de correction commencent immédiatement.
Étape 3 : Suivre la progression de la tâche de correction
Accédez à l’onglet Tâches de correction dans la page Correction. Sélectionnez une tâche de correction pour afficher des détails sur le filtrage utilisé, l’état actuel et une liste de ressources corrigées.
Dans la page Tâche de correction, cliquez avec le bouton droit sur une ressource pour afficher le déploiement de la tâche de correction ou la ressource. À la fin de la ligne, sélectionnez Événements associés pour voir des détails tels qu’un message d’erreur.
Les ressources déployées par le biais d’une tâche de correction sont ajoutées à l’onglet Ressources déployées sur la page des détails d’affectation de stratégie.
Pour créer un tâche de correction avec Azure PowerShell, utilisez les commandes Start-AzPolicyRemediation. Remplacez {subscriptionId} par votre ID d’abonnement et {myAssignmentId} par votre ID d’affectation de stratégie deployIfNotExists ou modify.
Azure PowerShell
# Login first with Connect-AzAccount if not using Cloud Shell# Create a remediation for a specific assignmentStart-AzPolicyRemediation -Name'myRemediation' -PolicyAssignmentId'/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyAssignments/{myAssignmentId}'
Vous pouvez également choisir d’ajuster les paramètres de correction par le biais de ces paramètres facultatifs :
-FailureThreshold - Utilisé pour spécifier si la tâche de correction doit échouer si le pourcentage d’échecs dépasse le seuil donné. Fourni sous la forme d’un nombre compris entre 0 et 100. Par défaut, le seuil d’échec est de 100 %.
-ResourceCount - Détermine le nombre de ressources non conformes à corriger dans une tâche de correction donnée. La valeur par défaut est 500 (limite précédente). Le nombre maximal de ressources est 50 000.
-ParallelDeploymentCount - Détermine le nombre de ressources à corriger en même temps. Les valeurs autorisées sont comprises entre 1 et 30 ressources à la fois. La valeur par défaut est 10.
Pour accéder à d’autres cmdlets et exemples de correction, consultez le module Az.PolicyInsights.
Pour créer un tâche de correction avec Azure CLI, utilisez les commandes az policy remediation. Remplacez {subscriptionId} par votre ID d’abonnement et {myAssignmentId} par votre ID d’affectation de stratégie deployIfNotExists ou modify.
Azure CLI
# Login first with az login if not using Cloud Shell# Create a remediation for a specific assignmentaz policy remediation create --name myRemediation --policy-assignment'/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyAssignments/{myAssignmentId}'
Pour accéder à d’autres exemples et commandes de correction, consultez les commandes de correction de stratégie az.