Skapa principer för matrisegenskaper på Azure-resurser
Azure Resource Manager-egenskaper definieras ofta som strängar och booleska värden. När det finns en en-till-många-relation definieras komplexa egenskaper i stället som matriser. I Azure Policy används matriser på flera olika sätt:
- Typ av definitionsparameter för att tillhandahålla flera alternativ.
- En del av en principregel som använder villkoren
in
ellernotIn
. - En del av en principregel som räknar hur många matrismedlemmar som uppfyller ett villkor.
- I tilläggs- och ändringseffekterna för att uppdatera en befintlig matris
Den här artikeln beskriver varje användning av Azure Policy och innehåller flera exempeldefinitioner.
Parametermatriser
Definiera en parametermatris
Om du definierar en parameter som en matris kan du använda principens flexibilitet när mer än ett värde behövs. Den här principdefinitionen tillåter valfri enskild plats för parametern allowedLocations
och standardvärdet eastus2:
"parameters": {
"allowedLocations": {
"type": "string",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": "eastus2"
}
}
Precis som type
strängen kan endast ett värde anges när principen tilldelas. Om den här principen tilldelas tillåts resurser i omfånget endast inom en enda Azure-region. De flesta principdefinitioner måste tillåta en lista över godkända alternativ, till exempel att tillåta eastus2, eastus och westus2.
Om du vill skapa principdefinitionen för att tillåta flera alternativ använder du matrisen type
. Samma princip kan skrivas om på följande sätt:
"parameters": {
"allowedLocations": {
"type": "array",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": [
"eastus2"
],
"allowedValues": [
"eastus2",
"eastus",
"westus2"
]
}
}
Kommentar
När en principdefinition har sparats kan egenskapen för type
en parameter inte ändras.
Den här nya parameterdefinitionen tar mer än ett värde under principtilldelningen. Med matrisegenskapen allowedValues
definierad begränsas de värden som är tillgängliga under tilldelningen ytterligare till den fördefinierade listan med alternativ. Användning av allowedValues
är valfritt.
Skicka värden till en parametermatris under tilldelningen
När du tilldelar principen via Azure Portal visas en parameter med type
matris som en enda textruta. Tipset säger Use ; to separate values. (e.g. London;New York)
. Använd följande sträng för att skicka de tillåtna platsvärdena eastus2, eastus och westus2 till parametern:
eastus2;eastus;westus2
Formatet för parametervärdet skiljer sig när du använder Azure CLI, Azure PowerShell eller REST-API:et. Värdena skickas via en JSON-sträng som också innehåller namnet på parametern.
{
"allowedLocations": {
"value": [
"eastus2",
"eastus",
"westus2"
]
}
}
Om du vill använda den här strängen med varje SDK använder du följande kommandon:
- Azure CLI: Kommando az principtilldelning skapa med parametern
params
. - Azure PowerShell: Cmdlet New-AzPolicyAssignment med parametern
PolicyParameter
. - REST API: I PUT-skapandeåtgärden som en del av begärandetexten som värdet för
properties.parameters
egenskapen.
Använda matriser under förhållanden
In och notIn
Villkoren in
och notIn
fungerar endast med matrisvärden. De kontrollerar förekomsten av ett värde i en matris. Matrisen kan vara en literal JSON-matris eller en referens till en matrisparameter. Till exempel:
{
"field": "tags.environment",
"in": [
"dev",
"test"
]
}
{
"field": "location",
"notIn": "[parameters('allowedLocations')]"
}
Antal värden
Värderäkningsuttrycket räknar hur många matrismedlemmar som uppfyller ett villkor. Det ger ett sätt att utvärdera samma villkor flera gånger med olika värden för varje iteration. Följande villkor kontrollerar till exempel om resursnamnet matchar något mönster från en matris med mönster:
{
"count": {
"value": [
"test*",
"dev*",
"prod*"
],
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
För att utvärdera uttrycket utvärderar Azure Policy villkoret where
tre gånger, en gång för varje medlem [ "test*", "dev*", "prod*" ]
i och räknar hur många gånger det utvärderades till true
. Vid varje iteration paras värdet för den aktuella matrismedlemmen ihop med pattern
indexnamnet som definieras av count.name
. Det här värdet kan sedan refereras i villkoret where
genom att anropa en särskild mallfunktion: current('pattern')
.
Iteration | current('pattern') returnerat värde |
---|---|
1 | "test*" |
2 | "dev*" |
3 | "prod*" |
Villkoret är endast sant om antalet resultat är större än 0.
Om du vill göra det tidigare villkoret mer generiskt använder du en parameters
referens i stället för en literalmatris:
{
"count": {
"value": "[parameters('patterns')]",
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
När uttrycket value count
inte är under något annat count
uttryck är count.name
det valfritt och current()
funktionen kan användas utan argument:
{
"count": {
"value": "[parameters('patterns')]",
"where": {
"field": "name",
"like": "[current()]"
}
},
"greater": 0
}
Stöder value count
även matriser med komplexa objekt, vilket möjliggör mer komplexa villkor. Följande villkor definierar till exempel ett önskat taggvärde för varje namnmönster och kontrollerar om resursnamnet matchar mönstret, men inte har det obligatoriska taggvärdet:
{
"count": {
"value": [
{
"pattern": "test*",
"envTag": "dev"
},
{
"pattern": "dev*",
"envTag": "dev"
},
{
"pattern": "prod*",
"envTag": "prod"
},
],
"name": "namePatternRequiredTag",
"where": {
"allOf": [
{
"field": "name",
"like": "[current('namePatternRequiredTag').pattern]"
},
{
"field": "tags.env",
"notEquals": "[current('namePatternRequiredTag').envTag]"
}
]
}
},
"greater": 0
}
Användbara exempel finns i exempel på värdeantal.
Referera till matrisresursegenskaper
Många användningsfall kräver arbete med matrisegenskaper i den utvärderade resursen. Vissa scenarier kräver att du refererar till en hel matris (till exempel att kontrollera dess längd). Andra kräver att ett villkor tillämpas på varje enskild matrismedlem (till exempel se till att alla brandväggsregler blockerar åtkomst från Internet). Att förstå olika sätt som Azure Policy kan referera till resursegenskaper och hur dessa referenser beter sig när de refererar till matrisegenskaper är nyckeln för att skriva villkor som täcker dessa scenarier.
Referera till resursegenskaper
Resursegenskaper kan refereras till av Azure Policy med hjälp av alias Det finns två sätt att referera till värdena för en resursegenskap i Azure Policy:
Använd fältvillkor för att kontrollera om alla markerade resursegenskaper uppfyller ett villkor. Exempel:
{ "field": "Microsoft.Test/resourceType/property", "equals": "value" }
Använd
field()
funktionen för att komma åt värdet för en egenskap. Exempel:{ "value": "[take(field('Microsoft.Test/resourceType/property'), 7)]", "equals": "prefix_" }
Fältvillkoret har ett implicit allOf
beteende. Om aliaset representerar en samling värden kontrollerar det om alla enskilda värden uppfyller villkoret. Funktionen field()
returnerar de värden som representeras av aliaset som det är, som sedan kan manipuleras av andra mallfunktioner.
Referera till matrisfält
Matrisresursegenskaper representeras av två olika typer av alias. Ett normalt alias och matrisalias som har [*]
kopplats till det:
Microsoft.Test/resourceType/stringArray
Microsoft.Test/resourceType/stringArray[*]
Referera till matrisen
Det första aliaset representerar ett enda värde, värdet för stringArray
egenskapen från begärandeinnehållet. Eftersom värdet för den egenskapen är en matris är det inte användbart i principvillkor. Till exempel:
{
"field": "Microsoft.Test/resourceType/stringArray",
"equals": "..."
}
Det här villkoret jämför hela stringArray
matrisen med ett enda strängvärde. De flesta villkor, inklusive equals
, accepterar endast strängvärden, så det används inte mycket för att jämföra en matris med en sträng. Huvudscenariot där det är användbart att referera till matrisegenskapen är när du kontrollerar om den finns:
{
"field": "Microsoft.Test/resourceType/stringArray",
"exists": "true"
}
field()
Med funktionen är det returnerade värdet matrisen från begärandeinnehållet, som sedan kan användas med någon av de mallfunktioner som stöds som accepterar matrisargument. Följande villkor kontrollerar till exempel om längden stringArray
på är större än 0:
{
"value": "[length(field('Microsoft.Test/resourceType/stringArray'))]",
"greater": 0
}
Referera till samling med matrismedlemmar
Alias som använder syntaxen [*]
representerar en samling egenskapsvärden som valts från en matrisegenskap, vilket skiljer sig från att välja själva matrisegenskapen. Returnerar till exempel Microsoft.Test/resourceType/stringArray[*]
en samling som har alla medlemmar stringArray
i . Som tidigare nämnts kontrollerar ett field
villkor att alla valda resursegenskaper uppfyller villkoret. Därför är följande villkor endast sant om alla medlemmar stringArray
i är lika med "value"
.
{
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "value"
}
Om matrisen är tom utvärderas villkoret till sant eftersom ingen medlem i matrisen bryter mot den. I det här scenariot är rekommendationen att använda count-uttrycket i stället. Om matrisen innehåller objekt kan ett [*]
alias användas för att välja värdet för en specifik egenskap från varje matrismedlem. Exempel:
{
"field": "Microsoft.Test/resourceType/objectArray[*].property",
"equals": "value"
}
Det här villkoret gäller om värdena för alla property
egenskaper i objectArray
är lika med "value"
. Fler exempel finns i Fler aliasexempel.
När du använder field()
funktionen för att referera till ett matrisalias är det returnerade värdet en matris med alla valda värden. Det här beteendet innebär att det vanliga användningsfallet för field()
funktionen, möjligheten att tillämpa mallfunktioner på resursegenskapsvärden, är begränsad. De enda mallfunktioner som kan användas i det här fallet är de som accepterar matrisargument. Det är till exempel möjligt att hämta längden på matrisen med [length(field('Microsoft.Test/resourceType/objectArray[*].property'))]
. Mer komplexa scenarier som att tillämpa mallfunktionen på varje matrismedlem och jämföra den med ett önskat värde är dock bara möjliga när du count
använder uttrycket. Mer information finns i Fältantaluttryck.
Sammanfattningsvärdet finns i följande exempel på resursinnehåll och de valda värden som returneras av olika alias:
{
"tags": {
"env": "prod"
},
"properties": {
"stringArray": [
"a",
"b",
"c"
],
"objectArray": [
{
"property": "value1",
"nestedArray": [
1,
2
]
},
{
"property": "value2",
"nestedArray": [
3,
4
]
}
]
}
}
När du använder fältvillkoret för exempelresursinnehållet är resultatet följande:
Alias | Valda värden |
---|---|
Microsoft.Test/resourceType/missingArray |
null |
Microsoft.Test/resourceType/missingArray[*] |
En tom samling värden. |
Microsoft.Test/resourceType/missingArray[*].property |
En tom samling värden. |
Microsoft.Test/resourceType/stringArray |
["a", "b", "c"] |
Microsoft.Test/resourceType/stringArray[*] |
"a" , , "b" "c" |
Microsoft.Test/resourceType/objectArray[*] |
{ "property": "value1", "nestedArray": [ 1, 2 ] } ,{ "property": "value2", "nestedArray": [ 3, 4 ] } |
Microsoft.Test/resourceType/objectArray[*].property |
"value1" , "value2" |
Microsoft.Test/resourceType/objectArray[*].nestedArray |
[ 1, 2 ] , [ 3, 4 ] |
Microsoft.Test/resourceType/objectArray[*].nestedArray[*] |
1 , 2 , , 3 4 |
När du använder field()
funktionen i exempelresursinnehållet är resultatet följande:
Uttryck | Returnerat värde |
---|---|
[field('Microsoft.Test/resourceType/missingArray')] |
"" |
[field('Microsoft.Test/resourceType/missingArray[*]')] |
[] |
[field('Microsoft.Test/resourceType/missingArray[*].property')] |
[] |
[field('Microsoft.Test/resourceType/stringArray')] |
["a", "b", "c"] |
[field('Microsoft.Test/resourceType/stringArray[*]')] |
["a", "b", "c"] |
[field('Microsoft.Test/resourceType/objectArray[*]')] |
[{ "property": "value1", "nestedArray": [ 1, 2 ] }, { "property": "value2", "nestedArray": [ 3, 4 ] }] |
[field('Microsoft.Test/resourceType/objectArray[*].property')] |
["value1", "value2"] |
[field('Microsoft.Test/resourceType/objectArray[*].nestedArray')] |
[[ 1, 2 ], [ 3, 4 ]] |
[field('Microsoft.Test/resourceType/objectArray[*].nestedArray[*]')] |
[1, 2, 3, 4] |
Fältantalsuttryck
Fältantalsuttryck räknar hur många matrismedlemmar som uppfyller ett villkor och jämför antalet med ett målvärde. Count
är mer intuitivt och mångsidigt för att utvärdera matriser jämfört med field
villkor. Syntax:
{
"count": {
"field": <[*
] alias>,
"where": <optional policy condition expression>
},
"equals|greater|less|any other operator": <target value>
}
När det används utan villkor where
count
returnerar du bara längden på en matris. Med exempelresursinnehållet från föregående avsnitt utvärderas följande count
uttryck till true
eftersom stringArray
det har tre medlemmar:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]"
},
"equals": 3
}
Det här beteendet fungerar också med kapslade matriser. Följande uttryck utvärderas till true
exempel count
eftersom det finns fyra matrismedlemmar i matrisernanestedArray
:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]"
},
"greaterOrEquals": 4
}
Kraften count
i är i villkoret where
. När count
har angetts räknar Azure Policy upp matrismedlemmarna och utvärderar var och en mot villkoret och räknar hur många matrismedlemmar som utvärderas till true
. I varje iteration av villkorsutvärderingen where
väljer Azure Policy en enskild matrismedlem i
och utvärderar resursinnehållet mot villkoret where
som om i
det är den enda medlemmen i matrisen. Om du bara har en matrismedlem tillgänglig i varje iteration kan du tillämpa komplexa villkor på varje enskild matrismedlem.
Exempel:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "a"
}
},
"equals": 1
}
För att utvärdera count
uttrycket utvärderar Azure Policy villkoret where
tre gånger, en gång för varje medlem stringArray
i och räknar hur många gånger det utvärderades till true
. När villkoret where
refererar till Microsoft.Test/resourceType/stringArray[*]
matrismedlemmarna, i stället för att välja alla medlemmar stringArray
i , väljer det bara en enskild matrismedlem varje gång:
Iteration | Markerade Microsoft.Test/resourceType/stringArray[*] värden |
where Utvärderingsresultat |
---|---|---|
1 | "a" |
true |
2 | "b" |
false |
3 | "c" |
false |
Returnerar count
1
.
Här är ett mer komplext uttryck:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"allOf": [
{
"field": "Microsoft.Test/resourceType/objectArray[*].property",
"equals": "value2"
},
{
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]",
"greater": 2
}
]
}
},
"equals": 1
}
Iteration | Valda värden | where Utvärderingsresultat |
---|---|---|
1 | Microsoft.Test/resourceType/objectArray[*].property =>"value1" Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =,> 1 2 |
false |
2 | Microsoft.Test/resourceType/objectArray[*].property =>"value2" Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =,> 3 4 |
true |
Returnerar count
1
.
Det faktum att where
uttrycket utvärderas mot hela begärandeinnehållet (med endast ändringar i matrismedlemmen som för närvarande räknas upp) innebär att villkoret where
även kan referera till fält utanför matrisen:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"field": "tags.env",
"equals": "prod"
}
},
"equals": 0
}
Iteration | Valda värden | where Utvärderingsresultat |
---|---|---|
1 | tags.env =>"prod" |
true |
2 | tags.env =>"prod" |
true |
Kapslade antal uttryck kan användas för att tillämpa villkor på kapslade matrisfält. Följande villkor kontrollerar till exempel att matrisen objectArray[*]
har exakt två medlemmar med nestedArray[*]
som innehåller en eller flera medlemmar:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]"
},
"greaterOrEquals": 1
}
},
"equals": 2
}
Iteration | Valda värden | Utvärderingsresultat för kapslat antal |
---|---|---|
1 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1 , 2 |
nestedArray[*] har 2 medlemmar =>true |
2 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3 , 4 |
nestedArray[*] har 2 medlemmar =>true |
Eftersom båda medlemmarna objectArray[*]
i har en underordnad matris nestedArray[*]
med två medlemmar returnerar 2
uttrycket för yttre antal .
Mer komplext exempel: kontrollera att matrisen objectArray[*]
har exakt två medlemmar med alla medlemmar som är 2
lika med nestedArray[*]
eller 3
:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]",
"in": [
2,
3
]
}
},
"greaterOrEquals": 1
}
},
"equals": 2
}
Iteration | Valda värden | Utvärderingsresultat för kapslat antal |
---|---|---|
1 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1 , 2 |
nestedArray[*] contains 2 =>true |
2 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3 , 4 |
nestedArray[*] contains 3 =>true |
Eftersom båda medlemmarna objectArray[*]
i har en underordnad matris nestedArray[*]
som innehåller antingen 2
eller 3
returnerar 2
uttrycket för yttre antal .
Kommentar
Kapslade fältantalsuttryck kan bara referera till kapslade matriser. Till exempel kan antalsuttryck som refererar till ha ett kapslat antal som riktar sig till Microsoft.Test/resourceType/objectArray[*]
den kapslade matrisen Microsoft.Test/resourceType/objectArray[*].nestedArray[*]
, men det kan inte ha ett kapslat antalsuttryck som är riktat mot Microsoft.Test/resourceType/stringArray[*]
.
Komma åt aktuell matrismedlem med mallfunktioner
När du använder mallfunktioner använder du current()
funktionen för att komma åt värdet för den aktuella matrismedlemmen eller värdena för någon av dess egenskaper. Om du vill komma åt värdet för den aktuella matrismedlemmen skickar du aliaset som definierats i count.field
eller något av dess underordnade alias som ett argument till current()
funktionen. Till exempel:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"value": "[current('Microsoft.Test/resourceType/objectArray[*].property')]",
"like": "value*"
}
},
"equals": 2
}
Iteration | current() returnerat värde |
where Utvärderingsresultat |
---|---|---|
1 | Värdet property för i den första medlemmen objectArray[*] i : value1 |
true |
2 | Värdet property för i den första medlemmen objectArray[*] i : value2 |
true |
Fältfunktionen inuti där villkor
Funktionen field()
kan också användas för att komma åt värdet för den aktuella matrismedlemmen så länge count-uttrycket inte finns i ett existensvillkor (field()
funktionen refererar alltid till resursen som utvärderas i if-villkoret). Beteendet field()
för när du refererar till den utvärderade matrisen baseras på följande begrepp:
- Matrisalias matchas till en samling värden som valts från alla matrismedlemmar.
field()
funktioner som refererar till matrisalias returnerar en matris med de valda värdena.- Om du refererar till det räknade matrisaliaset i villkoret
where
returneras en samling med ett enda värde valt från matrismedlemmen som utvärderas i den aktuella iterationen.
Det här beteendet innebär att när den refererar till den räknade matrismedlemmen med en field()
funktion inuti villkoret where
returnerar den en matris med en enda medlem. Även om det här beteendet kanske inte är intuitivt är det konsekvent med tanken att matrisalias alltid returnerar en samling valda egenskaper. Här är ett exempel:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "[field('Microsoft.Test/resourceType/stringArray[*]')]"
}
},
"equals": 0
}
Iteration | Uttrycksvärden | where Utvärderingsresultat |
---|---|---|
1 | Microsoft.Test/resourceType/stringArray[*] = =>"a" [field('Microsoft.Test/resourceType/stringArray[*]')] = >[ "a" ] |
false |
2 | Microsoft.Test/resourceType/stringArray[*] = =>"b" [field('Microsoft.Test/resourceType/stringArray[*]')] = >[ "b" ] |
false |
3 | Microsoft.Test/resourceType/stringArray[*] = =>"c" [field('Microsoft.Test/resourceType/stringArray[*]')] = >[ "c" ] |
false |
När det därför finns ett behov av att komma åt värdet för det räknade matrisaliaset med en field()
funktion, är sättet att göra det att omsluta det med en first()
mallfunktion:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "[first(field('Microsoft.Test/resourceType/stringArray[*]'))]"
}
}
}
Iteration | Uttrycksvärden | where Utvärderingsresultat |
---|---|---|
1 | Microsoft.Test/resourceType/stringArray[*] = =>"a" [first(field('Microsoft.Test/resourceType/stringArray[*]'))] = >"a" |
true |
2 | Microsoft.Test/resourceType/stringArray[*] = =>"b" [first(field('Microsoft.Test/resourceType/stringArray[*]'))] = >"b" |
true |
3 | Microsoft.Test/resourceType/stringArray[*] = =>"c" [first(field('Microsoft.Test/resourceType/stringArray[*]'))] = >"c" |
true |
Användbara exempel finns i Fältantalsexempel.
Ändra matriser
Lägg till och ändra ändra egenskaper för en resurs när den skapas eller uppdateras. När du arbetar med matrisegenskaper beror beteendet för dessa effekter på om åtgärden försöker ändra aliaset [*]
eller inte:
Kommentar
Användning av effekten modify
med alias är för närvarande i förhandsversion.
Alias | Effekt | Resultat |
---|---|---|
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
append |
Azure Policy lägger till hela matrisen som anges i effektinformationen om den saknas. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
modify med add åtgärd |
Azure Policy lägger till hela matrisen som anges i effektinformationen om den saknas. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
modify med addOrReplace åtgärd |
Azure Policy lägger till hela matrisen som anges i effektinformationen om den saknas eller ersätter den befintliga matrisen. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
append |
Azure Policy lägger till matrismedlemmen som anges i effektinformationen. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
modify med add åtgärd |
Azure Policy lägger till matrismedlemmen som anges i effektinformationen. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
modify med addOrReplace åtgärd |
Azure Policy tar bort alla befintliga matrismedlemmar och lägger till matrismedlemmen som anges i effektinformationen. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
append |
Azure Policy lägger till ett värde i action egenskapen för varje matrismedlem. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
modify med add åtgärd |
Azure Policy lägger till ett värde i action egenskapen för varje matrismedlem. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
modify med addOrReplace åtgärd |
Azure Policy lägger till eller ersätter den befintliga action egenskapen för varje matrismedlem. |
Mer information finns i tilläggsexemplen.
Fler aliasexempel
Rekommendationen är att använda fältantalsuttrycken för att kontrollera om allOf
eller anyOf
medlemmarna i en matris i begärandeinnehållet uppfyller ett villkor. För vissa enkla villkor är det möjligt att uppnå samma resultat genom att använda en fältåtkomst med ett matrisalias enligt beskrivningen i Referera till samlingen med matrismedlemmar. Det här mönstret kan vara användbart i principregler som överskrider gränsen för tillåtna count
uttryck. Här är exempel på vanliga användningsfall:
Exempelprincipregeln för följande scenariotabell:
"policyRule": {
"if": {
"allOf": [
{
"field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules",
"exists": "true"
},
<-- Condition (see table below) -->
]
},
"then": {
"effect": "[parameters('effectType')]"
}
}
Matrisen ipRules
är följande för följande scenariotabell:
"ipRules": [
{
"value": "127.0.0.1",
"action": "Allow"
},
{
"value": "192.168.1.1",
"action": "Allow"
}
]
För vart och ett av följande villkorsexempel ersätter du <field>
med "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].value"
.
Följande resultat är resultatet av kombinationen av villkoret och exempelprincipregeln och matrisen med tidigare befintliga värden:
Villkor | Resultat | Scenario | Förklaring |
---|---|---|---|
{<field>,"notEquals":"127.0.0.1"} |
Ingenting | Ingen matchning | Ett matriselement utvärderas som falskt (127.0.0.1 != 127.0.0.1 ) och ett som sant (127.0.0.1 != 192.168.1.1 ), så villkoret notEquals är falskt och effekten utlöses inte. |
{<field>,"notEquals":"10.0.4.1"} |
Principeffekt | Ingen matchning | Båda matriselementen utvärderas som sanna (10.0.4.1 != 127.0.0.1 and 10.0.4.1 != 192.168.1.1 ), så villkoret notEquals är sant och effekten utlöses. |
"not":{<field>,"notEquals":"127.0.0.1" } |
Principeffekt | En eller flera matchning | Ett matriselement utvärderas som falskt (127.0.0.1 != 127.0.0.1 ) och ett som sant (127.0.0.1 != 192.168.1.1 ), så villkoret notEquals är falskt. Den logiska operatorn utvärderas som sant (inte falskt), så effekten utlöses. |
"not":{<field>,"notEquals":"10.0.4.1"} |
Ingenting | En eller flera matchning | Båda matriselementen utvärderas som sanna (10.0.4.1 != 127.0.0.1 and 10.0.4.1 != 192.168.1.1 ), så villkoret notEquals är sant. Den logiska operatorn utvärderas som false (inte sant), så effekten utlöses inte. |
"not":{<field>,"Equals":"127.0.0.1"} |
Principeffekt | Alla matchar inte | Ett matriselement utvärderas som sant (127.0.0.1 == 127.0.0.1 ) och ett som falskt (127.0.0.1 == 192.168.1.1 ), så villkoret Equals är falskt. Den logiska operatorn utvärderas som sant (inte falskt), så effekten utlöses. |
"not":{<field>,"Equals":"10.0.4.1"} |
Principeffekt | Alla matchar inte | Båda matriselementen utvärderas som false (10.0.4.1 == 127.0.0.1 and 10.0.4.1 == 192.168.1.1 ), så villkoret Equals är falskt. Den logiska operatorn utvärderas som sant (inte falskt), så effekten utlöses. |
{<field>,"Equals":"127.0.0.1"} |
Ingenting | Alla matchning | Ett matriselement utvärderas som sant (127.0.0.1 == 127.0.0.1 ) och ett som falskt (127.0.0.1 == 192.168.1.1 ), så villkoret Equals är falskt och effekten utlöses inte. |
{<field>,"Equals":"10.0.4.1"} |
Ingenting | Alla matchning | Båda matriselementen utvärderas som false (10.0.4.1 == 127.0.0.1 and 10.0.4.1 == 192.168.1.1 ), så villkoret Equals är falskt och effekten utlöses inte. |
Nästa steg
- Granska exempel i Azure Policy-exempel.
- Granska Azure Policy-definitionsstrukturen.
- Granska Förstå policy-effekter.
- Förstå hur du programmatiskt skapar principer.
- Lär dig hur du åtgärdar icke-kompatibla resurser.
- Granska vad en hanteringsgrupp är med Organisera dina resurser med Azure-hanteringsgrupper.