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"

greaterOrEqualslessOrEqualsgreaterAls lesshet 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).
  • kind

  • type

  • location

    • Locatievelden worden genormaliseerd om verschillende indelingen te ondersteunen. Wordt bijvoorbeeld East US 2 beschouwd als gelijk aan eastus2.
    • Gebruik globaal voor resources die locatieneutraal zijn.
  • 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

  • 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'] waar Acct.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]en tags[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 logische and 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 equalstrueis. 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 van count.fieldde 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 de count.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 de count.where voorwaarde. Optioneel wanneer de count expressie zich niet in een onderliggend element van een andere count 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 van count.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 de count.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 de value count expressie geen onderliggend element van een andere count 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 de field count expressie geen onderliggend element van een andere count 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 informatie
  • listAccountSas()
  • 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.

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 met auditIfNotExists en deployIfNotExists 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.
  • 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 existenceConditionauditIfNotExistsdeployIfNotExists 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