Azure Policy-definitiestructuurbeleidsregel
De beleidsregel bestaat uit if
en then
blokken. In het if
blok definieert u een of meer voorwaarden die aangeven wanneer het beleid wordt afgedwongen. U kunt logische operators op deze voorwaarden toepassen om het scenario voor uw beleid nauwkeurig te definiëren.
Zie de basisprincipes van Azure Policy-definities voor volledige details over elk effect, de volgorde van evaluatie, eigenschappen en voorbeelden.
In het then
blok definieert u het effect dat plaatsvindt wanneer aan de if
voorwaarden wordt voldaan.
{
"if": {
<condition> | <logical operator>
},
"then": {
"effect": "deny | audit | modify | denyAction | append | auditIfNotExists | deployIfNotExists | disabled"
}
}
Ga naar het schema voor beleidsdefinities voor meer informatie over policyRule.
Logische operators
Ondersteunde logische operators zijn:
"not": {condition or operator}
"allOf": [{condition or operator},{condition or operator}]
"anyOf": [{condition or operator},{condition or operator}]
De not
syntaxis omkert het resultaat van de voorwaarde. Voor allOf
de syntaxis (vergelijkbaar met de logische and
bewerking) moeten alle voorwaarden waar zijn. Voor de anyOf
syntaxis (vergelijkbaar met de logische or
bewerking) moeten een of meer voorwaarden waar zijn.
U kunt logische operators nesten. In het volgende voorbeeld ziet u een not
bewerking die is genest binnen een allOf
bewerking.
"if": {
"allOf": [
{
"not": {
"field": "tags",
"containsKey": "application"
}
},
{
"field": "type",
"equals": "Microsoft.Storage/storageAccounts"
}
]
},
Voorwaarden
Een voorwaarde evalueert of een waarde voldoet aan bepaalde criteria. De ondersteunde voorwaarden zijn:
"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"
greaterOrEquals
lessOrEquals
greater
Als less
het eigenschapstype niet overeenkomt met het voorwaardetype, wordt er een fout gegenereerd. Tekenreeksvergelijkingen worden gemaakt met behulp van InvariantCultureIgnoreCase
.
Wanneer u de like
voorwaarden notLike
gebruikt, geeft u een jokerteken (*
) op in de waarde. De waarde mag niet meer dan één jokerteken bevatten.
Wanneer u de match
en notMatch
voorwaarden gebruikt, geeft u een hashtag (#
) op die overeenkomt met een cijfer, vraagteken (?
) voor een letter en een punt (.
) om een willekeurig teken en een ander teken te vinden dat overeenkomt met dat werkelijke teken. Hoewel match
en notMatch
hoofdlettergevoelig zijn, zijn alle andere voorwaarden die een stringValue
hoofdlettergevoelig evalueren. Hoofdlettergevoelige alternatieven zijn beschikbaar in matchInsensitively
en notMatchInsensitively
.
Velden
Voorwaarden die evalueren of de waarden van eigenschappen in de nettolading van de resourceaanvraag voldoen aan bepaalde criteria, kunnen worden gevormd met behulp van een field
expressie. De volgende velden worden ondersteund:
name
fullName
- Retourneert de volledige naam van de resource. De volledige naam van een resource is de resourcenaam die wordt voorafgegaan door eventuele bovenliggende resourcenamen (bijvoorbeeld
myServer/myDatabase
).
- Retourneert de volledige naam van de resource. De volledige naam van een resource is de resourcenaam die wordt voorafgegaan door eventuele bovenliggende resourcenamen (bijvoorbeeld
kind
type
location
- Locatievelden worden genormaliseerd om verschillende indelingen te ondersteunen. Wordt bijvoorbeeld
East US 2
beschouwd als gelijk aaneastus2
. - Gebruik globaal voor resources die locatieneutraal zijn.
- Locatievelden worden genormaliseerd om verschillende indelingen te ondersteunen. Wordt bijvoorbeeld
id
- Retourneert de resource-id van de resource die wordt geëvalueerd.
- Voorbeeld:
/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myRG/providers/Microsoft.KeyVault/vaults/myVault
identity.type
- Retourneert het type beheerde identiteit dat is ingeschakeld voor de resource.
tags
tags['<tagName>']
- Deze syntaxis van haakjes ondersteunt tagnamen met interpunctie, zoals een afbreekstreepje, punt of spatie.
- Waar
tagName
is de naam van de tag om de voorwaarde voor te valideren. - Voorbeelden:
tags['Acct.CostCenter']
waarAcct.CostCenter
is de naam van de tag.
tags['''<tagName>''']
- Deze syntaxis van haakjes ondersteunt tagnamen met apostrofs door te ontsnappen met dubbele apostrofs.
- Waar
tagName
is de naam van de tag om de voorwaarde voor te valideren. - Voorbeeld:
tags['''My.Apostrophe.Tag''']
waar'My.Apostrophe.Tag'
is de naam van de tag.
Notitie
tags.<tagName>
,tags[tagName]
entags[tag.with.dots]
zijn nog steeds acceptabele manieren om een tagsveld te declareren. De voorkeursexpressies zijn echter de expressies die hierboven worden vermeld.eigenschapsaliassen: zie Aliassen voor een lijst.
Notitie
In
field
expressies die verwijzen naar matrixalias[*]
, wordt elk element in de matrix afzonderlijk geëvalueerd met logischeand
elementen. Zie Verwijzen naar eigenschappen van matrixresources voor meer informatie.
Voorwaarden die gebruikmaken van field
expressies kunnen de syntaxis "source": "action"
van de verouderde beleidsdefinitie vervangen, die wordt gebruikt voor schrijfbewerkingen. Dit wordt bijvoorbeeld niet meer ondersteund:
{
"source": "action",
"like": "Microsoft.Network/publicIPAddresses/*"
}
Maar het gewenste gedrag kan worden bereikt met behulp van field
logica:
{
"field": "type",
"equals": "Microsoft.Network/publicIPAddresses"
}
Tags gebruiken met parameters
Een parameterwaarde kan worden doorgegeven aan een tagveld. Het doorgeven van een parameter aan een tagveld verhoogt de flexibiliteit van de beleidsdefinitie tijdens beleidstoewijzing.
In het volgende voorbeeld concat
wordt gebruikt om een tagsveldzoekactie te maken voor de tag met de naam van de tagName
parameter. Als deze tag niet bestaat, wordt het effect gebruikt om de modify
tag toe te voegen met behulp van de waarde van dezelfde benoemde tag die is ingesteld op de bovenliggende resourcegroep van gecontroleerde resources met behulp van de resourcegroup()
opzoekfunctie.
{
"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"
]
}
}
}
Weergegeven als
Voorwaarden die evalueren of een waarde aan bepaalde criteria voldoet, kunnen worden gevormd met behulp van een value
expressie. Waarden kunnen letterlijke waarden, de waarden van parameters of de geretourneerde waarden van ondersteunde sjabloonfuncties zijn.
Waarschuwing
Als het resultaat van een sjabloonfunctie een fout is, mislukt de beleidsevaluatie. Een mislukte evaluatie is een impliciete deny
. Zie sjabloonfouten vermijden voor meer informatie. Gebruik enforcementMode om doNotEnforce
de impact van een mislukte evaluatie op nieuwe of bijgewerkte resources te voorkomen tijdens het testen en valideren van een nieuwe beleidsdefinitie.
Waardevoorbeelden
In dit voorbeeld value
van een beleidsregel worden het resultaat van de resourceGroup()
functie en de geretourneerde name
eigenschap vergeleken met een like
voorwaarde van *netrg
. De regel weigert een resource die niet voorkomt in een resourcegroep waarvan de Microsoft.Network/*
type
naam eindigt *netrg
.
{
"if": {
"allOf": [
{
"value": "[resourceGroup().name]",
"like": "*netrg"
},
{
"field": "type",
"notLike": "Microsoft.Network/*"
}
]
},
"then": {
"effect": "deny"
}
}
In dit voorbeeld van een beleidsregel wordt gebruikgemaakt value
om te controleren of het resultaat van meerdere geneste functies equals
true
is. De regel weigert een resource die niet ten minste drie tags heeft.
{
"mode": "indexed",
"policyRule": {
"if": {
"value": "[less(length(field('tags')), 3)]",
"equals": "true"
},
"then": {
"effect": "deny"
}
}
}
Sjabloonfouten voorkomen
Het gebruik van sjabloonfuncties maakt value
veel complexe geneste functies mogelijk. Als het resultaat van een sjabloonfunctie een fout is, mislukt de beleidsevaluatie. Een mislukte evaluatie is een impliciete deny
. Een voorbeeld van een value
fout in bepaalde scenario's:
{
"policyRule": {
"if": {
"value": "[substring(field('name'), 0, 3)]",
"equals": "abc"
},
"then": {
"effect": "audit"
}
}
}
In de bovenstaande voorbeeldbeleidsregel wordt gebruikgemaakt van subtekenreeks() om de eerste drie tekens te name
vergelijken met abc
. Als name
de functie korter is dan drie tekens, resulteert de substring()
functie in een fout. Deze fout zorgt ervoor dat het beleid een deny
effect wordt.
Gebruik in plaats daarvan de functie if() om te controleren of de eerste drie tekens name
gelijk abc
zijn zonder een name
fout van minder dan drie tekens toe te staan:
{
"policyRule": {
"if": {
"value": "[if(greaterOrEquals(length(field('name')), 3), substring(field('name'), 0, 3), 'not starting with abc')]",
"equals": "abc"
},
"then": {
"effect": "audit"
}
}
}
Met de herziene beleidsregel if()
controleert u de lengte van name
voordat u een substring()
waarde met minder dan drie tekens probeert op te halen. Als name
deze te kort is, wordt in plaats daarvan de waarde 'niet beginnen met abc' geretourneerd en vergeleken met abc
. Een resource met een korte naam die niet met de beleidsregel begint abc
, mislukt de beleidsregel, maar veroorzaakt geen fout meer tijdens de evaluatie.
Tellen
Voorwaarden waarmee wordt geteld hoeveel leden van een matrix aan bepaalde criteria voldoen, kunnen worden gevormd met behulp van een count
expressie. Veelvoorkomende scenario's controleren of 'ten minste één van', 'precies één van', 'alle' of 'geen van' de matrixleden aan een voorwaarde voldoen. Hiermee count
wordt elk matrixlid geëvalueerd voor een voorwaardeexpressie en worden de werkelijke resultaten opgeteld, die vervolgens wordt vergeleken met de expressie-operator.
Aantal velden
Tel hoeveel leden van een matrix in de nettolading van de aanvraag voldoen aan een voorwaardeexpressie. De structuur van field count
expressies is:
{
"count": {
"field": "<[*] alias>",
"where": {
/* condition expression */
}
},
"<condition>": "<compare the count of true condition expression array members to this value>"
}
De volgende eigenschappen worden gebruikt met field count
:
count.field
(vereist): Bevat het pad naar de matrix en moet een matrixalias zijn.count.where
(optioneel): De voorwaardeexpressie die afzonderlijk moet worden geëvalueerd voor elk matrixlid van de matrixmatrix vancount.field
de matrix. Als deze eigenschap niet is opgegeven, worden alle matrixleden met het pad van 'veld' geëvalueerd op waar. Elke voorwaarde kan in deze eigenschap worden gebruikt. Logische operators kunnen in deze eigenschap worden gebruikt om complexe evaluatievereisten te maken.condition
(vereist): De waarde wordt vergeleken met het aantal items dat voldoet aan decount.where
voorwaardeexpressie. Er moet een numerieke voorwaarde worden gebruikt.
Zie De eigenschappen van matrixresources raadplegen voor meer informatie over het werken met matrixeigenschappen in Azure Policy, inclusief gedetailleerde uitleg over hoe de field count
expressie wordt geëvalueerd.
Aantal waarden
Tel hoeveel leden van een matrix aan een voorwaarde voldoen. De matrix kan een letterlijke matrix of een verwijzing naar de matrixparameter zijn. De structuur van value count
expressies is:
{
"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>"
}
De volgende eigenschappen worden gebruikt met value count
:
count.value
(vereist): de matrix die moet worden geëvalueerd.count.name
(vereist): De indexnaam, samengesteld uit Engelse letters en cijfers. Definieert een naam voor de waarde van het matrixlid dat in de huidige iteratie wordt geëvalueerd. De naam wordt gebruikt om te verwijzen naar de huidige waarde in decount.where
voorwaarde. Optioneel wanneer decount
expressie zich niet in een onderliggend element van een anderecount
expressie bevindt. Wanneer deze niet is opgegeven, wordt de indexnaam impliciet ingesteld op"default"
.count.where
(optioneel): De voorwaardeexpressie die afzonderlijk moet worden geëvalueerd voor elk matrixlid vancount.value
. Als deze eigenschap niet is opgegeven, worden alle matrixleden geëvalueerd op waar. Elke voorwaarde kan in deze eigenschap worden gebruikt. Logische operators kunnen in deze eigenschap worden gebruikt om complexe evaluatievereisten te maken. De waarde van het momenteel opgesomde matrixlid kan worden geopend door de huidige functie aan te roepen.condition
(vereist): De waarde wordt vergeleken met het aantal items dat voldoet aan decount.where
voorwaardeexpressie. Er moet een numerieke voorwaarde worden gebruikt.
De huidige functie
De current()
functie is alleen beschikbaar in de count.where
voorwaarde. Hiermee wordt de waarde geretourneerd van het matrixlid dat momenteel is geïnventariseerd door de count
expressie-evaluatie.
Gebruik van waardeaantal
current(<index name defined in count.name>)
. Voorbeeld:current('arrayMember')
.current()
. Alleen toegestaan als devalue count
expressie geen onderliggend element van een anderecount
expressie is. Retourneert dezelfde waarde als hierboven.
Als de waarde die door de aanroep wordt geretourneerd een object is, worden eigenschapstoegangsors ondersteund. Voorbeeld: current('objectArrayMember').property
.
Gebruik van veldaantallen
current(<the array alias defined in count.field>)
. Bijvoorbeeld:current('Microsoft.Test/resource/enumeratedArray[*]')
.current()
. Alleen toegestaan als defield count
expressie geen onderliggend element van een anderecount
expressie is. Retourneert dezelfde waarde als hierboven.current(<alias of a property of the array member>)
. Bijvoorbeeld:current('Microsoft.Test/resource/enumeratedArray[*].property')
.
Voorbeelden van het aantal velden
Voorbeeld 1: Controleren of een matrix leeg is
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]"
},
"equals": 0
}
Voorbeeld 2: Controleer of slechts één matrixlid voldoet aan de voorwaardeexpressie
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
"equals": "My unique description"
}
},
"equals": 1
}
Voorbeeld 3: Controleren of ten minste één matrixlid voldoet aan de voorwaardeexpressie
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
"equals": "My common description"
}
},
"greaterOrEquals": 1
}
Voorbeeld 4: Controleren of alle objectmatrixleden voldoen aan de voorwaardeexpressie
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
"equals": "description"
}
},
"equals": "[length(field('Microsoft.Network/networkSecurityGroups/securityRules[*]'))]"
}
Voorbeeld 5: Controleren of ten minste één matrixlid overeenkomt met meerdere eigenschappen in de voorwaardeexpressie
{
"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
}
Voorbeeld 6: Gebruik current()
de functie in de where
voorwaarden voor toegang tot de waarde van het momenteel opgesomde matrixlid in een sjabloonfunctie. Met deze voorwaarde wordt gecontroleerd of een virtueel netwerk een adresvoorvoegsel bevat dat niet onder het CIDR-bereik 10.0.0.0/24 valt.
{
"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
}
Voorbeeld 7: Gebruik field()
de functie in de where
voorwaarden om toegang te krijgen tot de waarde van het momenteel opgesomde matrixlid. Met deze voorwaarde wordt gecontroleerd of een virtueel netwerk een adresvoorvoegsel bevat dat niet onder het CIDR-bereik 10.0.0.0/24 valt.
{
"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
}
Voorbeelden van het aantal waarden
Voorbeeld 1: Controleren of de resourcenaam overeenkomt met een van de opgegeven naampatronen.
{
"count": {
"value": [
"prefix1_*",
"prefix2_*"
],
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
Voorbeeld 2: Controleren of de resourcenaam overeenkomt met een van de opgegeven naampatronen. De current()
functie geeft geen indexnaam op. Het resultaat is hetzelfde als in het vorige voorbeeld.
{
"count": {
"value": [
"prefix1_*",
"prefix2_*"
],
"where": {
"field": "name",
"like": "[current()]"
}
},
"greater": 0
}
Voorbeeld 3: Controleer of de resourcenaam overeenkomt met een van de opgegeven naampatronen die zijn opgegeven door een matrixparameter.
{
"count": {
"value": "[parameters('namePatterns')]",
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
Voorbeeld 4: Controleer of een van de adresvoorvoegsels van het virtuele netwerk zich niet onder de lijst met goedgekeurde voorvoegsels bevindt.
{
"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
}
Voorbeeld 5: Controleer of alle gereserveerde NSG-regels zijn gedefinieerd in een NSG. De eigenschappen van de gereserveerde NSG-regels worden gedefinieerd in een matrixparameter die objecten bevat.
Parameterwaarde:
[
{
"priority": 101,
"access": "deny",
"direction": "inbound",
"destinationPortRange": 22
},
{
"priority": 102,
"access": "deny",
"direction": "inbound",
"destinationPortRange": 3389
}
]
Beleid:
{
"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'))]"
}
Beleidsfuncties
Functies kunnen worden gebruikt om extra logica in een beleidsregel te introduceren. Ze worden opgelost binnen de beleidsregel van een beleidsdefinitie en binnen parameterwaarden die zijn toegewezen aan beleidsdefinities in een initiatief.
Alle Resource Manager-sjabloonfuncties zijn beschikbaar voor gebruik binnen een beleidsregel, met uitzondering van de volgende functies en door de gebruiker gedefinieerde functies:
copyIndex()
dateTimeAdd()
dateTimeFromEpoch
dateTimeToEpoch
deployment()
environment()
extensionResourceId()
lambda()
Ga naar lambda voor meer informatielistAccountSas()
listKeys()
listSecrets()
list*
managementGroup()
newGuid()
pickZones()
providers()
reference()
resourceId()
subscriptionResourceId()
tenantResourceId()
tenant()
variables()
Notitie
Deze functies zijn nog steeds beschikbaar in het details.deployment.properties.template
gedeelte van de sjabloonimplementatie in een deployIfNotExists
beleidsdefinitie.
De volgende functie is beschikbaar voor gebruik in een beleidsregel, maar verschilt van het gebruik in een Azure Resource Manager-sjabloon (ARM-sjabloon):
utcNow()
- In tegenstelling tot een ARM-sjabloon kan deze eigenschap buiten defaultValue worden gebruikt.- Retourneert een tekenreeks die is ingesteld op de huidige datum en tijd in universal ISO 8601 DateTime-indeling
yyyy-MM-ddTHH:mm:ss.fffffffZ
.
- Retourneert een tekenreeks die is ingesteld op de huidige datum en tijd in universal ISO 8601 DateTime-indeling
De volgende functies zijn alleen beschikbaar in beleidsregels:
addDays(dateTime, numberOfDaysToAdd)
dateTime
: [Vereist] tekenreeks - Tekenreeks in de Universal ISO 8601 DateTime-indeling 'jjjj-MM-ddTHH:mm:ss. FFFFFFFZ'numberOfDaysToAdd
: [Vereist] geheel getal - aantal dagen dat moet worden toegevoegd
field(fieldName)
fieldName
: [Vereist] tekenreeks - Naam van het veld dat moet worden opgehaald- Retourneert de waarde van dat veld van de resource die wordt geëvalueerd door de If-voorwaarde.
field
wordt voornamelijk gebruikt metauditIfNotExists
endeployIfNotExists
om te verwijzen naar velden voor de resource die worden geëvalueerd. Een voorbeeld van dit gebruik is te zien in het voorbeeld DeployIfNotExists.
requestContext().apiVersion
- Retourneert de API-versie van de aanvraag die beleidsevaluatie heeft geactiveerd (bijvoorbeeld:
2021-09-01
). Deze waarde is de API-versie die is gebruikt in de PUT/PATCH-aanvraag voor evaluaties bij het maken/bijwerken van resources. De nieuwste API-versie wordt altijd gebruikt tijdens de evaluatie van naleving op bestaande resources.
- Retourneert de API-versie van de aanvraag die beleidsevaluatie heeft geactiveerd (bijvoorbeeld:
policy()
Retourneert de volgende informatie over het beleid dat wordt geëvalueerd. Eigenschappen kunnen worden geopend vanuit het geretourneerde object (bijvoorbeeld:
[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
: [Vereist] tekenreeks - Tekenreeks die een bereik van IP-adressen opgeeft om te controleren of de targetRange zich binnen bevindt.targetRange
: [Vereist] tekenreeks - Tekenreeks die een bereik van IP-adressen opgeeft dat moet worden gevalideerd zoals opgenomen in het bereik.- Retourneert een Booleaanse waarde om te bepalen of het BEREIK IP-adresbereik het targetRange IP-adresbereik bevat. Lege bereiken of het combineren tussen IP-families is niet toegestaan en resulteert in evaluatiefouten.
Ondersteunde indelingen:
- Eén IP-adres (voorbeelden:
10.0.0.0
,2001:0DB8::3:FFFE
) - CIDR-bereik (voorbeelden:
10.0.0.0/24
,2001:0DB8::/110
) - Bereik gedefinieerd door begin- en eind-IP-adressen (voorbeelden:
192.168.0.1-192.168.0.9
,2001:0DB8::-2001:0DB8::3:FFFF
)
current(indexName)
- Speciale functie die alleen mag worden gebruikt in expressies voor aantallen.
Voorbeeld van beleidsfunctie
In dit voorbeeld van een beleidsregel wordt de resourceGroup
resourcefunctie gebruikt om de name
eigenschap op te halen, gecombineerd met de concat
matrix- en objectfunctie om een like
voorwaarde te maken waarmee de resourcenaam wordt afgedwongen om te beginnen met de naam van de resourcegroep.
{
"if": {
"not": {
"field": "name",
"like": "[concat(resourceGroup().name,'*')]"
}
},
"then": {
"effect": "deny"
}
}
Limieten voor beleidsregels
De limieten die worden afgedwongen tijdens het ontwerpen
De limieten voor de structuur van beleidsregels worden afgedwongen tijdens het ontwerpen of toewijzen van een beleid. De pogingen om beleidsdefinities te maken of toe te wijzen die deze limieten overschrijden, mislukken.
Grenswaarde | Weergegeven als | Aanvullende details |
---|---|---|
Voorwaardeexpressies in de if voorwaarde |
4096 | |
Voorwaardeexpressies in het then blok |
128 | Van toepassing op en existenceCondition auditIfNotExists deployIfNotExists beleid |
De beleidsfuncties per beleidsregel | 2048 | |
Het aantal parameters voor beleidsfunctie | 128 | Voorbeeld: [function('parameter1', 'parameter2', ...)] |
Diepte van de geneste beleidsfuncties | 64 | Voorbeeld: [function(nested1(nested2(...)))] |
De tekenreekslengte van beleidsfunctiesexpressie | 81920 | Voorbeeld: de lengte van "[function(....)]" |
Field count expressies per matrix |
5 | |
Value count expressies per beleidsregel |
10 | |
Value count iteratieaantal expressies |
100 | Voor geneste expressies omvat dit ook het iteratieaantal van de bovenliggende Value count expressie |
De limieten die tijdens de evaluatie worden afgedwongen
De limieten voor de grootte van objecten die tijdens de beleidsevaluatie worden verwerkt door beleidsfuncties. Die limieten kunnen niet altijd worden afgedwongen tijdens het ontwerpen, omdat ze afhankelijk zijn van de geëvalueerde inhoud. Voorbeeld:
{
"field": "name",
"equals": "[concat(field('stringPropertyA'), field('stringPropertyB'))]"
}
De lengte van de tekenreeks die door de concat()
functie is gemaakt, is afhankelijk van de waarde van eigenschappen in de geëvalueerde resource.
Grenswaarde | Weergegeven als | Opmerking |
---|---|---|
De lengte van tekenreeks die wordt geretourneerd door een functie | 131072 | [concat(field('longString1'), field('longString2'))] |
De diepte van complexe objecten die zijn opgegeven als parameter aan of geretourneerd door een functie | 128 | [union(field('largeObject1'), field('largeObject2'))] |
Het aantal knooppunten van complexe objecten dat is opgegeven als parameter aan of geretourneerd door een functie | 32768 | [concat(field('largeArray1'), field('largeArray2'))] |
Waarschuwing
Beleid dat de bovenstaande limieten tijdens de evaluatie overschrijdt, wordt effectief een deny
beleid en kan binnenkomende aanvragen blokkeren.
Houd bij schrijven van beleidsregels met complexe functies rekening met deze limieten en test uw beleid op resources die het potentieel hebben om deze te overschrijden.
Volgende stappen
- Ga naar basisbeginselen, parameters en alias voor meer informatie over de structuur van beleidsdefinities.
- Ga voor initiatieven naar de structuur van initiatiefdefinities.
- Bekijk voorbeelden in Azure Policy-voorbeelden.
- Lees Informatie over de effecten van het beleid.
- Meer informatie over het programmatisch maken van beleid.
- Meer informatie over het ophalen van nalevingsgegevens.
- Ontdek hoe u niet-compatibele resources kunt herstellen.
- Bekijk wat een beheergroep is met Uw resources organiseren met Azure-beheergroepen.