Azure Policy-definíciós struktúraszabály

A szabályzatszabály a if következőből áll és then blokkokból áll. A blokkban if egy vagy több feltételt határoz meg, amelyek meghatározzák a szabályzat kikényszerítését. Ezekre a feltételekre logikai operátorokat alkalmazhat a szabályzat forgatókönyvének pontos meghatározásához.

Az egyes effektusokra, a kiértékelési sorrendre, a tulajdonságokra és a példákra vonatkozó részletes információkért tekintse meg az Azure Policy-definíciók hatásának alapjait.

A blokkban then a feltételek teljesülése esetén if előforduló hatást határozza meg.

{
  "if": {
      <condition> | <logical operator>
  },
  "then": {
    "effect": "deny | audit | modify | denyAction | append | auditIfNotExists | deployIfNotExists | disabled"
  }
}

A policyRule-ról további információt a szabályzatdefiníciós sémában talál.

Logikai operátorok

A támogatott logikai operátorok a következők:

  • "not": {condition or operator}
  • "allOf": [{condition or operator},{condition or operator}]
  • "anyOf": [{condition or operator},{condition or operator}]

A not szintaxis megfordítja a feltétel eredményét. A allOf szintaxisnak (a logikai and művelethez hasonlóan) minden feltételnek igaznak kell lennie. A anyOf szintaxisnak (a logikai or művelethez hasonlóan) egy vagy több feltételnek igaznak kell lennie.

Logikai operátorokat is beágyazhat. Az alábbi példa egy not műveletbe ágyazott allOf műveletet mutat be.

"if": {
  "allOf": [
    {
      "not": {
        "field": "tags",
        "containsKey": "application"
      }
    },
    {
      "field": "type",
      "equals": "Microsoft.Storage/storageAccounts"
    }
  ]
},

Feltételek

A feltétel kiértékeli, hogy egy érték megfelel-e bizonyos feltételeknek. A támogatott feltételek a következők:

  • "equals": "stringValue"
  • "notEquals": "stringValue"
  • "like": "stringValue"
  • "notLike": "stringValue"
  • "match": "stringValue"
  • "matchInsensitively": "stringValue"
  • "notMatch": "stringValue"
  • "notMatchInsensitively": "stringValue"
  • "contains": "stringValue"
  • "notContains": "stringValue"
  • "in": ["stringValue1","stringValue2"]
  • "notIn": ["stringValue1","stringValue2"]
  • "containsKey": "keyName"
  • "notContainsKey": "keyName"
  • "less": "dateValue" | "less": "stringValue" | "less": intValue
  • "lessOrEquals": "dateValue" | "lessOrEquals": "stringValue" | "lessOrEquals": intValue
  • "greater": "dateValue" | "greater": "stringValue" | "greater": intValue
  • "greaterOrEquals": "dateValue" | "greaterOrEquals": "stringValue" | "greaterOrEquals": intValue
  • "exists": "bool"

lessOrEqualsgreaterOrEqualsgreaterHa lessa tulajdonságtípus nem egyezik meg a feltételtípussal, hibaüzenet jelenik meg. A sztringek összehasonlítását a rendszer a InvariantCultureIgnoreCase.

A feltételek és notLike a like feltételek használatakor helyettesítő karaktert (*) kell megadnia az értékben. Az értéknek nem szabad egynél több helyettesítő karaktert megadnia.

A feltételek és notMatch a match feltételek használatakor adjon meg egy hashtaget (#) a számjegy, a kérdőjel (?) betűhöz, a pont (.) pedig az adott karakternek megfelelő karaktert, illetve bármely más karaktert. Bár match a kis- és nagybetűk megkülönböztetik a kis- és nagybetűket, a kis- és notMatch nagybetűket kiértékelő stringValue összes többi feltétel érzéketlen. A kis- és nagybetűk nem érzékeny alternatívái a következőkben matchInsensitively érhetők el: és notMatchInsensitively.

Mezők

Azok a feltételek, amelyek kiértékelik, hogy az erőforrás-kérelem hasznos adatainak értékei megfelelnek-e bizonyos feltételeknek, kifejezéssel field alakíthatók ki. A következő mezők támogatottak:

  • name

  • fullName

    • Az erőforrás teljes nevét adja vissza. Az erőforrás teljes neve a szülőerőforrás-nevek (például myServer/myDatabase) által előre felerősített erőforrásnév.
  • kind

  • type

  • location

    • A helymezők normalizálva vannak a különböző formátumok támogatásához. Például egyenlőnek East US 2 tekinthető.eastus2
    • Globálisan használható helyfüggetlen erőforrásokhoz.
  • id

    • A kiértékelendő erőforrás erőforrás-azonosítóját adja vissza.
    • Példa: /subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myRG/providers/Microsoft.KeyVault/vaults/myVault
  • identity.type

    • Az erőforráson engedélyezett felügyelt identitás típusát adja vissza.
  • tags

  • tags['<tagName>']

    • Ez a zárójelszintaxis olyan címkeneveket támogat, amelyek írásjelekkel, például kötőjellel, pontlal vagy szóközzel rendelkeznek.
    • Hol tagName található annak a címkének a neve, amelynek a feltételét ellenőrizni szeretné.
    • Példák: tags['Acct.CostCenter'] hol Acct.CostCenter található a címke neve.
  • tags['''<tagName>''']

    • Ez a zárójel szintaxisa támogatja azokat a címkéket, amelyekben aposztrófok vannak, dupla aposztrófokkal való meneküléssel.
    • Hol tagName található annak a címkének a neve, amelynek a feltételét ellenőrizni szeretné.
    • Példa: tags['''My.Apostrophe.Tag'''] hol 'My.Apostrophe.Tag' található a címke neve.

    Feljegyzés

    tags.<tagName>, tags[tagName]és tags[tag.with.dots] továbbra is elfogadható módon deklarálhat egy címkemezőt. Az előnyben részesített kifejezések azonban a fent felsoroltak.

  • tulajdonság-aliasok – egy listához lásd : Aliasok.

    Feljegyzés

    A field tömb aliasára [*] hivatkozó kifejezésekben a tömb minden elemének kiértékelése egyenként történik az elemek közötti logikai and értékekkel. További információ: Hivatkozási tömberőforrás-tulajdonságok.

A kifejezéseket használó field feltételek felülírhatják az írási műveletekhez használt régi szabályzatdefiníciós szintaxist "source": "action". Ez például már nem támogatott:

{
  "source": "action",
  "like": "Microsoft.Network/publicIPAddresses/*"
}

A kívánt viselkedés azonban a következő logikával field érhető el:

{
  "field": "type",
  "equals": "Microsoft.Network/publicIPAddresses"
}

Címkék használata paraméterekkel

Egy paraméterérték átadható egy címkemezőnek. Ha egy paramétert egy címkemezőnek ad át, az növeli a szabályzatdefiníció rugalmasságát a szabályzat-hozzárendelés során.

Az alábbi példában concat a paraméter értékének elnevezett címke mezőkeresésére tagName szolgál. Ha ez a címke nem létezik, az modify effektussal a rendszer a keresési függvény használatával resourcegroup() hozzáadja a címkét a naplózott erőforrások szülőerőforrás-csoportjában beállított azonos nevű címke értékével.

{
  "if": {
    "field": "[concat('tags[', parameters('tagName'), ']')]",
    "exists": "false"
  },
  "then": {
    "effect": "modify",
    "details": {
      "operations": [
        {
          "operation": "add",
          "field": "[concat('tags[', parameters('tagName'), ']')]",
          "value": "[resourcegroup().tags[parameters('tagName')]]"
        }
      ],
      "roleDefinitionIds": [
        "/providers/microsoft.authorization/roleDefinitions/4a9ae827-6dc8-4573-8ac7-8239d42aa03f"
      ]
    }
  }
}

Érték

Azok a feltételek, amelyek kiértékelik, hogy egy érték megfelel-e bizonyos feltételeknek, kifejezéssel value alakíthatók-e ki. Az értékek lehetnek literálok, paraméterek értékei vagy bármely támogatott sablonfüggvény visszaadott értékei.

Figyelmeztetés

Ha egy sablonfüggvény eredménye hiba, a szabályzat kiértékelése meghiúsul. A sikertelen kiértékelés implicit deny. További információkért lásd a sablonhibák elkerülését ismertető témakört. A enforcementModedoNotEnforce használatával megelőzheti a sikertelen értékelés új vagy frissített erőforrásokra gyakorolt hatását egy új szabályzatdefiníció tesztelése és érvényesítése során.

Példák értékre

Ez a házirendszabály-példa a függvény és a visszaadott name tulajdonság eredményét hasonlítja value össze egy like feltétellel*netrg.resourceGroup() A szabály nem tagadja meg azokat az Microsoft.Network/*type erőforrásokat, amelyek neve egyetlen erőforráscsoportban sem végződik *netrg.

{
  "if": {
    "allOf": [
      {
        "value": "[resourceGroup().name]",
        "like": "*netrg"
      },
      {
        "field": "type",
        "notLike": "Microsoft.Network/*"
      }
    ]
  },
  "then": {
    "effect": "deny"
  }
}

Ez a házirendszabály-példa több beágyazott függvény equalstrueeredményének ellenőrzésére szolgálvalue. A szabály tagad minden olyan erőforrást, amely legalább három címkét nem rendelkezik.

{
  "mode": "indexed",
  "policyRule": {
    "if": {
      "value": "[less(length(field('tags')), 3)]",
      "equals": "true"
    },
    "then": {
      "effect": "deny"
    }
  }
}

Sablonhibák elkerülése

A sablonfüggvények value használata számos összetett beágyazott függvényt tesz lehetővé. Ha egy sablonfüggvény eredménye hiba, a szabályzat kiértékelése meghiúsul. A sikertelen kiértékelés implicit deny. Példa egy value olyan esetre, amely bizonyos helyzetekben meghiúsul:

{
  "policyRule": {
    "if": {
      "value": "[substring(field('name'), 0, 3)]",
      "equals": "abc"
    },
    "then": {
      "effect": "audit"
    }
  }
}

A fenti példaszabály a substring() függvény használatával hasonlítja össze az első három karaktert nameabc. Ha name három karakternél rövidebb, a substring() függvény hibát eredményez. Ez a hiba miatt a szabályzat effektussá válik deny .

Ehelyett használja a ha() függvényt annak ellenőrzésére, hogy az első három karakter name egyenlő-e abc anélkül name , hogy háromnál rövidebb karakter okozna hibát:

{
  "policyRule": {
    "if": {
      "value": "[if(greaterOrEquals(length(field('name')), 3), substring(field('name'), 0, 3), 'not starting with abc')]",
      "equals": "abc"
    },
    "then": {
      "effect": "audit"
    }
  }
}

A módosított szabályzatszabálysal ellenőrizze a hossztname, if() mielőtt három karakternél kevesebb karaktert tartalmazó értékre próbálna bejutnisubstring(). Ha name túl rövid, akkor a rendszer a "nem abc-vel kezdődő" értéket adja vissza, és összehasonlítja a következővel abc: . A rövid névvel nem kezdődő abc erőforrások továbbra is meghiúsulnak a szabályzatszabályban, de a kiértékelés során már nem okoznak hibát.

Count

Egy kifejezéssel olyan feltételek hozhatók létre, amelyek megszámolják, hogy egy tömb hány tagja felel meg bizonyos count feltételeknek. A gyakori forgatókönyvek azt ellenőrzik, hogy a tömbtagok "legalább egyikének", "pontosan az egyiknek", az "összesnek" vagy a tömbtagok egyikének sem felel-e meg egy feltétel. A count függvény kiértékeli az egyes tömbtagokat egy feltételkifejezéshez, és összegzi a valódi eredményeket, amelyet aztán összehasonlít a kifejezés operátorával.

Mezőszám

Megszámolja, hogy a kérelem hasznos adattömbjének hány tagja felel meg egy feltételkifejezésnek. A kifejezések struktúrája field count a következő:

{
  "count": {
    "field": "<[*] alias>",
    "where": {
      /* condition expression */
    }
  },
  "<condition>": "<compare the count of true condition expression array members to this value>"
}

A rendszer a következő tulajdonságokat field counthasználja:

  • count.field (kötelező): A tömb elérési útját tartalmazza, és tömb aliasának kell lennie.
  • count.where(nem kötelező): A feltételkifejezés, amely egyenként kiértékelhető a tömb aliastömbjének minden egyes tagjára vonatkozóancount.field. Ha ez a tulajdonság nincs megadva, a rendszer a "mező" elérési úttal rendelkező összes tömbtagot igaz értékre értékeli. A tulajdonságon belül bármilyen feltétel használható. A tulajdonságon belül logikai operátorok használhatók összetett értékelési követelmények létrehozásához.
  • condition (kötelező): Az érték összehasonlítva van a feltételkifejezésnek megfelelő count.where elemek számával. Numerikus feltételt kell használni.

A tömbtulajdonságok Azure Policy-beli használatával kapcsolatos további részletekért, beleértve a kifejezés kiértékelésének részletes magyarázatát, tekintse meg a field count tömberőforrás-tulajdonságokra vonatkozó hivatkozásokat.

Értékszám

Megszámolja, hogy egy tömb hány tagja felel meg egy feltételnek. A tömb lehet literális tömb vagy tömbparaméterre mutató hivatkozás. A kifejezések struktúrája value count a következő:

{
  "count": {
    "value": "<literal array | array parameter reference>",
    "name": "<index name>",
    "where": {
      /* condition expression */
    }
  },
  "<condition>": "<compare the count of true condition expression array members to this value>"
}

A rendszer a következő tulajdonságokat value counthasználja:

  • count.value (kötelező): A kiértékelendő tömb.
  • count.name (kötelező): Az index neve, angol betűkből és számjegyekből áll. Az aktuális iterációban kiértékelt tömbtag értékének nevét határozza meg. A rendszer a nevet használja az aktuális értékre való hivatkozáshoz a count.where feltételen belül. Nem kötelező, ha a count kifejezés nem egy másik count kifejezés gyermekében van. Ha nincs megadva, az index neve implicit módon a következőre "default"van állítva: .
  • count.where (nem kötelező): A feltételkifejezés, amely egyenként kiértékelhető a tömb minden egyes tagjára count.valuevonatkozóan. Ha ez a tulajdonság nincs megadva, a rendszer az összes tömbtagot igaz értékre értékeli. A tulajdonságon belül bármilyen feltétel használható. A tulajdonságon belül logikai operátorok használhatók összetett értékelési követelmények létrehozásához. Az aktuális számba vehető tömbtag értéke az aktuális függvény meghívásával érhető el.
  • condition (kötelező): Az érték összehasonlítva van a feltételkifejezésnek megfelelő count.where elemek számával. Numerikus feltételt kell használni.

Az aktuális függvény

A current() függvény csak a feltételen count.where belül érhető el. A kifejezés kiértékelése által count jelenleg számba adott tömbtag értékét adja vissza.

Értékszám használata

  • current(<index name defined in count.name>). Például: current('arrayMember')
  • current(). Csak akkor engedélyezett, ha a value count kifejezés nem egy másik count kifejezés gyermeke. Ugyanazt az értéket adja vissza, mint a fenti.

Ha a hívás által visszaadott érték objektum, a tulajdonság tartozékai támogatottak. Például: current('objectArrayMember').property

Mezőszám használata

  • current(<the array alias defined in count.field>). Például: current('Microsoft.Test/resource/enumeratedArray[*]').
  • current(). Csak akkor engedélyezett, ha a field count kifejezés nem egy másik count kifejezés gyermeke. Ugyanazt az értéket adja vissza, mint a fenti.
  • current(<alias of a property of the array member>). Például: current('Microsoft.Test/resource/enumeratedArray[*].property').

Példák mezőszámra

1. példa: Annak ellenőrzése, hogy egy tömb üres-e

{
  "count": {
    "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]"
  },
  "equals": 0
}

2. példa: Ellenőrizze, hogy csak egy tömbtag felel-e meg a feltételkifejezésnek

{
  "count": {
    "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
    "where": {
      "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
      "equals": "My unique description"
    }
  },
  "equals": 1
}

3. példa: Ellenőrizze, hogy legalább egy tömbtag megfelel-e a feltételkifejezésnek

{
  "count": {
    "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
    "where": {
      "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
      "equals": "My common description"
    }
  },
  "greaterOrEquals": 1
}

4. példa: Ellenőrizze, hogy az objektumtömb összes tagja megfelel-e a feltételkifejezésnek

{
  "count": {
    "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
    "where": {
      "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
      "equals": "description"
    }
  },
  "equals": "[length(field('Microsoft.Network/networkSecurityGroups/securityRules[*]'))]"
}

5. példa: Ellenőrizze, hogy legalább egy tömbtag egyezik-e a feltételkifejezés több tulajdonságával

{
  "count": {
    "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
    "where": {
      "allOf": [
        {
          "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].direction",
          "equals": "Inbound"
        },
        {
          "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].access",
          "equals": "Allow"
        },
        {
          "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].destinationPortRange",
          "equals": "3389"
        }
      ]
    }
  },
  "greater": 0
}

6. példa: A feltételeken belüli where függvény használata current() a sablonfüggvényben jelenleg számba adott tömbtag értékének eléréséhez. Ez a feltétel ellenőrzi, hogy egy virtuális hálózat tartalmaz-e olyan címelőtagot, amely nem tartozik a 10.0.0.0/24 CIDR-tartomány alá.

{
  "count": {
    "field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]",
    "where": {
      "value": "[ipRangeContains('10.0.0.0/24', current('Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]'))]",
      "equals": false
    }
  },
  "greater": 0
}

7. példa: A feltételeken belüli where függvény használata field() az aktuálisan számba adott tömbtag értékének eléréséhez. Ez a feltétel ellenőrzi, hogy egy virtuális hálózat tartalmaz-e olyan címelőtagot, amely nem tartozik a 10.0.0.0/24 CIDR-tartomány alá.

{
  "count": {
    "field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]",
    "where": {
      "value": "[ipRangeContains('10.0.0.0/24', first(field(('Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]')))]",
      "equals": false
    }
  },
  "greater": 0
}

Példák értékszámra

1. példa: Ellenőrizze, hogy az erőforrás neve megegyezik-e a megadott névminták bármelyikével.

{
  "count": {
    "value": [
      "prefix1_*",
      "prefix2_*"
    ],
    "name": "pattern",
    "where": {
      "field": "name",
      "like": "[current('pattern')]"
    }
  },
  "greater": 0
}

2. példa: Ellenőrizze, hogy az erőforrás neve megegyezik-e a megadott névminták bármelyikével. A current() függvény nem ad meg indexnevet. Az eredmény megegyezik az előző példával.

{
  "count": {
    "value": [
      "prefix1_*",
      "prefix2_*"
    ],
    "where": {
      "field": "name",
      "like": "[current()]"
    }
  },
  "greater": 0
}

3. példa: Ellenőrizze, hogy az erőforrás neve megegyezik-e a tömbparaméter által megadott keresztnévmintákkal.

{
  "count": {
    "value": "[parameters('namePatterns')]",
    "name": "pattern",
    "where": {
      "field": "name",
      "like": "[current('pattern')]"
    }
  },
  "greater": 0
}

4. példa: Ellenőrizze, hogy a virtuális hálózat címelőtagja nem szerepel-e a jóváhagyott előtagok listájában.

{
  "count": {
    "field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]",
    "where": {
      "count": {
        "value": "[parameters('approvedPrefixes')]",
        "name": "approvedPrefix",
        "where": {
          "value": "[ipRangeContains(current('approvedPrefix'), current('Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]'))]",
          "equals": true
        },
      },
      "equals": 0
    }
  },
  "greater": 0
}

5. példa: Ellenőrizze, hogy az összes fenntartott NSG-szabály egy NSG-ben van-e definiálva. A fenntartott NSG-szabályok tulajdonságai objektumokat tartalmazó tömbparaméterben vannak definiálva.

Paraméter értéke:

[
  {
    "priority": 101,
    "access": "deny",
    "direction": "inbound",
    "destinationPortRange": 22
  },
  {
    "priority": 102,
    "access": "deny",
    "direction": "inbound",
    "destinationPortRange": 3389
  }
]

Szabályzat:

{
  "count": {
    "value": "[parameters('reservedNsgRules')]",
    "name": "reservedNsgRule",
    "where": {
      "count": {
        "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
        "where": {
          "allOf": [
            {
              "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].priority",
              "equals": "[current('reservedNsgRule').priority]"
            },
            {
              "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].access",
              "equals": "[current('reservedNsgRule').access]"
            },
            {
              "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].direction",
              "equals": "[current('reservedNsgRule').direction]"
            },
            {
              "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].destinationPortRange",
              "equals": "[current('reservedNsgRule').destinationPortRange]"
            }
          ]
        }
      },
      "equals": 1
    }
  },
  "equals": "[length(parameters('reservedNsgRules'))]"
}

Szabályzatfüggvények

A függvények további logikát vezetnek be egy szabályzatszabályba. A feloldásuk egy szabályzatdefiníció házirendszabályán belül és a kezdeményezésben a szabályzatdefiníciókhoz rendelt paraméterértékek között van.

Minden Resource Manager-sablonfüggvény használható egy szabályzatszabályon belül, kivéve a következő függvényeket és a felhasználó által definiált függvényeket:

  • copyIndex()
  • dateTimeAdd()
  • dateTimeFromEpoch
  • dateTimeToEpoch
  • deployment()
  • environment()
  • extensionResourceId()
  • lambda() További információ: lambda
  • listAccountSas()
  • listKeys()
  • listSecrets()
  • list*
  • managementGroup()
  • newGuid()
  • pickZones()
  • providers()
  • reference()
  • resourceId()
  • subscriptionResourceId()
  • tenantResourceId()
  • tenant()
  • variables()

Feljegyzés

Ezek a függvények továbbra is elérhetők a details.deployment.properties.template sablon üzembe helyezésének egy deployIfNotExists szabályzatdefinícióban való részén belül.

A következő függvény egy szabályzatszabályban használható, de eltér az Azure Resource Manager-sablonban (ARM-sablonban) való használattól:

  • utcNow()– Az ARM-sablontól eltérően ez a tulajdonság az defaultValue értéken kívül is használható.
    • Egy olyan sztringet ad vissza, amely az aktuális dátumra és időre van állítva univerzális ISO 8601 DateTime formátumban yyyy-MM-ddTHH:mm:ss.fffffffZ.

A következő függvények csak szabályzatszabályokban érhetők el:

  • addDays(dateTime, numberOfDaysToAdd)

    • dateTime: [Kötelező] sztring – Az univerzális ISO 8601 DateTime formátumú sztring "yyyyy-MM-ddTHH:mm:ss. FFFFFFFZ'
    • numberOfDaysToAdd: [Kötelező] egész szám – Hozzáadandó napok száma
  • field(fieldName)

    • fieldName: [Kötelező] sztring – A lekérendő mező neve
    • Ennek a mezőnek az értékét adja vissza a Ha feltétel által kiértékelt erőforrásból.
    • field elsődlegesen a kiértékelendő erőforrás mezőire auditIfNotExistsdeployIfNotExists való hivatkozásra szolgál. Erre példa a DeployIfNotExists példában látható.
  • requestContext().apiVersion

    • A szabályzat kiértékelését kezdeményező kérés API-verzióját adja vissza (például: 2021-09-01). Ez az érték az API-verzió, amelyet az erőforrás-létrehozás/-frissítés kiértékelésére vonatkozó PUT/PATCH kérelemben használtak. A rendszer mindig a legújabb API-verziót használja a meglévő erőforrások megfelelőségi kiértékelése során.
  • policy()

    • A kiértékelendő szabályzattal kapcsolatos alábbi információkat adja vissza. A tulajdonságok a visszaadott objektumból érhetők el (például: [policy().assignmentId]).

      {
        "assignmentId": "/subscriptions/11111111-1111-1111-1111-111111111111/providers/Microsoft.Authorization/policyAssignments/myAssignment",
        "definitionId": "/providers/Microsoft.Authorization/policyDefinitions/34c877ad-507e-4c82-993e-3452a6e0ad3c",
        "setDefinitionId": "/providers/Microsoft.Authorization/policySetDefinitions/42a694ed-f65e-42b2-aa9e-8052e9740a92",
        "definitionReferenceId": "StorageAccountNetworkACLs"
      }
      
  • ipRangeContains(range, targetRange)

    • range: [Kötelező] sztring – Egy IP-címtartományt megadva annak ellenőrzéséhez, hogy a targetRange belül van-e.
    • targetRange: [Kötelező] sztring – A tartományon belül érvényesíteni kívánt IP-címtartományt meghatározó karakterlánc.
    • Logikai értéket ad vissza, hogy a tartomány IP-címtartománya tartalmazza-e a targetRange IP-címtartományt. Az üres tartományok vagy az IP-családok közötti keverés nem engedélyezett, és kiértékelési hibát eredményez.

    Támogatott formátumok:

    • Egyetlen IP-cím (példák: 10.0.0.0, 2001:0DB8::3:FFFE)
    • CIDR-tartomány (példák: 10.0.0.0/24, 2001:0DB8::/110)
    • Kezdő és záró IP-címek által definiált tartomány (példák: 192.168.0.1-192.168.0.9, 2001:0DB8::-2001:0DB8::3:FFFF)
  • current(indexName)

    • Speciális függvény, amely csak darabszámkifejezéseken belül használható.

Példa házirendfüggvényre

Ez a házirendszabály-példa az erőforrásfüggvényt használja a resourceGroupname tulajdonság lekéréséhez, a concat tömb- és objektumfüggvénnyel kombinálva létrehoz egy feltételt like , amely kikényszeríti az erőforrás nevét az erőforráscsoport nevével való kezdéshez.

{
  "if": {
    "not": {
      "field": "name",
      "like": "[concat(resourceGroup().name,'*')]"
    }
  },
  "then": {
    "effect": "deny"
  }
}

Szabályzatszabály korlátai

A létrehozás során kikényszerített korlátok

A szabályzatszabályok struktúrájára vonatkozó korlátokat a szabályzat létrehozása vagy hozzárendelése során kényszeríti ki a rendszer. A korlátokat meghaladó szabályzatdefiníciók létrehozására vagy hozzárendelésére tett kísérletek sikertelenek lesznek.

Korlát Érték További részletek
Feltételkifejezések a if feltételben 4096
Feltételkifejezések a then blokkban 128 A szabályzatokra auditIfNotExists és deployIfNotExists a existenceCondition szabályzatokra vonatkozik
Szabályzatfüggvények szabályzatszabályonként 2048
Szabályzatfüggvények paramétereinek száma 128 Példa: [function('parameter1', 'parameter2', ...)]
Beágyazott szabályzatfüggvények mélysége 64 Példa: [function(nested1(nested2(...)))]
Szabályzatfüggvények kifejezéssztringjeinek hossza 81 920 Példa: a hossza "[function(....)]"
Field count kifejezések tömbenként 5
Value count szabályzatszabályonkénti kifejezések 10
Value count kifejezés iterációinak száma 100 Beágyazott Value count kifejezések esetén ez magában foglalja a szülőkifejezés iterációs számát is

A kiértékelés során kikényszerített korlátok

A szabályzatfüggvények által a szabályzatkiértékelés során feldolgozott objektumok méretére vonatkozó korlátok. Ezek a korlátok nem mindig kényszeríthetők ki a létrehozás során, mivel a kiértékelt tartalomtól függenek. Példa:

{
  "field": "name",
  "equals": "[concat(field('stringPropertyA'), field('stringPropertyB'))]"
}

A függvény által létrehozott sztring concat() hossza a kiértékelt erőforrás tulajdonságainak értékétől függ.

Korlát Érték Példa
Az adott függvény által visszaadott sztring hossza 131 072 [concat(field('longString1'), field('longString2'))]
A függvény számára paraméterként megadott vagy a függvény által visszaadott összetett objektumok mélysége 128 [union(field('largeObject1'), field('largeObject2'))]
A függvény számára paraméterként megadott vagy a függvény által visszaadott összetett objektumok csomópontjainak száma 32 768 [concat(field('largeArray1'), field('largeArray2'))]

Figyelmeztetés

A fenti korlátokat az értékelés során túllépő szabályzatok hatékonyan szabályzattá válnak deny , és blokkolhatják a bejövő kéréseket. Ha összetett függvényeket tartalmazó szabályzatokat ír, ügyeljen ezekre a korlátokra, és tesztelje a szabályzatokat olyan erőforrásokon, amelyek túlléphetik a korlátokat.

Következő lépések