Sdílet prostřednictvím


Pravidlo zásad struktury definic Azure Policy

Pravidlo zásady se skládá z if bloků a then bloků. if V bloku definujete jednu nebo více podmínek, které určují, kdy se zásada vynucuje. Na tyto podmínky můžete použít logické operátory, abyste přesně definovali scénář pro zásadu.

Úplné podrobnosti o jednotlivých efektech, pořadí vyhodnocení, vlastnostech a příkladech najdete v základních informacích o efektech definic Azure Policy.

then V bloku definujete efekt, který se stane, když if jsou splněny podmínky.

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

Další informace o zásadáchRule najdete ve schématu definice zásad.

Logické operátory

Podporované logické operátory jsou:

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

Syntaxe not invertuje výsledek podmínky. Syntaxe allOf (podobná logické and operaci) vyžaduje, aby byly splněny všechny podmínky. Syntaxe anyOf (podobná logické or operaci) vyžaduje, aby byla splněna jedna nebo více podmínek.

Logické operátory můžete vnořit. Následující příklad ukazuje not operaci, která je vnořená v rámci allOf operace.

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

Podmínky

Podmínka vyhodnotí, jestli hodnota splňuje určitá kritéria. Podporované podmínky jsou:

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

Pro less, lessOrEquals, greatera greaterOrEquals, pokud typ vlastnosti neodpovídá typu podmínky, je vyvolán chyba. Porovnání řetězců se provádí pomocí InvariantCultureIgnoreCase.

Při použití podmínek like zadáte notLike v hodnotě zástupný znak (*). Hodnota by neměla obsahovat více než jeden zástupný znak.

Při použití podmínek match notMatch zadejte hashtag (#) odpovídající číslici, otazníku (?) pro písmeno a tečku (.) tak, aby odpovídal libovolnému znaku a jakémukoli jinému znaku tak, aby odpovídal danému skutečnému znaku. I když match se rozlišují malá a notMatch velká písmena, všechny ostatní podmínky, které vyhodnocují stringValue malá a velká písmena, nerozlišují malá a velká písmena. Alternativy nerozlišující malá a velká písmena jsou k dispozici v matchInsensitively a notMatchInsensitively.

Pole

Podmínky, které vyhodnocují, zda hodnoty vlastností v datové části žádosti o prostředek splňují určitá kritéria, lze vytvořit pomocí výrazu field . Podporují se následující pole:

  • name

  • fullName

    • Vrátí úplný název prostředku. Úplný název prostředku je název prostředku, který je předvyplněný libovolnými názvy nadřazených prostředků (například myServer/myDatabase).
  • kind

  • type

  • location

    • Pole umístění jsou normalizována tak, aby podporovala různé formáty. East US 2 Například se považuje za rovno eastus2.
    • Použijte globální prostředky, které jsou nezávislé na umístění.
  • id

    • Vrátí ID prostředku, který se vyhodnocuje.
    • Příklad: /subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myRG/providers/Microsoft.KeyVault/vaults/myVault
  • identity.type

  • tags

  • tags['<tagName>']

    • Tato syntaxe závorek podporuje názvy značek, které mají interpunkci, jako je spojovník, tečka nebo mezera.
    • Kde tagName je název značky pro ověření podmínky.
    • Příklady: tags['Acct.CostCenter'] kde Acct.CostCenter je název značky.
  • tags['''<tagName>''']

    • Tato syntaxe hranatých závorek podporuje názvy značek, které v ní mají apostrofy, apostrofy tak, že se uvolní dvojité apostrofy.
    • Kde tagName je název značky pro ověření podmínky.
    • Příklad: tags['''My.Apostrophe.Tag'''] kde 'My.Apostrophe.Tag' je název značky.

    Poznámka:

    tags.<tagName>, tags[tagName]a tags[tag.with.dots] jsou stále přijatelné způsoby deklarování pole značek. Upřednostňované výrazy jsou však uvedené výše.

  • aliasy vlastností – seznam, viz Aliasy.

    Poznámka:

    Ve field výrazech odkazujících na alias [*] pole se každý prvek pole vyhodnocuje jednotlivě s logickými and prvky. Další informace naleznete v tématu Odkazování na vlastnosti prostředku pole.

Podmínky, které používají field výrazy, mohou nahradit starší syntaxi "source": "action"definice zásady, která slouží k práci pro operace zápisu. Toto se například už nepodporuje:

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

Požadované chování se ale dá dosáhnout pomocí field logiky:

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

Použití značek s parametry

Hodnotu parametru lze předat do pole značky. Předání parametru poli značky zvyšuje flexibilitu definice zásady během přiřazování zásad.

V následujícím příkladu concat se používá k vytvoření vyhledávání polí značek pro značku s názvem hodnota parametru tagName . Pokud tato značka neexistuje, modify použije se efekt k přidání značky pomocí hodnoty stejné pojmenované značky nastavené na nadřazenou skupinu prostředků auditovaných prostředků pomocí resourcegroup() vyhledávací funkce.

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

Hodnota

Podmínky, které vyhodnotí, zda hodnota splňuje určitá kritéria, lze vytvořit pomocí výrazu value . Hodnoty můžou být literály, hodnoty parametrů nebo vrácené hodnoty všech podporovaných funkcí šablony.

Upozorňující

Pokud je výsledkem funkce šablony chyba, vyhodnocení zásad selže. Neúspěšné vyhodnocení je implicitní deny. Další informace najdete v tématu zabránění selhání šablony. Pomocí prvku enforcementMode doNotEnforce zabráníte dopadu neúspěšného vyhodnocení na nové nebo aktualizované prostředky při testování a ověřování nové definice zásady.

Příklady hodnot

Tento příklad pravidla zásad používá value k porovnání výsledku resourceGroup() funkce a vrácené name vlastnosti s podmínkou like *netrg. Pravidlo odmítne žádný prostředek, který není v Microsoft.Network/* type žádné skupině prostředků, jejíž název končí *netrg.

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

Tento příklad pravidla zásad používá value ke kontrole, jestli výsledek více vnořených funkcí equals true. Pravidlo odmítne všechny prostředky, které nemají aspoň tři značky.

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

Zabránění chybám šablony

Použití funkcí šablony value umožňuje mnoho složitých vnořených funkcí. Pokud je výsledkem funkce šablony chyba, vyhodnocení zásad selže. Neúspěšné vyhodnocení je implicitní deny. Příklad value selhání v určitých scénářích:

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

Výše uvedené ukázkové pravidlo zásad používá podřetěrce() k porovnání prvních tří znaků name abcs . Pokud name je kratší než tři znaky, substring() výsledkem funkce je chyba. Tato chyba způsobí, že se zásada stane účinkem deny .

Místo toho pomocí funkce if() zkontrolujte, jestli se první tři znaky rovnáabc, aniž by bylo možné name způsobit chybu kratší než tři znakyname:

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

S revidovaným pravidlem if() zásad zkontroluje délku name , než se pokusíte získat substring() hodnotu s méně než třemi znaky. Pokud name je příliš krátká, vrátí se místo toho hodnota "nezačíná na abc" a porovná se s abchodnotou . Prostředek s krátkým názvem, který nezačíná abc stále selhává s pravidlem zásad, ale už nezpůsobí chybu během vyhodnocení.

Počet

Podmínky, které spočítá, kolik členů pole splňuje určitá kritéria, lze vytvořit pomocí výrazu count . Běžné scénáře kontrolují, jestli "alespoň jeden z", "přesně jeden z", "všech" nebo "žádný z" členů pole nesplňuje podmínku. Vyhodnocuje count každý člen pole pro výraz podmínky a sečte skutečné výsledky, které se pak porovnávají s operátorem výrazu.

Počet polí

Spočítejte, kolik členů pole v datové části požadavku splňuje výraz podmínky. Struktura výrazů field count je:

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

Následující vlastnosti se používají s field count:

  • count.field (povinné): Obsahuje cestu k poli a musí být alias pole.
  • count.where(volitelné): Výraz podmínky pro individuální vyhodnocení pro každý člen count.fieldpole aliasu pole pole pole . Pokud tato vlastnost není zadaná, vyhodnotí se všechny členy pole s cestou pole jako true. V této vlastnosti lze použít libovolnou podmínku . Logické operátory lze v této vlastnosti použít k vytvoření složitých požadavků na vyhodnocení.
  • condition (povinné): Hodnota se porovná s počtem položek, které splňovaly count.where výraz podmínky. Měla by se použít číselná podmínka .

Další podrobnosti o tom, jak pracovat s vlastnostmi pole ve službě Azure Policy, včetně podrobného vysvětlení způsobu vyhodnocení výrazu field count , najdete v tématu Odkazování na vlastnosti prostředku pole.

Počet hodnot

Spočítejte, kolik členů pole splňuje podmínku. Pole může být literálová matice nebo odkaz na parametr pole. Struktura výrazů value count je:

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

Následující vlastnosti se používají s value count:

  • count.value (povinné): Pole, které se má vyhodnotit.
  • count.name (povinné): Název indexu složený z anglických písmen a číslic. Definuje název hodnoty člena pole vyhodnoceného v aktuální iteraci. Název se používá pro odkazování na aktuální hodnotu uvnitř count.where podmínky. Volitelné, pokud count výraz není v podřízené části jiného count výrazu. Pokud není zadaný, název indexu je implicitně nastaven na "default".
  • count.where (volitelné): Výraz podmínky, který se má jednotlivě vyhodnotit pro každý člen count.valuepole . Pokud tato vlastnost není k dispozici, vyhodnotí se všechny členy pole jako true. V této vlastnosti lze použít libovolnou podmínku . Logické operátory lze v této vlastnosti použít k vytvoření složitých požadavků na vyhodnocení. K hodnotě aktuálně výčtového členu pole lze získat přístup voláním aktuální funkce.
  • condition (povinné): Hodnota se porovná s počtem položek, které splňovaly count.where výraz podmínky. Měla by se použít číselná podmínka .

Aktuální funkce

Funkce current() je k dispozici pouze uvnitř count.where podmínky. Vrátí hodnotu člena pole, který je aktuálně vyčíslován vyhodnocením výrazu count .

Využití počtu hodnot

  • current(<index name defined in count.name>). Například: current('arrayMember').
  • current(). Povoleno pouze v případech, kdy value count výraz není podřízeným jiným count výrazem. Vrátí stejnou hodnotu jako výše.

Pokud je hodnota vrácená voláním objekt, jsou podporovány přístupové objekty vlastností. Například: current('objectArrayMember').property.

Využití počtu polí

  • current(<the array alias defined in count.field>). Například current('Microsoft.Test/resource/enumeratedArray[*]').
  • current(). Povoleno pouze v případech, kdy field count výraz není podřízeným jiným count výrazem. Vrátí stejnou hodnotu jako výše.
  • current(<alias of a property of the array member>). Například current('Microsoft.Test/resource/enumeratedArray[*].property').

Příklady počtu polí

Příklad 1: Kontrola, jestli je pole prázdné

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

Příklad 2: Kontrola splnění výrazu podmínky pouze u jednoho člena pole

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

Příklad 3: Zkontrolujte alespoň jeden člen pole, aby splňoval výraz podmínky.

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

Příklad 4: Zkontrolujte, jestli všechny členy pole objektů splňují výraz podmínky.

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

Příklad 5: Zkontrolujte, jestli alespoň jeden člen pole odpovídá více vlastnostem ve výrazu podmínky.

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

Příklad 6: Použití current() funkce uvnitř where podmínek pro přístup k hodnotě aktuálně výčtového členu pole ve funkci šablony. Tato podmínka zkontroluje, jestli virtuální síť obsahuje předponu adresy, která není pod rozsahem CIDR 10.0.0.0/24.

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

Příklad 7: Použití field() funkce uvnitř where podmínek pro přístup k hodnotě aktuálně výčtového členu pole. Tato podmínka zkontroluje, jestli virtuální síť obsahuje předponu adresy, která není pod rozsahem CIDR 10.0.0.0/24.

{
  "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říklady počtu hodnot

Příklad 1: Zkontrolujte, jestli název prostředku odpovídá některému z daných vzorů názvů.

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

Příklad 2: Zkontrolujte, jestli název prostředku odpovídá některému z daných vzorů názvů. Funkce current() nezadá název indexu. Výsledek je stejný jako v předchozím příkladu.

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

Příklad 3: Zkontrolujte, jestli název prostředku odpovídá některému z daných vzorů názvů poskytovaných parametrem pole.

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

Příklad 4: Zkontrolujte, jestli některá z předpon adres virtuální sítě není v seznamu schválených předpon.

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

Příklad 5: Zkontrolujte, jestli jsou v NSG definována všechna rezervovaná pravidla NSG. Vlastnosti rezervovaných pravidel NSG jsou definovány v parametru pole obsahujícím objekty.

Hodnota parametru:

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

Zásady:

{
  "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'))]"
}

Funkce zásad

Funkce se dají použít k zavedení další logiky do pravidla zásad. Řeší se v rámci pravidla zásad definice zásady a v hodnotách parametrů přiřazených k definicům zásad v iniciativě.

Všechny funkce šablon Resource Manageru jsou k dispozici pro použití v rámci pravidla zásad s výjimkou následujících funkcí a uživatelem definovaných funkcí:

  • copyIndex()
  • dateTimeAdd()
  • dateTimeFromEpoch
  • dateTimeToEpoch
  • deployment()
  • environment()
  • extensionResourceId()
  • lambda() Další informace najdete v tématu lambda.
  • listAccountSas()
  • listKeys()
  • listSecrets()
  • list*
  • managementGroup()
  • newGuid()
  • pickZones()
  • providers()
  • reference()
  • resourceId()
  • subscriptionResourceId()
  • tenantResourceId()
  • tenant()
  • variables()

Poznámka:

Tyto funkce jsou stále dostupné v details.deployment.properties.template rámci části nasazení šablony v deployIfNotExists definici zásad.

Následující funkce je dostupná pro použití v pravidle zásad, ale liší se od použití v šabloně Azure Resource Manageru (šablona ARM):

  • utcNow() – Na rozdíl od šablony ARM lze tuto vlastnost použít mimo výchozí hodnotu.
    • Vrátí řetězec, který je nastaven na aktuální datum a čas ve formátu yyyy-MM-ddTHH:mm:ss.fffffffZUniversal ISO 8601 DateTime .

Následující funkce jsou k dispozici pouze v pravidlech zásad:

  • addDays(dateTime, numberOfDaysToAdd)

    • dateTime: [Povinný] řetězec – řetězec ve formátu Universal ISO 8601 DateTime 'rrrr-MM-ddTHH:mm:ss. FFFFFFFZ'
    • numberOfDaysToAdd: [Povinné] celé číslo – počet dnů, které se mají přidat
  • field(fieldName)

    • fieldName: [Povinný] řetězec – název pole, které se má načíst
    • Vrátí hodnotu tohoto pole z prostředku, který je vyhodnocen podmínkou If.
    • field se primárně používá s polemi auditIfNotExists , která se vyhodnocují, a deployIfNotExists k odkazování na pole v prostředku, který se vyhodnocuje. Příklad tohoto použití je vidět v příkladu DeployIfNotExists.
  • requestContext().apiVersion

    • Vrátí verzi rozhraní API požadavku, který aktivoval vyhodnocení zásad (příklad: 2021-09-01). Tato hodnota je verze rozhraní API, která byla použita v požadavku PUT/PATCH pro vyhodnocení při vytváření nebo aktualizaci prostředků. Nejnovější verze rozhraní API se vždy používá při vyhodnocování dodržování předpisů u existujících prostředků.
  • policy()

    • Vrátí následující informace o vyhodnocovaných zásadách. K vlastnostem lze přistupovat z vráceného objektu (příklad: [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: [Povinný] řetězec – Řetězec určující rozsah IP adres, který zkontroluje, jestli cílovárange je v rámci.
    • targetRange: [Povinný] řetězec – řetězec určující rozsah IP adres, který se má ověřit jako zahrnutý v rozsahu.
    • Vrátí logickou hodnotu pro to, jestli rozsah IP adres rozsahu obsahuje rozsah IP adres targetRange. Prázdné rozsahy nebo kombinace mezi rodinami IP adres není povolená a výsledkem je selhání vyhodnocení.

    Podporované formáty:

    • Jedna IP adresa (příklady: 10.0.0.0, 2001:0DB8::3:FFFE)
    • Rozsah CIDR (příklady: 10.0.0.0/24, 2001:0DB8::/110)
    • Rozsah definovaný počátečními a koncovými IP adresami (příklady: 192.168.0.1-192.168.0.9, 2001:0DB8::-2001:0DB8::3:FFFF)
  • current(indexName)

    • Speciální funkce, která se dá použít pouze uvnitř výrazů počtu.

Příklad funkce Policy

Tento příklad pravidla zásad používá resourceGroup funkci prostředku k získání name vlastnosti v kombinaci s concat maticovou a objektovou funkcí k vytvoření like podmínky, která vynucuje název prostředku, aby začínal s názvem skupiny prostředků.

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

Omezení pravidel zásad

Omezení vynucovaná během vytváření

Při vytváření nebo přiřazování zásady se vynucují omezení struktury pravidel zásad. Pokusy o vytvoření nebo přiřazení definic zásad, které překračují tato omezení, selžou.

Limit Hodnota Další podrobnosti
Výrazy podmínky v podmínce if 4096
Výrazy podmínky v then bloku 128 Platí pro existenceCondition zásady auditIfNotExists a deployIfNotExists
Počet funkcí zásad na pravidlo zásad 2048
Počet parametrů funkce zásad 128 Příklad: [function('parameter1', 'parameter2', ...)]
Hloubka vnořených funkcí zásad 64 Příklad: [function(nested1(nested2(...)))]
Délka řetězce výrazu funkcí zásad 81920 Příklad: délka "[function(....)]"
Field count výrazy na pole 5
Value count Výrazy na pravidlo zásad 10
Value count Počet iterací výrazů 100 U vnořených Value count výrazů to zahrnuje také počet iterací nadřazeného výrazu.

Omezení vynucovaná během vyhodnocení

Omezuje velikosti objektů, které jsou zpracovávány funkcemi zásad během vyhodnocení zásad. Tato omezení se při vytváření nedají vždy vynutit, protože závisí na vyhodnocovaném obsahu. Příklad:

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

Délka řetězce vytvořeného concat() funkcí závisí na hodnotě vlastností v vyhodnocených prostředcích.

Limit Hodnota Příklad
Délka řetězce vráceného funkcí 131072 [concat(field('longString1'), field('longString2'))]
Hloubka složitých objektů poskytovaných jako parametr nebo vrácených funkcí 128 [union(field('largeObject1'), field('largeObject2'))]
Počet uzlů složitých objektů poskytovaných jako parametr nebo vrácených funkcí 32768 [concat(field('largeArray1'), field('largeArray2'))]

Upozorňující

Zásady, které při vyhodnocování překročí výše uvedené limity, se stanou zásadou deny a můžou blokovat příchozí žádosti. Při psaní zásad se složitými funkcemi mějte na paměti tato omezení a otestujte zásady na prostředcích, které mají potenciál je překročit.

Další kroky