Modèle Azure Policy : opérateurs logiques

Une définition de stratégie peut contenir plusieurs instructions conditionnelles. Vous aurez peut-être besoin que chaque instruction ait la valeur true ou que certaines d’entre elles aient la valeur true. Pour répondre à ces besoins, le langage comprend des opérateurs logiquesnot, allOf et anyOf. Ils sont facultatifs et peuvent être imbriqués pour créer des scénarios complexes.

Exemple 1 : Un opérateur logique

Cette définition de stratégie évalue les comptes Azure Cosmos DB pour voir si les basculements automatiques et les emplacements à plusieurs écritures sont configurés. Si ce n’est pas le cas, l’audit crée une entrée de journal lorsque la ressource non conforme est créée ou mise à jour.

{
  "properties": {
    "mode": "all",
    "displayName": "Audit Automatic Failover for CosmosDB accounts",
    "description": "This policy audits Automatic Failover for CosmosDB accounts",
    "policyRule": {
      "if": {
        "allOf": [{
            "field": "type",
            "equals": "Microsoft.DocumentDB/databaseAccounts"
          },
          {
            "field": "Microsoft.DocumentDB/databaseAccounts/enableAutomaticFailover",
            "equals": "false"
          },
          {
            "field": "Microsoft.DocumentDB/databaseAccounts/enableMultipleWriteLocations",
            "equals": "false"
          }
        ]
      },
      "then": {
        "effect": "audit"
      }
    },
    "parameters": {},
    "metadata": {}
  }
}

Exemple 1 : Explication

"policyRule": {
  "if": {
    "allOf": [{
        "field": "type",
        "equals": "Microsoft.DocumentDB/databaseAccounts"
      },
      {
        "field": "Microsoft.DocumentDB/databaseAccounts/enableAutomaticFailover",
        "equals": "false"
      },
      {
        "field": "Microsoft.DocumentDB/databaseAccounts/enableMultipleWriteLocations",
        "equals": "false"
      }
    ]
  },
  "then": {

Le bloc policyRule.if utilise un seul allOf pour garantir que les trois conditions sont true. C’est uniquement lorsque toutes ces conditions ont la valeur true que l’effet audit est déclenché.

Exemple 2 : Plusieurs opérateurs logiques

Cette définition de stratégie évalue les ressources à la recherche d’un modèle de nommage. Si une ressource ne correspond pas, elle est refusée.

{
    "properties": {
        "displayName": "Match multiple name patterns.",
        "description": "Allows one of multiple naming patterns for resources.",
        "mode": "Indexed",
        "policyRule": {
            "if": {
                "allOf": [{
                        "not": {
                            "field": "name",
                            "match": "contoso??????"
                        }
                    },
                    {
                        "not": {
                            "field": "name",
                            "match": "contoso-???-##"
                        }
                    }
                ]
            },
            "then": {
                "effect": "deny"
            }
        }
    }
}

Exemple 2 : Explication

"if": {
    "allOf": [{
            "not": {
                "field": "name",
                "match": "contoso??????"
            }
        },
        {
            "not": {
                "field": "name",
                "match": "contoso-???-##"
            }
        }
    ]
},

Ce bloc policyRule.if comprend également un allOf, mais chacune des conditions est wrappée avec l’opérateur logique not. L’opérateur conditionnel à l’intérieur de l’opérateur logique not est évalué en premier, puis not est évalué afin de déterminer si la clause entière est true ou false. Si les deux opérateurs logiques not ont la valeur true, l’effet de stratégie est déclenché.

Exemple 3 : Combinaison d’opérateurs logiques

Cette définition de stratégie évalue les comptes Spring sur Azure pour déterminer si la trace n’est pas activée ou si elle n’est pas dans un état de réussite.

{
    "properties": {
        "displayName": "Audit Azure Spring Cloud instances where distributed tracing is not enabled",
        "description": "Distributed tracing tools in Azure Spring Cloud allow debugging and monitoring the complex interconnections between microservices in an application. Distributed tracing tools should be enabled and in a healthy state.",
        "mode": "Indexed",
        "policyRule": {
            "if": {
                "allOf": [{
                        "field": "type",
                        "equals": "Microsoft.AppPlatform/Spring"
                    },
                    {
                        "anyOf": [{
                                "field": "Microsoft.AppPlatform/Spring/trace.enabled",
                                "notEquals": "true"
                            },
                            {
                                "field": "Microsoft.AppPlatform/Spring/trace.state",
                                "notEquals": "Succeeded"
                            }
                        ]
                    }
                ]
            },
            "then": {
                "effect": "audit"
            }
        }
    }
}

Exemple 3 : Explication

"policyRule": {
    "if": {
        "allOf": [{
                "field": "type",
                "equals": "Microsoft.AppPlatform/Spring"
            },
            {
                "anyOf": [{
                        "field": "Microsoft.AppPlatform/Spring/trace.enabled",
                        "notEquals": "true"
                    },
                    {
                        "field": "Microsoft.AppPlatform/Spring/trace.state",
                        "notEquals": "Succeeded"
                    }
                ]
            }
        ]
    },
    "then": {
        "effect": "audit"
    }
}

Ce bloc policyRule.if inclut les deux opérateurs logiques allOf et anyOf. L’opérateur logique anyOf prend la valeur true tant qu’une condition incluse a la valeur true. Étant donné que le type se trouve au cœur de l’opérateur allOf, il doit toujours prendre la valeur true. Si le type et l’une des conditions de l’opérateur anyOf a la valeur true, l’effet de stratégie est déclenché.

Étapes suivantes