Corriger les ressources non conformes avec Azure PolicyRemediate non-compliant resources with Azure Policy

Les ressources qui ne sont pas conformes à une stratégie deployIfNotExists ou modify peuvent être placées dans un état conforme par le biais d’une correction.Resources that are non-compliant to a deployIfNotExists or modify policy can be put into a compliant state through Remediation. Pour effectuer la correction, vous indiquez à Azure Policy d’exécuter l’effet deployIfNotExists ou l’étiquette operations de la stratégie affectée sur vos ressources existantes.Remediation is accomplished by instructing Azure Policy to run the deployIfNotExists effect or the tag operations of the assigned policy on your existing resources. Cet article explique les étapes nécessaires pour comprendre et exécuter des corrections avec Azure Policy.This article shows the steps needed to understand and accomplish remediation with Azure Policy.

Fonctionnement de la sécurité de la correctionHow remediation security works

Lorsque le logiciel Azure Policy exécute le modèle dans la définition de stratégie deployIfNotExists, il utilise une identité managée.When Azure Policy runs the template in the deployIfNotExists policy definition, it does so using a managed identity. Azure Policy crée automatiquement une identité managée pour chaque affectation, mais doit obtenir des informations sur les rôles à accorder à l’identité managée.Azure Policy creates a managed identity for each assignment, but must have details about what roles to grant the managed identity. S’il manque des rôles à l’identité managée, cette erreur est affichée durant l’affectation de la stratégie ou d’une initiative.If the managed identity is missing roles, this error is displayed during the assignment of the policy or an initiative. Lorsque vous utilisez le portail, une fois l’affectation lancée, Azure Policy accorde automatiquement à l’identité managée les rôles répertoriés.When using the portal, Azure Policy will automatically grant the managed identity the listed roles once assignment is started.

Identité managée : rôle manquant

Important

Si une ressource modifiée par deployIfNotExists ou modify est en dehors de l’étendue de l’affectation de stratégie ou que le modèle accède à des propriétés sur des ressources en dehors de l’étendue de l’affectation de stratégie, l’identité managée de l’affectation doit se voir manuellement accorder l’accès, sinon le déploiement de la correction échoue.If a resource modified by deployIfNotExists or modify is outside the scope of the policy assignment or the template accesses properties on resources outside the scope of the policy assignment, the assignment's managed identity must be manually granted access or the remediation deployment will fail.

Configurer une définition de stratégieConfigure policy definition

La première étape consiste à définir les rôles dont deployIfNotExists ou modify ont besoin dans la définition de stratégie pour déployer le contenu du modèle inclus.The first step is to define the roles that deployIfNotExists and modify needs in the policy definition to successfully deploy the content of your included template. Sous la propriété details, ajoutez une propriété roleDefinitionIds.Under the details property, add a roleDefinitionIds property. Il s’agit d’un tableau de chaînes qui correspondent à des rôles dans votre environnement.This property is an array of strings that match roles in your environment. Pour obtenir un exemple complet, consultez l’exemple deployIfNotExists ou les exemples modify.For a full example, see the deployIfNotExists example or the modify examples.

"details": {
    ...
    "roleDefinitionIds": [
        "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
        "/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
    ]
}

La propriété roleDefinitionIds utilise l’identificateur de ressource complet et n’accepte pas le roleName court du rôle.The roleDefinitionIds property uses the full resource identifier and doesn't take the short roleName of the role. Pour obtenir l’ID du rôle « Contributeur » dans votre environnement, utilisez le code suivant :To get the ID for the 'Contributor' role in your environment, use the following code:

az role definition list --name 'Contributor'

Configurer manuellement l’identité managéeManually configure the managed identity

Lorsque vous créez une affectation à l’aide du portail, Azure Policy génère l’identité managée et lui accorde les rôles définis dans roleDefinitionIds.When creating an assignment using the portal, Azure Policy both generates the managed identity and grants it the roles defined in roleDefinitionIds. Dans les conditions suivantes, les étapes permettant de créer l’identité managée et de lui accorder des autorisations doivent être effectuées manuellement :In the following conditions, steps to create the managed identity and assign it permissions must be done manually:

  • Durant l’utilisation du SDK (par exemple, Azure PowerShell)While using the SDK (such as Azure PowerShell)
  • Quand une ressource en dehors de l’étendue de l’affectation est modifiée par le modèleWhen a resource outside the assignment scope is modified by the template
  • Quand une ressource en dehors de l’étendue de l’affectation est lue par le modèleWhen a resource outside the assignment scope is read by the template

Notes

Azure PowerShell et .NET sont les seuls SDK qui prennent en charge cette fonctionnalité.Azure PowerShell and .NET are the only SDKs that currently support this capability.

Créer une identité managée avec PowerShellCreate managed identity with PowerShell

Pour créer une identité managée pendant l’affectation de la stratégie, vous devez définir Location et utiliser AssignIdentity.To create a managed identity during the assignment of the policy, Location must be defined and AssignIdentity used. 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.The following example gets the definition of the built-in policy Deploy SQL DB transparent data encryption, sets the target resource group, and then creates the assignment.

# 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 -AssignIdentity properties
$assignment = New-AzPolicyAssignment -Name 'sqlDbTDE' -DisplayName 'Deploy SQL DB transparent data encryption' -Scope $resourceGroup.ResourceId -PolicyDefinition $policyDef -Location 'westus' -AssignIdentity

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.The $assignment variable now contains the principal ID of the managed identity along with the standard values returned when creating a policy assignment. Elle est accessible via $assignment.Identity.PrincipalId.It can be accessed through $assignment.Identity.PrincipalId.

Accorder des rôles définis avec PowerShellGrant defined roles with PowerShell

La nouvelle identité managée doit effectuer la réplication par le biais d’Azure Active Directory pour pouvoir obtenir les rôles nécessaires.The new managed identity must complete replication through Azure Active Directory before it can be granted the needed roles. Une fois la réplication terminée, l’exemple suivant parcourt la définition de stratégie dans $policyDef à la recherche des ID roleDefinitionIds et utilise New-AzRoleAssignment pour accorder les rôles à la nouvelle identité managée.Once replication is complete, the following example iterates the policy definition in $policyDef for the roleDefinitionIds and uses New-AzRoleAssignment to grant the new managed identity the roles.

# Use the $policyDef to get to the roleDefinitionIds array
$roleDefinitionIds = $policyDef.Properties.policyRule.then.details.roleDefinitionIds

if ($roleDefinitionIds.Count -gt 0)
{
    $roleDefinitionIds | ForEach-Object {
        $roleDefId = $_.Split("/") | Select-Object -Last 1
        New-AzRoleAssignment -Scope $resourceGroup.ResourceId -ObjectId $assignment.Identity.PrincipalId -RoleDefinitionId $roleDefId
    }
}

Accorder des rôles définis par le biais du portailGrant defined roles through portal

À 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 cliquant sur Enregistrer.There are two ways to grant an assignment's managed identity the defined roles using the portal, by using Access control (IAM) or by editing the policy or initiative assignment and clicking Save.

Pour ajouter un rôle à l’identité managée de l’affectation, effectuez les étapes suivantes :To add a role to the assignment's managed identity, follow these steps:

  1. Lancez le service Azure Policy dans le portail Azure en cliquant sur Tous les services, puis en recherchant et en cliquant sur Stratégie.Launch the Azure Policy service in the Azure portal by clicking All services, then searching for and selecting Policy.

  2. Sélectionnez Affectations du côté gauche de la page Azure Policy.Select Assignments on the left side of the Azure Policy page.

  3. Recherchez l’affectation qui a une identité managée, puis cliquez sur le nom.Locate the assignment that has a managed identity and click on the name.

  4. Rechercher la propriété ID de l’affectation dans la page de modification.Find the Assignment ID property on the edit page. L’ID d’affectation est semblable à ceci :The assignment ID will be something like:

    /subscriptions/{subscriptionId}/resourceGroups/PolicyTarget/providers/Microsoft.Authorization/policyAssignments/2802056bfc094dfb95d4d7a5
    

    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.The name of the managed identity is the last portion of the assignment resource ID, which is 2802056bfc094dfb95d4d7a5 in this example. Copiez cette partie de l’ID de ressource d’affectation.Copy this portion of the assignment resource ID.

  5. 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.Navigate to the resource or the resources parent container (resource group, subscription, management group) that needs the role definition manually added.

  6. Cliquez sur le lien Contrôle d’accès (IAM) dans la page des ressources, puis cliquez sur + Ajouter une attribution de rôle en haut de la page du contrôle d’accès.Click the Access control (IAM) link in the resources page and click + Add role assignment at the top of the access control page.

  7. Sélectionnez le rôle approprié qui correspond à un roleDefinitionIds dans la définition de stratégie.Select the appropriate role that matches a roleDefinitionIds from the policy definition. Laissez Attribuer l’accès à sur la valeur par défaut « Utilisateur, groupe ou application Azure AD ».Leave Assign access to set to the default of 'Azure AD user, group, or application'. Dans la zone Sélectionner, collez ou tapez la partie de l’ID de ressource d’affectation trouvée plus haut.In the Select box, paste or type the portion of the assignment resource ID located earlier. Une fois la recherche terminée, cliquez sur l’objet portant le même nom pour sélectionner l’ID, puis cliquez sur Enregistrer.Once the search completes, click the object with the same name to select ID and click Save.

Créer une tâche de correctionCreate a remediation task

Créer une tâche de correction via le portailCreate a remediation task through portal

Durant l’évaluation, l’affectation de stratégie avec les effets deployIfNotExists ou modify détermine s’il existe des ressources non conformes.During evaluation, the policy assignment with deployIfNotExists or modify effects determines if there are non-compliant resources. Quand des ressources non conformes sont trouvées, les détails sont fournis dans la page Correction.When non-compliant resources are found, the details are provided on the Remediation page. Outre la liste des stratégies qui ont des ressources non conformes se trouve l’option permettant de déclencher une tâche de correction.Along with the list of policies that have non-compliant resources is the option to trigger a remediation task. Cette option crée un déploiement à partir du modèle deployIfNotExists ou des opérations modify.This option is what creates a deployment from the deployIfNotExists template or the modify operations.

Pour créer une tâche de correction, effectuez les étapes suivantes :To create a remediation task, follow these steps:

  1. Lancez le service Azure Policy dans le portail Azure en cliquant sur Tous les services, puis en recherchant et en cliquant sur Stratégie.Launch the Azure Policy service in the Azure portal by clicking All services, then searching for and selecting Policy.

    Rechercher Stratégie dans Tous les services

  2. Sélectionnez Correction sur le côté gauche de la page Azure Policy.Select Remediation on the left side of the Azure Policy page.

    Sélectionner une correction sur la page Azure Policy

  3. Toutes les affectations de stratégie deployIfNotExists ou modify ayant des ressources non conformes sont incluses sous l’onglet Stratégies à corriger et dans la table de données.All deployIfNotExists and modify policy assignments with non-compliant resources are included on the Policies to remediate tab and data table. Cliquez sur une stratégie ayant des ressources non conformes.Click on a policy with resources that are non-compliant. La page Nouvelle tâche de correction s’ouvre.The New remediation task page opens.

    Notes

    Pour ouvrir la page Tâche de correction, vous pouvez également rechercher la stratégie à partir de la page Conformité, cliquer dessus, puis cliquer sur le bouton Créer une tâche de correction.An alternate way to open the remediation task page is to find and click on the policy from the Compliance page, then click the Create Remediation Task button.

  4. Dans la page Nouvelle tâche de correction, filtrez les ressources à corriger à l’aide des points de suspension de la section É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).On the New remediation task page, filter the resources to remediate by using the Scope ellipses to pick child resources from where the policy is assigned (including down to the individual resource objects). En outre, utilisez la liste déroulante Emplacements pour filtrer davantage les ressources.Additionally, use the Locations drop-down to further filter the resources. Seules les ressources répertoriées dans la table sont corrigées.Only resources listed in the table will be remediated.

    Correction : sélectionner les ressources à corriger

  5. Lancez la tâche de correction une fois les ressources filtrées en cliquant sur Corriger.Begin the remediation task once the resources have been filtered by clicking Remediate. 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.The policy compliance page will open to the Remediation tasks tab to show the state of the tasks progress.

    Correction : progression des tâches de correction

  6. Cliquez sur la tâche de correction dans la page de conformité à la stratégie pour obtenir plus d’informations sur la progression.Click on the remediation task from the policy compliance page to get details about the progress. Le filtrage utilisé pour la tâche est affiché, ainsi qu’une liste des ressources en cours de correction.The filtering used for the task is shown along with a list of the resources being remediated.

  7. 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.From the remediation task page, right-click on a resource to view either the remediation task's deployment or the resource. À la fin de la ligne, cliquez sur Événements associés pour voir des détails tels qu’un message d’erreur.At the end of the row, click on Related events to see details such as an error message.

    Corriger : menu contextuel lié aux tâches réalisables pour une ressource

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 de conformité à la stratégie.Resources deployed through a remediation task are added to the Deployed Resources tab on the policy compliance page.

Créer une tâche de correction via Azure CLICreate a remediation task through Azure CLI

Pour créer un tâche de correction avec Azure CLI, utilisez les commandes az policy remediation.To create a remediation task with Azure CLI, use the az policy remediation commands. Remplacez {subscriptionId} par votre ID d’abonnement et {myAssignmentId} par l’ID d’affectation de stratégie deployIfNotExists ou modify.Replace {subscriptionId} with your subscription ID and {myAssignmentId} with your deployIfNotExists or modify policy assignment ID.

# Login first with az login if not using Cloud Shell

# Create a remediation for a specific assignment
az 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.For other remediation commands and examples, see the az policy remediation commands.

Créer une tâche de correction via Azure PowerShellCreate a remediation task through Azure PowerShell

Pour créer un tâche de correction avec Azure PowerShell, utilisez les commandes Start-AzPolicyRemediation.To create a remediation task with Azure PowerShell, use the Start-AzPolicyRemediation commands. Remplacez {subscriptionId} par votre ID d’abonnement et {myAssignmentId} par l’ID d’affectation de stratégie deployIfNotExists ou modify.Replace {subscriptionId} with your subscription ID and {myAssignmentId} with your deployIfNotExists or modify policy assignment ID.

# Login first with Connect-AzAccount if not using Cloud Shell

# Create a remediation for a specific assignment
Start-AzPolicyRemediation -Name 'myRemedation' -PolicyAssignmentId '/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyAssignments/{myAssignmentId}'

Pour accéder à d’autres cmdlets et exemples de correction, consultez le module Az.PolicyInsights.For other remediation cmdlets and examples, see the Az.PolicyInsights module.

Étapes suivantesNext steps