Effet modify sur les définitions Azure Policy

L’effet modify permet d’ajouter, de mettre à jour ou de supprimer des propriétés ou des étiquettes sur un abonnement ou une ressource en phase de création ou de mise à jour. Un exemple courant consiste à mettre à jour les étiquettes des ressources telles que costCenter. Les ressources non conformes existantes peuvent être corrigées à l’aide d’une tâche de correction. Une même règle Modify peut avoir autant d’opérations que vous le souhaitez. Les affectations de stratégie dont l’effet est défini sur Modify nécessitent une identité managée pour effectuer une correction.

L’effet modify prend en charge les opérations suivantes :

  • Ajouter, remplacer ou supprimer des étiquettes. Pour les étiquettes, mode doit être défini sur indexed dans la stratégie Modify, sauf si la ressource cible est un groupe de ressources.
  • Ajouter ou remplacer la valeur du type d’identité managée (identity.type) des machines virtuelles et des Virtual Machine Scale Sets. Vous ne pouvez modifier identity.type que pour les machines virtuelles ou les groupes de machines virtuelles identiques.
  • Ajouter ou remplacer les valeurs de certains alias.
    • Utilisez Get-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' } dans Azure PowerShell version 4.6.0 ou ultérieure pour obtenir la liste des alias qui peuvent être utilisés avec modify.

Important

Si vous gérez des balises, il est recommandé d’utiliser Modify plutôt qu’Append, car Modify fournit plus de types d’opérations, ainsi que la possibilité de corriger les ressources existantes. Toutefois, Append est recommandé si vous n’êtes pas en mesure de créer une identité managée ou si Modify ne prend pas encore en charge l’alias de la propriété de ressource.

Évaluation Modify

L’évaluation Modify a lieu avant que la requête ne soit traitée par un fournisseur de ressources lors de la création ou de la mise à jour d’une ressource. Les opérations modify sont appliquées au contenu de la requête lorsque la condition if de la règle de stratégie est remplie. Chaque opération modify peut spécifier une condition qui détermine le moment où elle est appliquée. Les opérations avec des évaluations de condition false sont ignorées.

Lorsqu’un alias est spécifié, des vérifications supplémentaires sont effectuées pour s’assurer que l’opération modify ne modifie pas le contenu de la requête d’une manière qui conduirait le fournisseur de ressources à le rejeter :

  • La propriété à laquelle l’alias est mappé est marquée Modifiable dans la version d’API de la requête.
  • Le type de jeton dans l’opération modify correspond au type de jeton attendu pour la propriété dans la version d’API de la requête.

Si l’une de ces vérifications échoue, l’évaluation de la stratégie revient au conflictEffect spécifié.

Important

Il est recommandé que les définitions de Modify qui incluent des alias utilisent la propriété d'effet de conflitaudit pour éviter l'échec des requêtes utilisant des versions d'API où la propriété mappée n'est pas « modifiable ». Si le même alias se comporte différemment entre les versions d’API, des opérations modify conditionnelles peuvent être utilisées pour déterminer l’opération modify utilisée pour chaque version d’API.

Lorsqu’une définition de stratégie utilisant l’effet modify est exécutée dans le cadre d’un cycle d’évaluation, elle n’apporte pas de modifications aux ressources qui existent déjà. Au lieu de cela, elle marque comme non conforme toute ressource qui répond à la condition if.

Propriétés de Modify

La propriété details de l’effet modify comporte toutes les sous-propriétés qui définissent les autorisations nécessaires à la correction, ainsi que les operations utilisées pour ajouter, mettre à jour ou supprimer des valeurs d’étiquette.

  • roleDefinitionIds (requis)
    • Cette propriété doit inclure un tableau de chaînes qui correspondent aux ID de rôle de contrôle de l’accès en fonction du rôle accessibles par l’abonnement. Pour plus d’informations, consultez Correction - Configurer une définition de stratégie.
    • Le rôle défini doit inclure toutes les opérations accordées au rôle Contributeur.
  • conflictEffect (facultatif)
    • Détermine la définition de stratégie qui prévaut si plusieurs définitions de stratégie modifient la même propriété ou lorsque l’opération modify ne fonctionne pas sur l’alias spécifié.
      • Pour les ressources nouvelles ou mises à jour, la définition de stratégie avec deny est prioritaire. Les définitions de stratégie avec audit ignorent toutes les operations. Si plusieurs définitions de stratégie ont l’effet deny, la demande est refusée pour raison de conflit. Si toutes les définitions de stratégie sont indiquées audit, aucune des operations des définitions de stratégie en conflit n’est traitée.
      • Pour les ressources existantes, si plusieurs définitions de stratégie ont l’effet deny, l’état de conformité est Conflit. Si au plus une définition de stratégie a l’effet deny, chaque attribution retourne l’état de conformité Non conforme.
    • Valeurs disponibles : audit, deny, disabled.
    • La valeur par défaut est deny.
  • operations (requis)
    • Tableau de toutes les opérations d’étiquette à effectuer sur les ressources correspondantes.
    • Propriétés :
      • operation (requis)
        • Définit l’action à effectuer sur une ressource correspondante. Les options sont les suivantes : addOrReplace, Add, Remove. L’option Add a le même comportement que l’effet append.
      • field (requis)
        • Étiquette à ajouter, remplacer ou supprimer. Les noms d’étiquette doivent respecter la même convention de nommage que les autres champs.
      • value (facultatif)
        • Valeur à affecter à l’étiquette.
        • Cette propriété est obligatoire si operation correspond à addOrReplace ou à Add.
      • condition (facultatif)
        • Chaîne contenant une expression de langage Azure Policy avec fonctions de stratégie qui prend la valeur true ou false.
        • Ne prend pas en charge les fonctions de stratégie suivantes : field(), resourceGroup() et subscription().

Opérations Modify

Le tableau de propriétés operations permet de modifier plusieurs étiquettes de différentes façons à partir d’une même définition de stratégie. Chaque opération est constituée des propriétés operation, field et value. La propriété operation détermine ce que fait la tâche de correction aux étiquettes, field détermine l’étiquette modifiée, et value définit le nouveau paramétrage de l’étiquette. L’exemple suivant effectue les modifications de balises suivantes :

  • Définit la balise environment sur « Test », même si elle existe déjà avec une autre valeur.
  • Supprime l’étiquette TempResource.
  • Définit l’étiquette Dept sur le paramètre de stratégie DeptName configuré pour l’attribution de stratégie.
"details": {
  ...
  "operations": [
    {
      "operation": "addOrReplace",
      "field": "tags['environment']",
      "value": "Test"
    },
    {
      "operation": "Remove",
      "field": "tags['TempResource']",
    },
    {
      "operation": "addOrReplace",
      "field": "tags['Dept']",
      "value": "[parameters('DeptName')]"
    }
  ]
}

La propriété operation propose les options suivantes :

Operation Description
addOrReplace Ajoute la propriété/l’étiquette et la valeur définies à la ressource, même si la propriété/l’étiquette a déjà une autre valeur.
add Ajoute la propriété/l’étiquette et la valeur définies à la ressource.
remove Supprime la propriété/l’étiquette définie de la ressource.

Exemples Modify

Exemple 1 : Ajoutez l’étiquette environment et remplacez les étiquettes environment existantes par « Test » :

"then": {
  "effect": "modify",
  "details": {
    "roleDefinitionIds": [
      "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
    ],
    "operations": [
      {
        "operation": "addOrReplace",
        "field": "tags['environment']",
        "value": "Test"
      }
    ]
  }
}

Exemple 2 : Supprimez l’étiquette env et ajoutez l’étiquette environment, ou remplacez les étiquettes environment existantes par une valeur paramétrable :

"then": {
  "effect": "modify",
  "details": {
    "roleDefinitionIds": [
      "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
    ],
    "conflictEffect": "deny",
    "operations": [
      {
        "operation": "Remove",
        "field": "tags['env']"
      },
      {
        "operation": "addOrReplace",
        "field": "tags['environment']",
        "value": "[parameters('tagValue')]"
      }
    ]
  }
}

Exemple 3 : vérifiez qu’aucun compte de stockage n’empêche l’accès public aux blobs. L’opération modify est appliquée uniquement lors de l’évaluation des requêtes avec une version d’API supérieure ou égale à 2019-04-01 :

"then": {
  "effect": "modify",
  "details": {
    "roleDefinitionIds": [
      "/providers/microsoft.authorization/roleDefinitions/17d1049b-9a84-46fb-8f53-869881c3d3ab"
    ],
    "conflictEffect": "audit",
    "operations": [
      {
        "condition": "[greaterOrEquals(requestContext().apiVersion, '2019-04-01')]",
        "operation": "addOrReplace",
        "field": "Microsoft.Storage/storageAccounts/allowBlobPublicAccess",
        "value": false
      }
    ]
  }
}

Étapes suivantes