Udostępnij za pośrednictwem


Wzorzec usługi Azure Policy: operatory logiczne

Definicja zasad może zawierać kilka instrukcji warunkowych. Może być konieczne, aby każde stwierdzenie było prawdziwe lub tylko niektóre z nich były prawdziwe. Aby zapewnić obsługę tych potrzeb, język ma operatory logiczne 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 przełączanie w tryb failover i wiele lokalizacji zapisu. Gdy tak nie jest, inspekcja wyzwala 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 ma wartość true, czy false. Jeśli oba operatory logiczne nie mają wartości true, wyzwalany jest efekt zasad.

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 wszystkie operatory logiczne AllOf , jak i anyOf . Operator logiczny anyOf oblicza wartość true, o ile jeden uwzględniony warunek ma wartość true. 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