Pola Azure Policy: operator logis

Definisi kebijakan dapat berisi beberapa pernyataan kondisional. Anda mungkin memerlukan masing-masing pernyataan untuk menjadi benar atau hanya perlu beberapa dari pernyataan untuk menjadi benar. Untuk mendukung kebutuhan ini, bahasa ini memiliki operator logis untuk tidak, allOf, dan anyOf. Kebutuhan ini opsional dan dapat disarangkan untuk membuat skenario yang kompleks.

Sampel 1: Satu operator logis

Definisi kebijakan ini mengevaluasi akun Azure Cosmos DB untuk melihat apakah failover otomatis dan beberapa lokasi penulisan dikonfigurasi. Jika tidak, audit akan memicu dan membuat entri log saat sumber daya yang tidak sesuai dibuat atau diperbarui.

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

Sampel 1: Penjelasan

"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 menggunakan satu allOf untuk memastikan bahwa ketiga ketentuan tersebut benar. Hanya jika semua kondisi ini bernilai benar, efek audit akan dipicu.

Sampel 2: Beberapa operator logis

Definisi kebijakan ini mengevaluasi sumber daya untuk pola penamaan. Jika sumber daya tidak cocok, sumber daya ditolak.

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

Sampel 2: Penjelasan

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

Blok policyRule.if ini juga menyertakan satu allOf, tetapi setiap ketentuan dibungkus dengan operator logis tidak. Kondisional di dalam operator logis tidak mengevaluasi terlebih dahulu, lalu mengevaluasi tidak untuk menentukan apakah seluruh klausul benar atau salah. Jika kedua operator logis tidak bernilai benar, efek kebijakan akan terpicu.

Sampel 3: Menggabungkan operator logis

Definisi kebijakan ini mengevaluasi akun Spring di Azure untuk melihat apakah pelacakan tidak diaktifkan atau pelacakan tidak dalam status berhasil.

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

Sampel 3: Penjelasan

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

Blok policyRule.if ini mencakup operator logis allOf dan anyOf. Operator logis anyOf mengevaluasi benar selama satu kondisi yang disertakan benar. Karena jenis adalah inti dari allOf, maka harus selalu bernilai benar. Jika jenis dan salah satu kondisi di anyOf adalah benar, efek kebijakan akan terpicu.

Langkah berikutnya