Model Azure Policy: logické operátory

Definice zásady může obsahovat několik podmíněných příkazů. Může být nutné, aby každý příkaz byl pravdivý, nebo potřebujete jen některé z nich, aby byly pravdivé. Pro podporu těchto potřeb má jazyk logické operátory pro ne, allOf a anyOf. Jsou volitelné a dají se vnořit a vytvářet složité scénáře.

Ukázka 1: Jeden logický operátor

Tato definice zásady vyhodnocuje účty služby Azure Cosmos DB a zjišťuje, jestli jsou nakonfigurovaná automatická převzetí služeb při selhání a více umístění zápisu. Pokud ne, audit se aktivuje a vytvoří položku protokolu při vytvoření nebo aktualizaci nevyhovujícího prostředku.

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

Ukázka 1: Vysvětlení

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

Blok policyRule.if používá jeden allOf k zajištění, že jsou splněny všechny tři podmínky. Pouze když se všechny tyto podmínky vyhodnotí jako true, aktivuje se účinek auditu .

Ukázka 2: Více logických operátorů

Tato definice zásady vyhodnocuje prostředky pro vzor pojmenování. Pokud se prostředek neshoduje, je odepřen.

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

Ukázka 2: Vysvětlení

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

Tento blok policyRule.if obsahuje také jeden allOf, ale každá podmínka je zabalena ne logickým operátorem. Podmíněný vnitřní operátor, který není logický, se vyhodnotí jako první a pak vyhodnotí, zda je celá klauzule pravdivá nebo nepravda. Pokud se oba logické operátory vyhodnotí jako true, aktivuje se efekt zásady.

Ukázka 3: Kombinování logických operátorů

Tato definice zásady vyhodnocuje účty Spring v Azure a zjišťuje, jestli trasování není povolené nebo jestli trasování není v úspěšném stavu.

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

Ukázka 3: Vysvětlení

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

Tento blok policyRule.if zahrnuje všechny logické operátoryOf i anyOf. Logický operátor anyOf vyhodnotí hodnotu true, pokud jedna zahrnutá podmínka je pravdivá. Vzhledem k tomu, že typ je jádrem allOf, musí vždy vyhodnotit hodnotu true. Pokud je typ a jedna z podmínek v anyOf true, efekt zásady se aktivuje.

Další kroky