wzorzec Azure Policy: operatory logiczne

Definicja zasad może zawierać kilka instrukcji warunkowych. Każda instrukcja może być prawdziwa lub tylko niektóre z nich muszą być prawdziwe. Aby obsłużyć te potrzeby, język ma operatory logiczne dla nie, allOf i anyOf. Są one opcjonalne i mogą być zagnieżdżone w celu utworzenia złożonych scenariuszy.

Przykład 1: jeden operator logiczny

Ta definicja zasad ocenia konta usługi Azure Cosmos DB , aby sprawdzić, czy skonfigurowano automatyczne przechodzenie w tryb failover i wiele lokalizacji zapisu. Gdy tak nie jest, inspekcja jest wyzwalana i tworzy wpis dziennika po utworzeniu lub zaktualizowaniu niezgodnego zasobu.

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

Przykład 1. Wyjaśnienie

"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 używa jednego allOf , aby upewnić się, że wszystkie trzy warunki są spełnione. Tylko wtedy, gdy wszystkie te warunki mają wartość true, wyzwalacz efektu inspekcji .

Przykład 2. Wiele operatorów logicznych

Ta definicja zasad ocenia zasoby dla wzorca nazewnictwa. Jeśli zasób nie jest zgodny, zostanie on odrzucony.

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

Przykład 2. Wyjaśnienie

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

Ten blok policyRule.if zawiera również jeden obiekt allOf, ale każdy warunek jest owinięty operatorem nie logicznym. Warunek wewnątrz operatora nie logicznego ocenia najpierw, a następnie ocenia nie , aby określić, czy cała klauzula jest prawdziwa, czy fałsz. Jeśli oba operatory nie logiczne mają wartość true, efekt zasad jest wyzwalany.

Przykład 3. Łączenie operatorów logicznych

Ta definicja zasad ocenia platformę Spring na kontach platformy Azure , aby sprawdzić, czy śledzenie nie jest włączone, czy śledzenie nie jest w stanie pomyślnym.

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

Przykład 3. Wyjaśnienie

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

Ten blok policyRule.if zawiera zarówno operatory logiczne allOf , jak i anyOf . Operator logiczny anyOf daje wartość true, o ile spełniony jest jeden uwzględniony warunek. Ponieważ typ znajduje się w rdzeniu allOf, zawsze musi mieć wartość true. Jeśli typ i jeden z warunków w anyOf są prawdziwe, efekt zasad jest wyzwalany.

Następne kroki