Azure İlkesi deseni: mantıksal işleçler

İlke tanımı birkaç koşullu deyim içerebilir. Her deyimin doğru olması veya yalnızca bazılarının doğru olması gerekebilir. Bu gereksinimleri desteklemek için dilin değil, allOf ve anyOf için mantıksal işleçleri vardır. Bunlar isteğe bağlıdır ve karmaşık senaryolar oluşturmak için iç içe yerleştirilebilir.

Örnek 1: Bir mantıksal işleç

Bu ilke tanımı, otomatik yük devretmelerin ve birden çok yazma konumunun yapılandırılıp yapılandırılmadığını görmek için Azure Cosmos DB hesaplarını değerlendirir. Bunlar oluşturulmadığında, denetim tetikler ve uyumlu olmayan kaynak oluşturulduğunda veya güncelleştirildiğinde bir günlük girdisi oluşturur.

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

Örnek 1: Açıklama

"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 bloğu, üç koşulun da doğru olduğundan emin olmak için tek bir allOf kullanır. Yalnızca bu koşulların tümü true olarak değerlendirildiğinde denetim etkisi tetikler.

Örnek 2: Birden çok mantıksal işleç

Bu ilke tanımı, kaynakları bir adlandırma düzeni için değerlendirir. Bir kaynak eşleşmiyorsa reddedilir.

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

Örnek 2: Açıklama

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

Bu policyRule.if bloğu da tek bir allOf içerir, ancak her koşul mantıksal işleç değil ile sarmalanır. Mantıksal işleç değil içindeki koşullu önce değerlendirir ve ardından tüm yan tümcesinin true veya false olup olmadığını belirlemek için değil değerini değerlendirir. Her iki mantıksal işleç de doğru olarak değerlendirilirse, ilke etkisi tetikler.

Örnek 3: Mantıksal işleçleri birleştirme

Bu ilke tanımı, izlemenin etkin olup olmadığını veya izlemenin başarılı durumda olup olmadığını görmek için Azure hesaplarında Spring'i değerlendirir.

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

Örnek 3: Açıklama

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

Bu policyRule.if bloğu hem allOf hem de anyOf mantıksal işleçlerini içerir. Dahil edilen bir koşul true olduğu sürece anyOf mantıksal işleci true değerini değerlendirir. türü allOf'un çekirdeğinde olduğundan her zaman true değerini değerlendirmesi gerekir. anyOf içindeki tür ve koşullardan biri doğruysa, ilke etkisi tetiklenir.

Sonraki adımlar