Azure Policy minta: logikai operátorok

A szabályzatdefiníciók több feltételes utasítást is tartalmazhatnak. Előfordulhat, hogy mindegyik utasításnak igaznak kell lennie, vagy csak néhánynak kell igaznak lennie. Ezeknek az igényeknek a támogatása érdekében a nyelv logikai operátorokkal rendelkezik a nem, az allOf és az anyOf esetében. Ezek nem kötelezőek, és beágyazhatók összetett forgatókönyvek létrehozásához.

1. minta: Egy logikai operátor

Ez a szabályzatdefiníció kiértékeli az Azure Cosmos DB-fiókokat , és ellenőrzi, hogy konfigurálva vannak-e az automatikus feladatátvételek és több írási hely. Ha nem, a naplózás aktivál és létrehoz egy naplóbejegyzést a nem megfelelő erőforrás létrehozásakor vagy frissítésekor.

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

1. minta: Magyarázat

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

A policyRule.if blokk egyetlen allOf használatával biztosítja, hogy mindhárom feltétel teljesüljön. Csak akkor aktiválódik a naplózási hatás, ha az összes feltétel igaz értéket ad vissza.

2. minta: Több logikai operátor

Ez a szabályzatdefiníció kiértékeli az erőforrásokat egy elnevezési mintához. Ha egy erőforrás nem egyezik meg, a rendszer megtagadja.

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

2. minta: Magyarázat

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

Ez a policyRule.if blokk egyetlen allOf-et is tartalmaz, de minden feltétel a nem logikai operátorral van burkolva. A nem logikai operátor feltétele először kiértékeli, majd kiértékeli a nemet annak megállapításához, hogy a teljes záradék igaz vagy hamis-e. Ha mindkét logikai operátor igaz értéket ad vissza, a szabályzateffektus aktiválódik.

3. minta: Logikai operátorok kombinálása

Ez a szabályzatdefiníció kiértékeli a Spring on Azure-fiókokat annak megállapításához, hogy a nyomkövetés nincs-e engedélyezve, vagy hogy a nyomkövetés nem sikeres állapotban van-e.

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

3. minta: Magyarázat

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

Ez a policyRule.if blokk az allOf és az anyOf logikai operátorokat is tartalmazza. Az anyOf logikai operátor mindaddig igaz értéket ad ki, amíg egy belefoglalt feltétel igaz. Mivel a típus az allOf középpontjában van, mindig igaz értéket kell kiértékelnie. Ha az anyOftípusának és feltételeinek egyike igaz, a szabályzateffektus aktiválódik.

Következő lépések