Azure Policy mönster: logiska operatorer

En principdefinition kan innehålla flera villkorsstyrda instruktioner. Du kan behöva att varje instruktion är sann eller bara att vissa av dem är sanna. För att stödja dessa behov har språket logiska operatorer för inte, allOf och anyOf. De är valfria och kan kapslas för att skapa komplexa scenarier.

Exempel 1: En logisk operator

Den här principdefinitionen utvärderar Azure Cosmos DB-konton för att se om automatiska redundansväxlingar och flera skrivplatser har konfigurerats. När de inte är det utlöser granskningsfunktionen och skapar en loggpost när den icke-kompatibla resursen skapas eller uppdateras.

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

Exempel 1: Förklaring

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

PolicyRule.if-blocket använder en enda allOf för att säkerställa att alla tre villkoren är sanna. Endast när alla dessa villkor utvärderas till true utlöses granskningseffekten .

Exempel 2: Flera logiska operatorer

Den här principdefinitionen utvärderar resurser för ett namngivningsmönster. Om en resurs inte matchar nekas den.

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

Exempel 2: Förklaring

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

Det här policyRule.if-blocket innehåller också en enda allOf, men varje villkor omsluts med den inte logiska operatorn. Villkoret i den inte logiska operatorn utvärderas först och utvärderar sedan inte för att avgöra om hela satsen är sant eller falskt. Om båda inte logiska operatorer utvärderas till true utlöses principeffekten.

Exempel 3: Kombinera logiska operatorer

Den här principdefinitionen utvärderar Spring på Azure-konton för att se om spårningen inte är aktiverad eller om spårningen inte är i ett lyckat tillstånd.

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

Exempel 3: Förklaring

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

Det här policyRule.if-blocket innehåller både allOf och anyOf logiska operatorer. Den logiska operatorn anyOf utvärderar sant så länge ett inkluderat villkor är sant. Eftersom typen är kärnan i allOf måste den alltid utvärdera sant. Om typen och ett av villkoren i anyOf är sanna utlöses principeffekten.

Nästa steg