Principregel för Azure Policy-definitionsstruktur
Principregeln består av if
och then
blockerar. I blocket if
definierar du ett eller flera villkor som anger när principen tillämpas. Du kan använda logiska operatorer för dessa villkor för att exakt definiera scenariot för en princip.
Fullständig information om varje effekt, utvärderingsordning, egenskaper och exempel finns i Grunderna för Azure Policy-definitioner.
I blocket then
definierar du den effekt som inträffar när if
villkoren uppfylls.
{
"if": {
<condition> | <logical operator>
},
"then": {
"effect": "deny | audit | modify | denyAction | append | auditIfNotExists | deployIfNotExists | disabled"
}
}
Mer information om policyRule finns i principdefinitionsschemat.
Logiska operatorer
Logiska operatorer som stöds är:
"not": {condition or operator}
"allOf": [{condition or operator},{condition or operator}]
"anyOf": [{condition or operator},{condition or operator}]
Syntaxen not
inverteras resultatet av villkoret. Syntaxen allOf
(liknar den logiska and
åtgärden) kräver att alla villkor är sanna. Syntaxen anyOf
(liknar den logiska or
åtgärden) kräver att ett eller flera villkor är sanna.
Du kan kapsla logiska operatorer. I följande exempel visas en not
åtgärd som är kapslad i en allOf
åtgärd.
"if": {
"allOf": [
{
"not": {
"field": "tags",
"containsKey": "application"
}
},
{
"field": "type",
"equals": "Microsoft.Storage/storageAccounts"
}
]
},
Villkor
Ett villkor utvärderar om ett värde uppfyller vissa kriterier. Villkoren som stöds är:
"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"
För less
, lessOrEquals
, greater
, och greaterOrEquals
, om egenskapstypen inte matchar villkorstypen utlöses ett fel. Strängjämförelser görs med hjälp av InvariantCultureIgnoreCase
.
När du använder like
villkoren och notLike
anger du ett jokertecken (*
) i värdet. Värdet får inte ha fler än ett jokertecken.
När du använder match
villkoren och notMatch
anger du en hashtagg (#
) som matchar en siffra, ett frågetecken (?
) för en bokstav och en punkt (.
) som matchar alla tecken och andra tecken som matchar det faktiska tecknet. Medan match
och notMatch
är skiftlägeskänsliga är alla andra villkor som utvärderar en stringValue
skiftlägeskänsliga. Skiftlägesokänsliga alternativ finns i matchInsensitively
och notMatchInsensitively
.
Fält
Villkor som utvärderar om värdena för egenskaper i nyttolasten för resursbegäran uppfyller vissa kriterier kan skapas med hjälp av ett field
uttryck. Följande fält stöds:
name
fullName
- Returnerar resursens fullständiga namn. Det fullständiga namnet på en resurs är resursnamnet som förebereds av överordnade resursnamn (till exempel
myServer/myDatabase
).
- Returnerar resursens fullständiga namn. Det fullständiga namnet på en resurs är resursnamnet som förebereds av överordnade resursnamn (till exempel
kind
type
location
- Platsfält normaliseras för att stödja olika format. Till exempel
East US 2
anses vara lika medeastus2
. - Använd globalt för resurser som är platsagnostiska.
- Platsfält normaliseras för att stödja olika format. Till exempel
id
- Returnerar resurs-ID för resursen som utvärderas.
- Exempel:
/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myRG/providers/Microsoft.KeyVault/vaults/myVault
identity.type
- Returnerar den typ av hanterad identitet som är aktiverad på resursen.
tags
tags['<tagName>']
- Den här hakparentessyntaxen stöder taggnamn som har skiljetecken, till exempel bindestreck, punkt eller blanksteg.
- Var
tagName
är namnet på taggen som villkoret ska verifieras för. - Exempel:
tags['Acct.CostCenter']
varAcct.CostCenter
är namnet på taggen.
tags['''<tagName>''']
- Den här hakparentessyntaxen stöder taggnamn som har apostrofer i den genom att undvika med dubbla apostrofer.
- Var
tagName
är namnet på taggen som villkoret ska verifieras för. - Exempel:
tags['''My.Apostrophe.Tag''']
var'My.Apostrophe.Tag'
är namnet på taggen.
Kommentar
tags.<tagName>
,tags[tagName]
, ochtags[tag.with.dots]
är fortfarande acceptabla sätt att deklarera ett taggfält. De föredragna uttrycken är dock de som anges ovan.egenskapsalias – en lista finns i Alias.
Kommentar
I
field
uttryck som refererar till matrisalias[*]
utvärderas varje element i matrisen individuellt med logiskaand
mellan element. Mer information finns i Referera till matrisresursegenskaper.
Villkor som använder field
uttryck kan ersätta den äldre principdefinitionssyntaxen "source": "action"
, som brukade fungera för skrivåtgärder. Detta stöds till exempel inte längre:
{
"source": "action",
"like": "Microsoft.Network/publicIPAddresses/*"
}
Men det önskade beteendet kan uppnås med hjälp av field
logik:
{
"field": "type",
"equals": "Microsoft.Network/publicIPAddresses"
}
Använda taggar med parametrar
Ett parametervärde kan skickas till ett taggfält. Om du skickar en parameter till ett taggfält ökar flexibiliteten för principdefinitionen under principtilldelningen.
I följande exempel concat
används för att skapa en taggar fältsökning för taggen med namnet värdet för parametern tagName
. Om taggen modify
inte finns används effekten för att lägga till taggen med hjälp av värdet för samma namngivna tagguppsättning i den överordnade resursgruppen för granskade resurser med hjälp resourcegroup()
av uppslagsfunktionen.
{
"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"
]
}
}
}
Värde
Villkor som utvärderar om ett värde uppfyller vissa kriterier kan skapas med hjälp av ett value
uttryck. Värden kan vara literaler, värden för parametrar eller returnerade värden för alla mallfunktioner som stöds.
Varning
Om resultatet av en mallfunktion är ett fel misslyckas principutvärderingen. En misslyckad utvärdering är en implicit deny
. Mer information finns i undvika mallfel. Använd enforcementMode för doNotEnforce
att förhindra påverkan av en misslyckad utvärdering på nya eller uppdaterade resurser när du testar och validerar en ny principdefinition.
Värdeexempel
Det här principregelexemplet används value
för att jämföra resultatet av resourceGroup()
funktionen och den returnerade name
egenskapen med ett like
villkor för *netrg
. Regeln nekar alla resurser som Microsoft.Network/*
type
inte finns i någon resursgrupp vars namn slutar i *netrg
.
{
"if": {
"allOf": [
{
"value": "[resourceGroup().name]",
"like": "*netrg"
},
{
"field": "type",
"notLike": "Microsoft.Network/*"
}
]
},
"then": {
"effect": "deny"
}
}
Det här principregelexemplet används value
för att kontrollera om resultatet av flera kapslade funktioner equals
true
. Regeln nekar alla resurser som inte har minst tre taggar.
{
"mode": "indexed",
"policyRule": {
"if": {
"value": "[less(length(field('tags')), 3)]",
"equals": "true"
},
"then": {
"effect": "deny"
}
}
}
Undvika mallfel
Med hjälp av mallfunktioner i value
kan du använda många komplexa kapslade funktioner. Om resultatet av en mallfunktion är ett fel misslyckas principutvärderingen. En misslyckad utvärdering är en implicit deny
. Ett exempel på en value
som misslyckas i vissa scenarier:
{
"policyRule": {
"if": {
"value": "[substring(field('name'), 0, 3)]",
"equals": "abc"
},
"then": {
"effect": "audit"
}
}
}
Exempelprincipregeln ovan använder substring() för att jämföra de tre första tecknen name
i med abc
. Om name
är kortare än tre tecken substring()
resulterar funktionen i ett fel. Det här felet gör att principen blir en deny
effekt.
Använd i stället funktionen if() för att kontrollera om de tre första tecknen är name
lika abc
med utan att tillåta att ett name
kortare tecken än tre tecken orsakar ett fel:
{
"policyRule": {
"if": {
"value": "[if(greaterOrEquals(length(field('name')), 3), substring(field('name'), 0, 3), 'not starting with abc')]",
"equals": "abc"
},
"then": {
"effect": "audit"
}
}
}
Med den ändrade principregeln if()
kontrollerar du längden name
på innan du försöker få ett substring()
på ett värde med färre än tre tecken. Om name
är för kort returneras värdet "inte börjar med abc" i stället och jämförs med abc
. En resurs med ett kort namn som inte börjar med abc
misslyckas fortfarande principregeln, men orsakar inte längre ett fel under utvärderingen.
Antal
Villkor som räknar hur många medlemmar i en matris som uppfyller vissa villkor kan skapas med hjälp av ett count
uttryck. Vanliga scenarier kontrollerar om "minst en av", "exakt en av", "alla" eller "ingen av" matrismedlemmarna uppfyller ett villkor. Utvärderar count
varje matrismedlem för ett villkorsuttryck och summerar de sanna resultaten, som sedan jämförs med uttrycksoperatorn.
Antal fält
Räkna hur många medlemmar i en matris i begärandenyttolasten som uppfyller ett villkorsuttryck. Uttryckens field count
struktur är:
{
"count": {
"field": "<[*] alias>",
"where": {
/* condition expression */
}
},
"<condition>": "<compare the count of true condition expression array members to this value>"
}
Följande egenskaper används med field count
:
count.field
(krävs): Innehåller sökvägen till matrisen och måste vara ett matrisalias.count.where
(valfritt): Villkorsuttrycket som ska utvärderas individuellt för varje matrisaliasmatrismedlem icount.field
. Om den här egenskapen inte tillhandahålls utvärderas alla matrismedlemmar med sökvägen "fält" till true. Alla villkor kan användas i den här egenskapen. Logiska operatorer kan användas i den här egenskapen för att skapa komplexa utvärderingskrav.condition
(krävs): Värdet jämförs med antalet objekt som uppfyllde villkorsuttrycketcount.where
. Ett numeriskt villkor ska användas.
Mer information om hur du arbetar med matrisegenskaper i Azure Policy, inklusive detaljerad förklaring av hur field count
uttrycket utvärderas, finns i Referera till matrisresursegenskaper.
Antal värden
Räkna hur många medlemmar i en matris som uppfyller ett villkor. Matrisen kan vara en literalmatris eller en referens till matrisparametern. Uttryckens value count
struktur är:
{
"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>"
}
Följande egenskaper används med value count
:
count.value
(krävs): Matrisen som ska utvärderas.count.name
(obligatoriskt): Indexnamnet, som består av engelska bokstäver och siffror. Definierar ett namn för värdet för matrismedlemmen som utvärderas i den aktuella iterationen. Namnet används för att referera till det aktuella värdet i villkoretcount.where
. Valfritt när uttrycket inte finns i ett underordnatcount
count
uttryck. När det inte anges anges indexnamnet implicit till"default"
.count.where
(valfritt): Villkorsuttrycket som ska utvärderas individuellt för varje matrismedlem icount.value
. Om den här egenskapen inte tillhandahålls utvärderas alla matrismedlemmar till true. Alla villkor kan användas i den här egenskapen. Logiska operatorer kan användas i den här egenskapen för att skapa komplexa utvärderingskrav. Värdet för den uppräknade matrismedlemmen kan nås genom att anropa den aktuella funktionen.condition
(krävs): Värdet jämförs med antalet objekt som uppfyllde villkorsuttrycketcount.where
. Ett numeriskt villkor ska användas.
Den aktuella funktionen
Funktionen current()
är endast tillgänglig i villkoret count.where
. Den returnerar värdet för matrismedlemmen som för närvarande räknas upp av uttrycksutvärderingen count
.
Användning av värdeantal
current(<index name defined in count.name>)
. Exempel:current('arrayMember')
.current()
. Tillåts endast när uttrycket inte är underordnatvalue count
ett annatcount
uttryck. Returnerar samma värde som ovan.
Om värdet som returneras av anropet är ett objekt stöds egenskapsåtkomster. Exempel: current('objectArrayMember').property
.
Användning av antal fält
current(<the array alias defined in count.field>)
. Exempel:current('Microsoft.Test/resource/enumeratedArray[*]')
current()
. Tillåts endast när uttrycket inte är underordnatfield count
ett annatcount
uttryck. Returnerar samma värde som ovan.current(<alias of a property of the array member>)
. Exempel:current('Microsoft.Test/resource/enumeratedArray[*].property')
Exempel på antal fält
Exempel 1: Kontrollera om en matris är tom
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]"
},
"equals": 0
}
Exempel 2: Kontrollera att endast en matrismedlem uppfyller villkorsuttrycket
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
"equals": "My unique description"
}
},
"equals": 1
}
Exempel 3: Sök efter minst en matrismedlem för att uppfylla villkorsuttrycket
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
"equals": "My common description"
}
},
"greaterOrEquals": 1
}
Exempel 4: Kontrollera att alla objektmatrismedlemmar uppfyller villkorsuttrycket
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
"equals": "description"
}
},
"equals": "[length(field('Microsoft.Network/networkSecurityGroups/securityRules[*]'))]"
}
Exempel 5: Kontrollera att minst en matrismedlem matchar flera egenskaper i villkorsuttrycket
{
"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
}
Exempel 6: Använd current()
funktionen inuti where
villkoren för att få åtkomst till värdet för den uppräknade matrismedlemmen i en mallfunktion. Det här villkoret kontrollerar om ett virtuellt nätverk innehåller ett adressprefix som inte ligger under CIDR-intervallet 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
}
Exempel 7: Använd field()
funktionen inuti where
villkoren för att få åtkomst till värdet för den uppräknade matrismedlemmen. Det här villkoret kontrollerar om ett virtuellt nätverk innehåller ett adressprefix som inte ligger under CIDR-intervallet 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
}
Exempel på värdeantal
Exempel 1: Kontrollera om resursnamnet matchar något av förnamnsmönstren.
{
"count": {
"value": [
"prefix1_*",
"prefix2_*"
],
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
Exempel 2: Kontrollera om resursnamnet matchar något av förnamnsmönstren. Funktionen current()
anger inget indexnamn. Resultatet är detsamma som i föregående exempel.
{
"count": {
"value": [
"prefix1_*",
"prefix2_*"
],
"where": {
"field": "name",
"like": "[current()]"
}
},
"greater": 0
}
Exempel 3: Kontrollera om resursnamnet matchar något av de förnamnsmönster som tillhandahålls av en matrisparameter.
{
"count": {
"value": "[parameters('namePatterns')]",
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
Exempel 4: Kontrollera om något av adressprefixen för det virtuella nätverket inte finns med i listan över godkända prefix.
{
"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
}
Exempel 5: Kontrollera att alla reserverade NSG-regler har definierats i en NSG. Egenskaperna för de reserverade NSG-reglerna definieras i en matrisparameter som innehåller objekt.
Parametervärde:
[
{
"priority": 101,
"access": "deny",
"direction": "inbound",
"destinationPortRange": 22
},
{
"priority": 102,
"access": "deny",
"direction": "inbound",
"destinationPortRange": 3389
}
]
Policy:
{
"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'))]"
}
Principfunktioner
Funktioner kan användas för att introducera ytterligare logik i en principregel. De löses inom principregeln för en principdefinition och inom parametervärden som tilldelats till principdefinitioner i ett initiativ.
Alla Resource Manager-mallfunktioner är tillgängliga att använda i en principregel, förutom följande funktioner och användardefinierade funktioner:
copyIndex()
dateTimeAdd()
dateTimeFromEpoch
dateTimeToEpoch
deployment()
environment()
extensionResourceId()
lambda()
Mer information finns i lambdalistAccountSas()
listKeys()
listSecrets()
list*
managementGroup()
newGuid()
pickZones()
providers()
reference()
resourceId()
subscriptionResourceId()
tenantResourceId()
tenant()
variables()
Kommentar
Dessa funktioner är fortfarande tillgängliga i delen details.deployment.properties.template
av malldistributionen i en deployIfNotExists
principdefinition.
Följande funktion är tillgänglig att använda i en principregel, men skiljer sig från användningen i en Azure Resource Manager-mall (ARM-mall):
utcNow()
– Till skillnad från en ARM-mall kan den här egenskapen användas utanför defaultValue.- Returnerar en sträng som är inställd på aktuellt datum och tid i Universal ISO 8601 DateTime-format
yyyy-MM-ddTHH:mm:ss.fffffffZ
.
- Returnerar en sträng som är inställd på aktuellt datum och tid i Universal ISO 8601 DateTime-format
Följande funktioner är endast tillgängliga i principregler:
addDays(dateTime, numberOfDaysToAdd)
dateTime
: [Obligatorisk] sträng – Sträng i Universal ISO 8601 DateTime-formatet 'åååå-MM-ddTHH:mm:ss. FFFFFFFZ"numberOfDaysToAdd
: [Obligatoriskt] heltal – Antal dagar att lägga till
field(fieldName)
fieldName
: [Obligatorisk] sträng – Namnet på fältet som ska hämtas- Returnerar värdet för fältet från resursen som utvärderas av villkoret If.
field
används främst medauditIfNotExists
ochdeployIfNotExists
för att referera till fält på resursen som utvärderas. Ett exempel på den här användningen kan visas i exemplet DeployIfNotExists.
requestContext().apiVersion
- Returnerar API-versionen av begäran som utlöste principutvärdering (exempel:
2021-09-01
). Det här värdet är den API-version som användes i PUT/PATCH-begäran för utvärderingar vid skapande/uppdatering av resurser. Den senaste API-versionen används alltid under kompatibilitetsutvärderingen av befintliga resurser.
- Returnerar API-versionen av begäran som utlöste principutvärdering (exempel:
policy()
Returnerar följande information om principen som utvärderas. Egenskaper kan nås från det returnerade objektet (exempel:
[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
: [Obligatorisk] sträng – Sträng som anger ett intervall med IP-adresser för att kontrollera om targetRange finns inom.targetRange
: [Obligatorisk] sträng – Sträng som anger ett intervall med IP-adresser som ska verifieras enligt intervallet.- Returnerar ett booleskt värde för om intervallets IP-adressintervall innehåller IP-adressintervallet targetRange . Tomma intervall eller blandning mellan IP-familjer tillåts inte och resulterar i utvärderingsfel.
Format som stöds:
- Enskild IP-adress (exempel:
10.0.0.0
,2001:0DB8::3:FFFE
) - CIDR-intervall (exempel:
10.0.0.0/24
,2001:0DB8::/110
) - Intervall som definieras av start- och slut-IP-adresser (exempel:
192.168.0.1-192.168.0.9
,2001:0DB8::-2001:0DB8::3:FFFF
)
current(indexName)
- Specialfunktion som endast får användas i antal uttryck.
Exempel på principfunktion
Det här principregelexemplet använder resourceGroup
resursfunktionen för att hämta name
egenskapen, kombinerat med matrisen concat
och objektfunktionen för att skapa ett like
villkor som tvingar resursnamnet att börja med resursgruppens namn.
{
"if": {
"not": {
"field": "name",
"like": "[concat(resourceGroup().name,'*')]"
}
},
"then": {
"effect": "deny"
}
}
Principregelbegränsningar
Begränsningar som framtvingas under redigering
Begränsningar för strukturen för principregler framtvingas under redigering eller tilldelning av en princip. Försök att skapa eller tilldela principdefinitioner som överskrider dessa gränser misslyckas.
Gräns | Värde | Ytterligare information |
---|---|---|
Villkorsuttryck i villkoret if |
4096 | |
Villkorsuttryck i then blocket |
128 | Gäller för existenceCondition principer auditIfNotExists och deployIfNotExists |
Principfunktioner per principregel | 2048 | |
Antal parametrar för principfunktion | 128 | Exempel: [function('parameter1', 'parameter2', ...)] |
Djup på kapslade principfunktioner | 64 | Exempel: [function(nested1(nested2(...)))] |
Stränglängd för principfunktionsuttryck | 81920 | Exempel: längden på "[function(....)]" |
Field count uttryck per matris |
5 | |
Value count uttryck per principregel |
10 | |
Value count antal uttrycks iteration |
100 | För kapslade Value count uttryck innehåller detta även iterationsantalet för det överordnade uttrycket |
Begränsningar som framtvingas under utvärderingen
Gränser för storleken på objekt som bearbetas av principfunktioner under principutvärderingen. Dessa gränser kan inte alltid tillämpas under redigeringen eftersom de är beroende av det utvärderade innehållet. Till exempel:
{
"field": "name",
"equals": "[concat(field('stringPropertyA'), field('stringPropertyB'))]"
}
Längden på strängen concat()
som skapas av funktionen beror på värdet för egenskaperna i den utvärderade resursen.
Gräns | Värde | Exempel |
---|---|---|
Längden på den sträng som returneras av en funktion | 131072 | [concat(field('longString1'), field('longString2'))] |
Djup för komplexa objekt som tillhandahålls som en parameter till eller returneras av en funktion | 128 | [union(field('largeObject1'), field('largeObject2'))] |
Antal noder för komplexa objekt som tillhandahålls som en parameter till eller returneras av en funktion | 32768 | [concat(field('largeArray1'), field('largeArray2'))] |
Varning
En princip som överskrider ovanstående gränser under utvärderingen blir i praktiken en deny
princip och kan blockera inkommande begäranden.
När du skriver principer med komplexa funktioner bör du vara uppmärksam på dessa gränser och testa dina principer mot resurser som kan överskrida dem.
Nästa steg
- Mer information om principdefinitionsstruktur finns i grunderna, parametrarna och aliaset.
- För initiativ går du till initiativdefinitionsstruktur.
- Granska exempel i Azure Policy-exempel.
- Granska Förstå policy-effekter.
- Förstå hur du programmatiskt skapar principer.
- Lär dig hur du hämtar efterlevnadsdata.
- Lär dig hur du åtgärdar icke-kompatibla resurser.
- Granska vad en hanteringsgrupp är med Organisera dina resurser med Azure-hanteringsgrupper.