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
, greater
a 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
).
- 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
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 rovnoeastus2
. - Použijte globální prostředky, které jsou nezávislé na umístění.
- Pole umístění jsou normalizována tak, aby podporovala různé formáty.
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
- Vrátí typ spravované identity povolené u prostředku.
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']
kdeAcct.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]
atags[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ýmiand
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
abc
s . 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 abc
hodnotou . 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ý člencount.field
pole 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ňovalycount.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é, pokudcount
výraz není v podřízené části jinéhocount
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ý člencount.value
pole . 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ňovalycount.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, kdyvalue count
výraz není podřízeným jinýmcount
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říkladcurrent('Microsoft.Test/resource/enumeratedArray[*]')
.current()
. Povoleno pouze v případech, kdyfield count
výraz není podřízeným jinýmcount
výrazem. Vrátí stejnou hodnotu jako výše.current(<alias of a property of the array member>)
. Napříkladcurrent('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.fffffffZ
Universal ISO 8601 DateTime .
- Vrátí řetězec, který je nastaven na aktuální datum a čas ve formátu
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 polemiauditIfNotExists
, která se vyhodnocují, adeployIfNotExists
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ů.
- Vrátí verzi rozhraní API požadavku, který aktivoval vyhodnocení zásad (příklad:
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
- Další informace o struktuře definic zásad najdete v základních informacích, parametrech a aliasech.
- V případě iniciativ přejděte ke struktuře definic iniciativ.
- Projděte si příklady v ukázkách azure Policy.
- Projděte si Vysvětlení efektů zásad.
- Seznamte se s programovým vytvářením zásad.
- Zjistěte, jak získat data dodržování předpisů.
- Zjistěte, jak napravit nevyhovující prostředky.
- Zkontrolujte, co je skupina pro správu pomocí uspořádání prostředků pomocí skupin pro správu Azure.