Azure Policy-patroon: logische operatorsAzure Policy pattern: logical operators

Een beleidsdefinitie kan verschillende voorwaardelijke instructies bevatten.A policy definition can contain several conditional statements. Mogelijk moeten alle instructies waar zijn of is dit slechts voor een aantal instructies vereist.You might need each statement to be true or only need some of them to be true. Ter ondersteuning van deze behoeften heeft de taal logische operators voor not, allOf en anyOf.To support these needs, the language has logical operators for not, allOf, and anyOf. Deze operators zijn optioneel en kunnen worden genest om complexe scenario's te maken.They're optional and can be nested to create complex scenarios.

Voorbeeld 1: Eén logische operatorSample 1: One logical operator

Deze beleidsdefinitie evalueert Azure Cosmos DB accounts om te zien of automatische failovers en meerdere schrijflocaties zijn geconfigureerd.This policy definition evaluates Azure Cosmos DB accounts to see whether automatic failovers and multiple write locations are configured. Wanneer dit niet het geval is, wordt de audit geactiveerd en wordt er een logboekvermelding gemaakt wanneer de niet-compatibele resource wordt gemaakt of bijgewerkt.When they aren't, the audit triggers and creates a log entry when the non-compliant resource is created or updated.

{
  "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": {}
  }
}

Voorbeeld 1: UitlegSample 1: Explanation

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

In het blok policyRule.if wordt één allOf gebruikt om ervoor te zorgen dat aan alle drie de voorwaarden wordt voldaan.The policyRule.if block uses a single allOf to ensure that all three conditions are true. Alleen wanneer aan al deze voorwaarden wordt voldaan, wordt het effect audit geactiveerd.Only when all of these conditions evaluate to true does the audit effect trigger.

Voorbeeld 2: Meerdere logische operatorsSample 2: Multiple logical operators

Deze beleidsdefinitie evalueert resources op een naamgevingspatroon.This policy definition evaluates resources for a naming pattern. Als een resource niet voldoet aan het patroon, wordt deze geweigerd met het effect deny.If a resource doesn't match, it's denied.

{
    "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"
            }
        }
    }
}

Voorbeeld 2: UitlegSample 2: Explanation

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

Het blok policyRule.if bevat ook één allOf, maar elke voorwaarde bevat ook de logische operator not.This policyRule.if block also includes a single allOf, but each condition is wrapped with the not logical operator. De voorwaarde binnen de logische operator not wordt eerst geëvalueerd en evalueert vervolgens de om niet te bepalen of de volledige component waar of onwaar is.The conditional inside the not logical operator evaluates first and then evaluates the not to determine whether the entire clause is true or false. Als beide logische operators not worden geëvalueerd als waar, wordt het beleidseffect geactiveerd.If both not logical operators evaluate to true, the policy effect triggers.

Voorbeeld 3: Logische operators combinerenSample 3: Combining logical operators

Met deze beleidsdefinitie wordt Spring op Azure-accounts geëvalueerd om te zien of de traceer niet is ingeschakeld of dat de traceer de status Geslaagd heeft.This policy definition evaluates Spring on Azure accounts to see whether either trace isn't enabled or if trace isn't in a successful state.

{
    "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"
            }
        }
    }
}

Voorbeeld 3: UitlegSample 3: Explanation

"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"
    }
}

Dit blok policyRule.if bevat zowel de logische operator allOf als anyOf.This policyRule.if block includes both the allOf and anyOf logical operators. De logische operator anyOf levert waar op als ten minste aan één voorwaarde wordt voldaan.The anyOf logical operator evaluates true as long as one included condition is true. Aangezien het type essentieel is voor allOf, moet deze altijd waar opleveren.As the type is at the core of the allOf, it must always evaluate true. Als het type en een van de voorwaarden in anyOf waar zijn, wordt het beleidseffect geactiveerd.If the type and one of the conditions in the anyOf are true, the policy effect triggers.

Volgende stappenNext steps