Beleidsregels maken voor matrixeigenschappen in Azure-resources
Azure Resource Manager-eigenschappen worden meestal gedefinieerd als tekenreeksen en booleaanse waarden. Wanneer er een een-op-veel-relatie bestaat, worden complexe eigenschappen in plaats daarvan gedefinieerd als matrices. In Azure Policy worden matrices op verschillende manieren gebruikt:
- Het type van een definitieparameter, om meerdere opties te bieden
- Onderdeel van een beleidsregel die gebruikmaakt van de voorwaarden in of nietIn
- Onderdeel van een beleidsregel waarmee wordt geteld hoeveel matrixleden voldoen aan een voorwaarde
- In de effecten toevoegen en wijzigen om een bestaande matrix bij te werken
Dit artikel behandelt elk gebruik door Azure Policy en bevat verschillende voorbeelddefinities.
Parametermatrices
Een parametermatrix definiëren
Het definiëren van een parameter als een matrix zorgt voor de flexibiliteit van het beleid wanneer er meer dan één waarde nodig is. Deze beleidsdefinitie staat elke locatie toe voor de parameter allowedLocations en de standaardinstellingen voor eastus2:
"parameters": {
"allowedLocations": {
"type": "string",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": "eastus2"
}
}
Omdat het typetekenreeks is, kan slechts één waarde worden ingesteld bij het toewijzen van het beleid. Als dit beleid is toegewezen, zijn resources binnen het bereik slechts toegestaan binnen één Azure-regio. De meeste beleidsdefinities moeten een lijst met goedgekeurde opties toestaan, zoals eastus2, eastus en westus2 toestaan.
Als u de beleidsdefinitie wilt maken om meerdere opties toe te staan, gebruikt u het matrixtype. Hetzelfde beleid kan als volgt worden herschreven:
"parameters": {
"allowedLocations": {
"type": "array",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": [
"eastus2"
],
"allowedValues": [
"eastus2",
"eastus",
"westus2"
]
}
}
Notitie
Zodra een beleidsdefinitie is opgeslagen, kan de eigenschap type voor een parameter niet meer worden gewijzigd.
Deze nieuwe parameterdefinitie neemt meer dan één waarde in beslag tijdens de beleidstoewijzing. Als de matrixeigenschap allowedValues is gedefinieerd, worden de waarden die beschikbaar zijn tijdens de toewijzing verder beperkt tot de vooraf gedefinieerde lijst met keuzes. Het gebruik van allowedValues is optioneel.
Waarden doorgeven aan een parametermatrix tijdens toewijzing
Wanneer u het beleid toewijst via de Azure Portal, wordt een parameter van het typematrix weergegeven als één tekstvak. De hint luidt: 'Gebruik ; om waarden van elkaar te scheiden. (b.v. Londen; New York)". Gebruik de volgende tekenreeks om de toegestane locatiewaarden van eastus2, eastus en westus2 door te geven aan de parameter:
eastus2;eastus;westus2
De indeling voor de parameterwaarde verschilt wanneer u Azure CLI, Azure PowerShell of de REST API gebruikt. De waarden worden doorgegeven via een JSON-tekenreeks die ook de naam van de parameter bevat.
{
"allowedLocations": {
"value": [
"eastus2",
"eastus",
"westus2"
]
}
}
Als u deze tekenreeks met elke SDK wilt gebruiken, gebruikt u de volgende opdrachten:
- Azure CLI: Opdracht az policy assignment create met parameterparameter
- Azure PowerShell: Cmdlet New-AzPolicyAssignment met parameter PolicyParameter
- REST API: In de PUT-maakbewerking als onderdeel van de aanvraagbody als de waarde van de eigenschap properties.parameters
Matrices gebruiken in voorwaarden
In en notIn
De in
voorwaarden en notIn
werken alleen met matrixwaarden. Ze controleren het bestaan van een waarde in een matrix. De matrix kan een letterlijke JSON-matrix of een verwijzing naar een matrixparameter zijn. Bijvoorbeeld:
{
"field": "tags.environment",
"in": [ "dev", "test" ]
}
{
"field": "location",
"notIn": "[parameters('allowedLocations')]"
}
Aantal waarden
Met de expressie value count wordt geteld hoeveel matrixleden voldoen aan een voorwaarde. Het biedt een manier om dezelfde voorwaarde meerdere keren te evalueren, met behulp van verschillende waarden voor elke iteratie. Met de volgende voorwaarde wordt bijvoorbeeld gecontroleerd of de resourcenaam overeenkomt met een patroon uit een matrix met patronen:
{
"count": {
"value": [ "test*", "dev*", "prod*" ],
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
Als u de expressie wilt evalueren, evalueert Azure Policy de where
voorwaarde drie keer, één keer voor elk lid van [ "test*", "dev*", "prod*" ]
, waarbij wordt geteld hoe vaak deze is geëvalueerd naar true
. Bij elke iteratie wordt de waarde van het huidige matrixlid gekoppeld aan de pattern
indexnaam die is gedefinieerd door count.name
. Vervolgens kan binnen de where
voorwaarde naar deze waarde worden verwezen door een speciale sjabloonfunctie aan te roepen: current('pattern')
.
Iteratie | current('pattern') geretourneerde waarde |
---|---|
1 | "test*" |
2 | "dev*" |
3 | "prod*" |
De voorwaarde is alleen waar als het aantal resulterende items groter is dan 0.
Als u de bovenstaande voorwaarde algemener wilt maken, gebruikt u parameterreferentie in plaats van een letterlijke matrix:
{
"count": {
"value": "[parameters('patterns')]",
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
Wanneer de expressie value count niet onder een andere count-expressie staat, count.name
is dit optioneel en kan de current()
functie zonder argumenten worden gebruikt:
{
"count": {
"value": "[parameters('patterns')]",
"where": {
"field": "name",
"like": "[current()]"
}
},
"greater": 0
}
Het aantal waarden ondersteunt ook matrices van complexe objecten, waardoor complexere voorwaarden mogelijk zijn. De volgende voorwaarde definieert bijvoorbeeld een gewenste tagwaarde voor elk naampatroon en controleert of de resourcenaam overeenkomt met het patroon, maar niet de vereiste tagwaarde heeft:
{
"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
}
Zie voorbeelden van waardeaantallen voor nuttige voorbeelden.
Naar eigenschappen van matrixresources verwijzen
Veel use cases vereisen het werken met matrixeigenschappen in de geëvalueerde resource. In sommige scenario's moet u verwijzen naar een hele matrix (bijvoorbeeld het controleren van de lengte). Andere vereisen dat een voorwaarde wordt toegepast op elk afzonderlijk matrixlid (zorg er bijvoorbeeld voor dat alle firewallregels toegang vanaf internet blokkeren). Inzicht in de verschillende manieren waarop Azure Policy kunnen verwijzen naar resource-eigenschappen en hoe deze verwijzingen zich gedragen wanneer ze verwijzen naar matrixeigenschappen, is de sleutel voor het schrijven van voorwaarden die betrekking hebben op deze scenario's.
Naar resource-eigenschappen verwijzen
Naar resource-eigenschappen kan worden verwezen door Azure Policy met behulp van aliassen Er zijn twee manieren om te verwijzen naar de waarden van een resource-eigenschap in Azure Policy:
Gebruik veldvoorwaarde om te controleren of alle geselecteerde resource-eigenschappen voldoen aan een voorwaarde. Voorbeeld:
{ "field" : "Microsoft.Test/resourceType/property", "equals": "value" }
Gebruik
field()
de functie om toegang te krijgen tot de waarde van een eigenschap. Voorbeeld:{ "value": "[take(field('Microsoft.Test/resourceType/property'), 7)]", "equals": "prefix_" }
De veldvoorwaarde heeft een impliciet 'alle'-gedrag. Als de alias een verzameling waarden vertegenwoordigt, wordt gecontroleerd of alle afzonderlijke waarden voldoen aan de voorwaarde. De field()
functie retourneert de waarden die worden vertegenwoordigd door de alias as-is, die vervolgens kan worden bewerkt door andere sjabloonfuncties.
Naar matrixvelden verwijzen
Eigenschappen van matrixresources worden vertegenwoordigd door twee verschillende typen aliassen. Eén 'normale' alias en matrixaliassen die eraan zijn [*]
gekoppeld:
Microsoft.Test/resourceType/stringArray
Microsoft.Test/resourceType/stringArray[*]
Verwijzen naar de matrix
De eerste alias vertegenwoordigt één waarde, de waarde van stringArray
eigenschap uit de aanvraaginhoud. Omdat de waarde van die eigenschap een matrix is, is deze niet nuttig in beleidsvoorwaarden. Bijvoorbeeld:
{
"field": "Microsoft.Test/resourceType/stringArray",
"equals": "..."
}
Met deze voorwaarde wordt de hele stringArray
matrix vergeleken met één tekenreekswaarde. De meeste voorwaarden, waaronder equals
, accepteren alleen tekenreekswaarden, dus het is niet handig om een matrix te vergelijken met een tekenreeks. Het belangrijkste scenario waarin verwijzen naar de matrixeigenschap handig is, is bij het controleren of deze bestaat:
{
"field": "Microsoft.Test/resourceType/stringArray",
"exists": "true"
}
Met de field()
functie is de geretourneerde waarde de matrix uit de aanvraaginhoud, die vervolgens kan worden gebruikt met een van de ondersteunde sjabloonfuncties die matrixargumenten accepteren. Met de volgende voorwaarde wordt bijvoorbeeld gecontroleerd of de lengte van stringArray
groter is dan 0:
{
"value": "[length(field('Microsoft.Test/resourceType/stringArray'))]",
"greater": 0
}
Verwijzen naar de verzameling leden van de matrix
Aliassen die de [*]
syntaxis gebruiken, vertegenwoordigen een verzameling eigenschapswaarden die zijn geselecteerd uit een matrixeigenschap, wat anders is dan het selecteren van de matrixeigenschap zelf. In het geval van Microsoft.Test/resourceType/stringArray[*]
, wordt een verzameling geretourneerd die alle leden van stringArray
bevat. Zoals eerder vermeld, controleert een field
voorwaarde of alle geselecteerde resource-eigenschappen voldoen aan de voorwaarde. Daarom is de volgende voorwaarde alleen waar als alle leden van stringArray
gelijk zijn aan ''value'.
{
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "value"
}
Als de matrix leeg is, wordt de voorwaarde geëvalueerd als true omdat er geen lid van de matrix in strijd is. In dit scenario is het raadzaam om in plaats daarvan de count-expressie te gebruiken. Als de matrix objecten bevat, kan een [*]
alias worden gebruikt om de waarde van een specifieke eigenschap van elk matrixlid te selecteren. Voorbeeld:
{
"field": "Microsoft.Test/resourceType/objectArray[*].property",
"equals": "value"
}
Deze voorwaarde is waar als de waarden van alle property
eigenschappen in objectArray
gelijk zijn aan "value"
. Zie Aanvullende [*] aliasvoorbeelden voor meer voorbeelden.
Wanneer u de field()
functie gebruikt om te verwijzen naar een matrixalias, is de geretourneerde waarde een matrix van alle geselecteerde waarden. Dit gedrag betekent dat het algemene gebruiksvoorbeeld van de field()
functie, de mogelijkheid om sjabloonfuncties toe te passen op resource-eigenschapswaarden, beperkt is. De enige sjabloonfuncties die in dit geval kunnen worden gebruikt, zijn de functies die matrixargumenten accepteren. Het is bijvoorbeeld mogelijk om de lengte van de matrix op te halen met [length(field('Microsoft.Test/resourceType/objectArray[*].property'))]
. Complexere scenario's, zoals het toepassen van een sjabloonfunctie op elk matrixlid en het vergelijken ervan met een gewenste waarde, zijn echter alleen mogelijk wanneer u de count
expressie gebruikt. Zie Expressie voor aantal velden voor meer informatie.
Zie de volgende voorbeeldresource-inhoud en de geselecteerde waarden die door verschillende aliassen worden geretourneerd om samen te vatten:
{
"tags": {
"env": "prod"
},
"properties":
{
"stringArray": [ "a", "b", "c" ],
"objectArray": [
{
"property": "value1",
"nestedArray": [ 1, 2 ]
},
{
"property": "value2",
"nestedArray": [ 3, 4 ]
}
]
}
}
Wanneer u de veldvoorwaarde voor de voorbeeldresource-inhoud gebruikt, zijn de resultaten als volgt:
Alias | Geselecteerde waarden |
---|---|
Microsoft.Test/resourceType/missingArray |
null |
Microsoft.Test/resourceType/missingArray[*] |
Een lege verzameling waarden. |
Microsoft.Test/resourceType/missingArray[*].property |
Een lege verzameling waarden. |
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 |
Wanneer u de field()
functie gebruikt voor de voorbeeldresource-inhoud, zijn de resultaten als volgt:
Expression | Geretourneerde waarde |
---|---|
[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] |
Expressies voor het aantal velden
Expressies voor het aantal velden tellen hoeveel matrixleden aan een voorwaarde voldoen en vergelijken het aantal met een doelwaarde. Count
is intuïtiever en veelzijdiger voor het evalueren van matrices in vergelijking field
met voorwaarden. De syntaxis is:
{
"count": {
"field": <[*] alias>,
"where": <optional policy condition expression>
},
"equals|greater|less|any other operator": <target value>
}
Bij gebruik zonder voorwaarde where
wordt count
gewoon de lengte van een matrix geretourneerd. Met de voorbeeldresource-inhoud uit de vorige sectie wordt de volgende count
expressie geëvalueerd, true
omdat stringArray
deze drie leden heeft:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]"
},
"equals": 3
}
Dit gedrag werkt ook met geneste matrices. De volgende count
expressie wordt bijvoorbeeld geëvalueerd op true
omdat er vier matrixleden in de nestedArray
matrices zijn:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]"
},
"greaterOrEquals": 4
}
De kracht van count
zit in de where
voorwaarde. Wanneer deze is opgegeven, Azure Policy de matrixleden opsommen en elk op basis van de voorwaarde evalueren, tellend hoeveel matrixleden worden geëvalueerd tot true
. In elke iteratie van de where
voorwaardeevaluatie selecteert Azure Policy één matrixlid i en evalueert de resource-inhoud op basis van de where
voorwaarde alsof i het enige lid van de matrix is. Als er slechts één matrixlid beschikbaar is in elke iteratie, kunt u complexe voorwaarden toepassen op elk afzonderlijk matrixlid.
Voorbeeld:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "a"
}
},
"equals": 1
}
Als u de count
expressie wilt evalueren, evalueert Azure Policy de where
voorwaarde drie keer, één keer voor elk lid van stringArray
, waarbij wordt geteld hoe vaak deze is geëvalueerd naar true
.
Wanneer de where
voorwaarde verwijst naar de Microsoft.Test/resourceType/stringArray[*]
matrixleden, in plaats van alle leden van stringArray
te selecteren, selecteert deze slechts één matrixlid telkens:
Iteratie | Geselecteerde Microsoft.Test/resourceType/stringArray[*] waarden |
where Evaluatieresultaat |
---|---|---|
1 | "a" |
true |
2 | "b" |
false |
3 | "c" |
false |
De count
retourneert 1
.
Hier volgt een complexere expressie:
{
"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
}
Iteratie | Geselecteerde waarden | where Evaluatieresultaat |
---|---|---|
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 |
De count
retourneert 1
.
Het feit dat de where
expressie wordt geëvalueerd op de volledige aanvraaginhoud (met alleen wijzigingen in het matrixlid dat momenteel wordt opgesomd) betekent dat de where
voorwaarde ook kan verwijzen naar velden buiten de matrix:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"field": "tags.env",
"equals": "prod"
}
},
"equals": 0
}
Iteratie | Geselecteerde waarden | where Evaluatieresultaat |
---|---|---|
1 | tags.env =>"prod" |
true |
2 | tags.env =>"prod" |
true |
Geneste tellingexpressies kunnen worden gebruikt om voorwaarden toe te passen op geneste matrixvelden. Met de volgende voorwaarde wordt bijvoorbeeld gecontroleerd of de objectArray[*]
matrix precies twee leden heeft met nestedArray[*]
een of meer leden:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]"
},
"greaterOrEquals": 1
}
},
"equals": 2
}
Iteratie | Geselecteerde waarden | Evaluatieresultaat van geneste telling |
---|---|---|
1 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1 , 2 |
nestedArray[*] heeft 2 leden =>true |
2 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3 , 4 |
nestedArray[*] heeft 2 leden =>true |
Omdat beide leden van objectArray[*]
een onderliggende matrix nestedArray[*]
met twee leden hebben, retourneert de buitenste tellingexpressie 2
.
Complexer voorbeeld: controleer of de objectArray[*]
matrix precies twee leden heeft met nestedArray[*]
alle leden die gelijk zijn aan 2
of 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
}
Iteratie | Geselecteerde waarden | Evaluatieresultaat van geneste telling |
---|---|---|
1 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1 , 2 |
nestedArray[*] bevat 2 =>true |
2 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3 , 4 |
nestedArray[*] bevat 3 =>true |
Omdat beide leden van objectArray[*]
een onderliggende matrix nestedArray[*]
hebben die of 3
bevat, retourneert 2
de buitenste tellingexpressie 2
.
Notitie
Geneste expressies voor het aantal velden kunnen alleen verwijzen naar geneste matrices. Een tellingexpressie waarnaar verwijst Microsoft.Test/resourceType/objectArray[*]
, kan bijvoorbeeld een geneste telling hebben die is gericht op de geneste matrix Microsoft.Test/resourceType/objectArray[*].nestedArray[*]
, maar kan geen geneste tellingexpressie hebben die is gericht op Microsoft.Test/resourceType/stringArray[*]
.
Toegang tot huidig matrixlid met sjabloonfuncties
Wanneer u sjabloonfuncties gebruikt, gebruikt u de current()
functie voor toegang tot de waarde van het huidige matrixlid of de waarden van een van de eigenschappen ervan. Als u toegang wilt krijgen tot de waarde van het huidige matrixlid, geeft u de alias die is gedefinieerd in count.field
of een van de onderliggende aliassen door aan de current()
functie. Bijvoorbeeld:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"value": "[current('Microsoft.Test/resourceType/objectArray[*].property')]",
"like": "value*"
}
},
"equals": 2
}
Iteratie | current() geretourneerde waarde |
where Evaluatieresultaat |
---|---|---|
1 | De waarde van property in het eerste lid van objectArray[*] : value1 |
true |
2 | De waarde van property in het eerste lid van objectArray[*] : value2 |
true |
De veldfunctie binnen where conditions
De field()
functie kan ook worden gebruikt voor toegang tot de waarde van het huidige matrixlid zolang de expressie count zich niet binnen een bestaansvoorwaarde bevindt (field()
functie verwijst altijd naar de resource die wordt geëvalueerd in de if-voorwaarde ). Het gedrag van field()
wanneer wordt verwezen naar de geëvalueerde matrix is gebaseerd op de volgende concepten:
- Matrixaliassen worden omgezet in een verzameling waarden die zijn geselecteerd uit alle matrixleden.
field()
functies die verwijzen naar matrixaliassen retourneren een matrix met de geselecteerde waarden.- Als u verwijst naar de getelde matrixalias in de
where
voorwaarde, wordt een verzameling geretourneerd met één waarde die is geselecteerd uit het matrixlid dat wordt geëvalueerd in de huidige iteratie.
Dit gedrag betekent dat wanneer het verwijst naar het getelde matrixlid met een field()
functie binnen de where
voorwaarde, het een matrix met één lid retourneert. Hoewel dit gedrag mogelijk niet intuïtief is, is het consistent met het idee dat matrixaliassen altijd een verzameling geselecteerde eigenschappen retourneren. Hier volgt een voorbeeld:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "[field('Microsoft.Test/resourceType/stringArray[*]')]"
}
},
"equals": 0
}
Iteratie | Expressiewaarden | where Evaluatieresultaat |
---|---|---|
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 |
Wanneer er dus toegang nodig is tot de waarde van de getelde matrixalias met een field()
functie, kunt u dit doen door deze te verpakken met een first()
sjabloonfunctie:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "[first(field('Microsoft.Test/resourceType/stringArray[*]'))]"
}
}
}
Iteratie | Expressiewaarden | where Evaluatieresultaat |
---|---|---|
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 |
Zie Voorbeelden van het aantal velden voor nuttige voorbeelden.
Matrices wijzigen
Het toevoegen en wijzigen van eigenschappen voor een resource tijdens het maken of bijwerken . Wanneer u met matrixeigenschappen werkt, is het gedrag van deze effecten afhankelijk van het feit of de bewerking probeert de alias [*] te wijzigen of niet:
Notitie
Het gebruik van het modify
effect met aliassen is momenteel in preview.
Alias | Effect | Resultaat |
---|---|---|
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
append |
Azure Policy voegt de hele matrix toe die is opgegeven in de effectdetails als deze ontbreekt. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
modify met add bewerking |
Azure Policy voegt de hele matrix toe die is opgegeven in de effectdetails als deze ontbreekt. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
modify met addOrReplace bewerking |
Azure Policy voegt de hele matrix toe die is opgegeven in de effectdetails als de bestaande matrix ontbreekt of vervangt. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
append |
Azure Policy voegt het matrixlid toe dat is opgegeven in de effectdetails. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
modify met add bewerking |
Azure Policy voegt het matrixlid toe dat is opgegeven in de effectdetails. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
modify met addOrReplace bewerking |
Azure Policy verwijdert alle bestaande matrixleden en voegt het matrixlid toe dat is opgegeven in de effectdetails. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
append |
Azure Policy voegt een waarde toe aan de action eigenschap van elk matrixlid. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
modify met add bewerking |
Azure Policy voegt een waarde toe aan de action eigenschap van elk matrixlid. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
modify met addOrReplace bewerking |
Azure Policy voegt de bestaande action eigenschap van elk matrixlid toe of vervangt deze. |
Zie de toevoegvoorbeelden voor meer informatie.
Aanvullende [*] aliasvoorbeelden
Het is raadzaam om de expressies voor het aantal velden te gebruiken om te controleren of 'alle' of 'een van' de leden van een matrix in de aanvraaginhoud voldoen aan een voorwaarde. Voor sommige eenvoudige voorwaarden is het echter mogelijk om hetzelfde resultaat te bereiken met behulp van een veldtoegangsor met een matrixalias, zoals beschreven in Verwijzen naar de verzameling matrixleden. Dit patroon kan handig zijn in beleidsregels die de limiet van toegestane count-expressies overschrijden. Hier volgen enkele voorbeelden voor veelvoorkomende gebruiksvoorbeelden:
De voorbeeldbeleidsregel voor de onderstaande scenariotabel:
"policyRule": {
"if": {
"allOf": [
{
"field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules",
"exists": "true"
},
<-- Condition (see table below) -->
]
},
"then": {
"effect": "[parameters('effectType')]"
}
}
De matrix ipRules ziet er als volgt uit voor de onderstaande scenariotabel:
"ipRules": [
{
"value": "127.0.0.1",
"action": "Allow"
},
{
"value": "192.168.1.1",
"action": "Allow"
}
]
Vervang voor elk voorbeeld van de onderstaande voorwaarde door <field>
"field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].value"
.
De volgende resultaten zijn het resultaat van de combinatie van de voorwaarde en de voorbeeldbeleidsregel en matrix van bestaande waarden hierboven:
Voorwaarde | Resultaat | Scenario | Uitleg |
---|---|---|---|
{<field>,"notEquals":"127.0.0.1"} |
Niets | Geen overeenkomst | Eén matrixelement wordt geëvalueerd als onwaar (127.0.0.1 != 127.0.0.1) en één als true (127.0.0.1 != 192.168.1.1), zodat de voorwaarde notEqualsonwaar is en het effect niet wordt geactiveerd. |
{<field>,"notEquals":"10.0.4.1"} |
Beleidseffect | Geen overeenkomst | Beide matrixelementen evalueren als true (10.0.4.1 != 127.0.0.1 en 10.0.4.1 != 192.168.1.1), dus de voorwaarde notEquals is true en het effect wordt geactiveerd. |
"not":{<field>,"notEquals":"127.0.0.1" } |
Beleidseffect | Een of meer overeenkomsten | Eén matrixelement wordt geëvalueerd als onwaar (127.0.0.1 != 127.0.0.1) en één als true (127.0.0.1 != 192.168.1.1), dus de voorwaarde notEquals is false. De logische operator evalueert als waar (nietonwaar), zodat het effect wordt geactiveerd. |
"not":{<field>,"notEquals":"10.0.4.1"} |
Niets | Een of meer overeenkomsten | Beide matrixelementen evalueren als true (10.0.4.1 != 127.0.0.1 en 10.0.4.1 != 192.168.1.1), dus de voorwaarde notEquals is true. De logische operator evalueert als onwaar (nietwaar), zodat het effect niet wordt geactiveerd. |
"not":{<field>,"Equals":"127.0.0.1"} |
Beleidseffect | Niet alle overeenkomsten | Eén matrixelement resulteert in waar (127.0.0.1 == 127.0.0.1) en één als onwaar (127.0.0.1 == 192.168.1.1), dus de voorwaarde Is gelijk aan is onwaar. De logische operator evalueert als waar (nietonwaar), zodat het effect wordt geactiveerd. |
"not":{<field>,"Equals":"10.0.4.1"} |
Beleidseffect | Niet alle overeenkomsten | Beide matrixelementen worden geëvalueerd als onwaar (10.0.4.1 == 127.0.0.1 en 10.0.4.1 == 192.168.1.1), dus de voorwaarde is gelijk aanonwaar. De logische operator evalueert als waar (nietonwaar), zodat het effect wordt geactiveerd. |
{<field>,"Equals":"127.0.0.1"} |
Niets | Alles komt overeen | Eén matrixelement wordt geëvalueerd als waar (127.0.0.1 == 127.0.0.1) en één als onwaar (127.0.0.1 == 192.168.1.1), zodat de voorwaarde Gelijk aanonwaar is en het effect niet wordt geactiveerd. |
{<field>,"Equals":"10.0.4.1"} |
Niets | Alles komt overeen | Beide matrixelementen worden geëvalueerd als onwaar (10.0.4.1 == 127.0.0.1 en 10.0.4.1 == 192.168.1.1), zodat de voorwaarde Is gelijk aanonwaar is en het effect niet wordt geactiveerd. |
Volgende stappen
- Bekijk voorbeelden in Azure Policy voorbeelden.
- Lees over de structuur van Azure Policy-definities.
- Lees Informatie over de effecten van het beleid.
- Informatie over het programmatisch maken van beleidsregels.
- Ontdek hoe u niet-compatibele resources kunt herstellen.
- Bekijk wat een beheergroep is met Uw resources organiseren met Azure-beheergroepen.