Structuur van Azure-beleidsdefinities

Azure Policy worden conventies voor resources vastgesteld. Beleidsdefinities beschrijven de nalevingsvoorwaarden van resources en het effect dat moet worden doorgevoerd als aan een voorwaarde wordt voldaan. Een voorwaarde vergelijkt een veld met een resource-eigenschap of een waarde met een vereiste waarde. Velden van resource-eigenschappen zijn toegankelijk met behulp van aliassen. Wanneer een veld met een resource-eigenschap een matrix is, kan een speciale matrixalias worden gebruikt om waarden van alle matrixleden te selecteren en op elk veld een voorwaarde toe te passen. Meer informatie over voorwaarden.

Door conventies te definiëren, kunt u kosten beheren en uw resources gemakkelijker beheren. U kunt bijvoorbeeld opgeven dat alleen bepaalde typen virtuele machines zijn toegestaan. U kunt ook vereisen dat resources een bepaalde tag hebben. Beleidstoewijzingen worden overgenomen door onderliggende resources. Als een beleidstoewijzing wordt toegepast op een resourcegroep, is deze van toepassing op alle resources in die resourcegroep.

Het policy definition policyRule-schema vindt u hier: https://schema.management.azure.com/schemas/2020-10-01/policyDefinition.json

U gebruikt JSON om een beleidsdefinitie te maken. De beleidsdefinitie bevat elementen voor:

  • weergavenaam
  • beschrijving
  • mode
  • metagegevens
  • parameters
  • beleidsregel
    • logische evaluatie
    • effect

De volgende JSON toont bijvoorbeeld een beleid dat beperkt waar resources worden geïmplementeerd:

{
    "properties": {
        "displayName": "Allowed locations",
        "description": "This policy enables you to restrict the locations your organization can specify when deploying resources.",
        "mode": "Indexed",
        "metadata": {
            "version": "1.0.0",
            "category": "Locations"
        },
        "parameters": {
            "allowedLocations": {
                "type": "array",
                "metadata": {
                    "description": "The list of locations that can be specified when deploying resources",
                    "strongType": "location",
                    "displayName": "Allowed locations"
                },
                "defaultValue": [ "westus2" ]
            }
        },
        "policyRule": {
            "if": {
                "not": {
                    "field": "location",
                    "in": "[parameters('allowedLocations')]"
                }
            },
            "then": {
                "effect": "deny"
            }
        }
    }
}

Azure Policy ingebouwde en patronen staan op Azure Policy voorbeelden.

Weergavenaam en beschrijving

U gebruikt displayName en description om de beleidsdefinitie te identificeren en context te bieden voor wanneer deze wordt gebruikt. displayName heeft een maximale lengte van 128 tekens en een beschrijving met een maximale lengte van 512 tekens.

Notitie

Tijdens het maken of bijwerken van een beleidsdefinitie worden id, type en naam gedefinieerd door externe eigenschappen van de JSON en zijn ze niet nodig in het JSON-bestand. Het ophalen van de beleidsdefinitie via SDK retourneert de eigenschappen id, type en name als onderdeel van de JSON, maar elk ervan is alleen-lezen informatie met betrekking tot de beleidsdefinitie.

Type

Hoewel de eigenschap type niet kan worden ingesteld, zijn er drie waarden die worden geretourneerd door de SDK en zichtbaar zijn in de portal:

  • Builtin: Deze beleidsdefinities worden geleverd en onderhouden door Microsoft.
  • Custom: alle beleidsdefinities die door klanten zijn gemaakt, hebben deze waarde.
  • Static: Geeft een definitie van het nalevingsbeleid voor regelgeving aan met Microsoft Eigendom. De nalevingsresultaten voor deze beleidsdefinities zijn de resultaten van externe controles op de Microsoft-infrastructuur. In de Azure Portal wordt deze waarde soms weergegeven als door Microsoft beheerde. Zie Gedeelde verantwoordelijkheid in de cloud voor meer informatie.

Modus

De modus wordt geconfigureerd, afhankelijk van of het beleid is gericht op een Azure Resource Manager eigenschap of een resourceprovider-eigenschap.

Resource Manager modi

De modus bepaalt welke resourcetypen worden geëvalueerd voor een beleidsdefinitie. De ondersteunde modi zijn:

  • all: resourcegroepen, abonnementen en alle resourcetypen evalueren
  • indexed: evalueer alleen resourcetypen die ondersteuning bieden voor tags en locatie

Resource ondersteunt bijvoorbeeld Microsoft.Network/routeTables tags en locatie en wordt geëvalueerd in beide modi. De resource kan Microsoft.Network/routeTables/routes echter niet worden getagd en wordt niet geëvalueerd in de Indexed modus.

In de meeste gevallen wordt u aangeraden all de modus in te stellen op . Alle beleidsdefinities die via de portal zijn gemaakt, gebruiken de all modus . Als u PowerShell of Azure CLI gebruikt, kunt u de modusparameter handmatig opgeven. Als de beleidsdefinitie geen moduswaarde bevat, wordt standaard ingesteld op all in Azure PowerShell en in Azure null CLI. Een modus is hetzelfde als die wordt gebruikt om compatibiliteit met eerdere eerdere stappen null indexed te ondersteunen.

indexed moet worden gebruikt bij het maken van beleidsregels waarmee tags of locaties worden afgedwongen. Hoewel dit niet vereist is, worden resources die geen ondersteuning bieden voor tags en locaties niet weergegeven als niet-compatibel in de nalevingsresultaten. De uitzondering hierop zijn resourcegroepen en abonnementen. Beleidsdefinities die locatie of tags voor een resourcegroep of abonnement afdwingen, moeten de modus instellen op en specifiek zijn gericht op all het type Microsoft.Resources/subscriptions/resourceGroups Microsoft.Resources/subscriptions of. Zie Pattern: Tags - Sample #1voor een #1. Zie Tagondersteuning voor Azure-resourcesvoor een lijst met resources die ondersteuning bieden voor tags.

Resourceprovidermodi

De volgende resourceprovidermodus wordt volledig ondersteund:

De volgende resourceprovidermodi worden momenteel ondersteund als preview:

Notitie

Modi voor resourceproviders ondersteunen alleen ingebouwde beleidsdefinities en bieden geen ondersteuning voor uitzonderingen als dit niet expliciet wordt vermeld.

Metagegevens

De metadata optionele eigenschap slaat informatie over de beleidsdefinitie op. Klanten kunnen eigenschappen en waarden definiëren die nuttig zijn voor hun organisatie in metadata . Er zijn echter enkele algemene eigenschappen die worden gebruikt door Azure Policy en ingebouwde ingebouwde. Elke metadata eigenschap heeft een limiet van 1024 tekens.

Algemene metagegevenseigenschappen

  • version (tekenreeks): houdt details bij over de versie van de inhoud van een beleidsdefinitie.
  • category (tekenreeks): bepaalt onder welke categorie in de Azure Portal de beleidsdefinitie wordt weergegeven.
  • preview (Booleaanse vlag): de vlag True of false voor als de beleidsdefinitie preview is.
  • deprecated(Booleaanse vlag): De vlag True of false voor als de beleidsdefinitie is gemarkeerd als afgeschaft.
  • portalReview (tekenreeks): hiermee bepaalt u of parameters moeten worden gecontroleerd in de portal, ongeacht de vereiste invoer.

Notitie

De Azure Policy gebruikt eigenschappen , en om het niveau van wijziging door te geven aan een ingebouwde beleidsdefinitie version preview of initiatief en deprecated status. De indeling van version is: {Major}.{Minor}.{Patch} . Specifieke staten, zoals afgeschaft of preview, worden toegevoegd aan de eigenschap of in een andere eigenschap version als een booleaanse. Zie Ingebouwde versie Azure Policy voor meer informatie over de manier waarop ingebouwde versies worden Azure Policy.

Parameters

Parameters helpen uw beleidsbeheer te vereenvoudigen door het aantal beleidsdefinities te verminderen. Denk aan parameters zoals de velden in een formulier name : , , , address city state . Deze parameters blijven altijd hetzelfde, maar hun waarden veranderen op basis van de persoon die het formulier invult. Parameters werken op dezelfde manier wanneer u beleidsregels bouwt. Door parameters op te geven in een beleidsdefinitie, kunt u dat beleid opnieuw gebruiken voor verschillende scenario's met behulp van verschillende waarden.

Notitie

Parameters kunnen worden toegevoegd aan een bestaande en toegewezen definitie. De nieuwe parameter moet de eigenschap defaultValue bevatten. Dit voorkomt dat bestaande toewijzingen van het beleid of initiatief indirect ongeldig worden gemaakt.

Parametereigenschappen

Een parameter heeft de volgende eigenschappen die worden gebruikt in de beleidsdefinitie:

  • name: De naam van uw parameter. Wordt gebruikt door de parameters implementatiefunctie binnen de beleidsregel. Zie een parameterwaarde gebruiken voor meer informatie.
  • type: Bepaalt of de parameter een tekenreeks, matrix, object, booleaanse waarde, geheel getal , float of datum/tijd is.
  • metadata: Definieert subproperties die voornamelijk worden gebruikt door de Azure Portal om gebruikersvriendelijke informatie weer te geven:
    • description: De uitleg van waarvoor de parameter wordt gebruikt. Kan worden gebruikt om voorbeelden van acceptabele waarden op te geven.
    • displayName: de gebruiksvriendelijke naam die wordt weergegeven in de portal voor de parameter .
    • strongType: (Optioneel) Wordt gebruikt bij het toewijzen van de beleidsdefinitie via de portal. Biedt een contextbewuste lijst. Zie strongType voor meer informatie.
    • assignPermissions: (Optioneel) Stel deze optie in op true om Azure Portal roltoewijzingen te maken tijdens de beleidstoewijzing. Deze eigenschap is handig als u machtigingen wilt toewijzen buiten het toewijzingsbereik. Er is één roltoewijzing per roldefinitie in het beleid (of per roldefinitie in alle beleidsregels in het initiatief). De parameterwaarde moet een geldige resource of een geldig bereik zijn.
  • defaultValue: (Optioneel) Hiermee stelt u de waarde van de parameter in een toewijzing in als er geen waarde is opgegeven. Vereist bij het bijwerken van een bestaande beleidsdefinitie die is toegewezen.
  • allowedValues: (Optioneel) Biedt een matrix met waarden die de parameter accepteert tijdens de toewijzing. Toegestane waardevergelijkingen zijn casegevoelig.

U kunt bijvoorbeeld een beleidsdefinitie definiëren om de locaties te beperken waar resources kunnen worden geïmplementeerd. Een parameter voor die beleidsdefinitie kan allowedLocations zijn. Deze parameter wordt gebruikt door elke toewijzing van de beleidsdefinitie om de geaccepteerde waarden te beperken. Het gebruik van strongType biedt een verbeterde ervaring bij het voltooien van de toewijzing via de portal:

"parameters": {
    "allowedLocations": {
        "type": "array",
        "metadata": {
            "description": "The list of allowed locations for resources.",
            "displayName": "Allowed locations",
            "strongType": "location"
        },
        "defaultValue": [ "westus2" ],
        "allowedValues": [
            "eastus2",
            "westus2",
            "westus"
        ]
    }
}

Een parameterwaarde gebruiken

In de beleidsregel verwijst u naar parameters met de volgende parameters functiesyntaxis:

{
    "field": "location",
    "in": "[parameters('allowedLocations')]"
}

Dit voorbeeld verwijst naar de parameter allowedLocations die is gedemonstreerd in parametereigenschappen.

strongType

Binnen de metadata eigenschap kunt u strongType gebruiken om een lijst met opties voor meervoudige selectie op te geven binnen de Azure Portal. strongType kan een ondersteund resourcetype of een toegestane waarde zijn. Gebruik Get-AzResourceProviderom te bepalen of een resourcetype geldig is voor strongType. De indeling voor een resourcetype strongType is <Resource Provider>/<Resource Type> . Bijvoorbeeld Microsoft.Network/virtualNetworks/subnets.

Sommige resourcetypen die niet worden geretourneerd door Get-AzResourceProvider worden ondersteund. Deze typen zijn:

  • Microsoft.RecoveryServices/vaults/backupPolicies

De waarden die niet zijn toegestaan voor het resourcetype strongType zijn:

  • location
  • resourceTypes
  • storageSkus
  • vmSKUs
  • existingResourceGroups

Definitielocatie

Tijdens het maken van een initiatief of beleid moet u de definitielocatie opgeven. De definitielocatie moet een beheergroep of een abonnement zijn. Deze locatie bepaalt het bereik waaraan het initiatief of beleid kan worden toegewezen. Resources moeten directe leden van of kinderen zijn binnen de hiërarchie van de definitielocatie die als doel moet worden gebruikt voor toewijzing.

Als de definitielocatie een is:

  • Abonnement: alleen resources binnen dat abonnement kunnen aan de beleidsdefinitie worden toegewezen.
  • Beheergroep: alleen resources binnen onderliggende beheergroepen en onderliggende abonnementen kunnen aan de beleidsdefinitie worden toegewezen. Als u van plan bent om de beleidsdefinitie toe te passen op verschillende abonnementen, moet de locatie een beheergroep zijn die elk abonnement bevat.

Zie Bereik begrijpen in Azure Policy voor meer informatie.

Beleidsregel

De beleidsregel bestaat uit de blokken If en Then. In het blok Indien definieert u een of meer voorwaarden die aangeven wanneer het beleid wordt afgedwongen. U kunt logische operators toepassen op deze voorwaarden om het scenario voor een beleid nauwkeurig te definiëren.

In het blok Vervolgens definieert u het effect dat zich voordeed wanneer aan de If-voorwaarden wordt voldaan.

{
    "if": {
        <condition> | <logical operator>
    },
    "then": {
        "effect": "deny | audit | modify | append | auditIfNotExists | deployIfNotExists | disabled"
    }
}

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 keert het resultaat van de voorwaarde om. Voor de allOf-syntaxis (vergelijkbaar met de logische bewerking En) moeten alle voorwaarden waar zijn. Voor de anyOf-syntaxis (vergelijkbaar met de logische bewerking Of) moeten een of meer voorwaarden waar zijn.

U kunt logische operators nesten. In het volgende voorbeeld ziet u een not-bewerking die is genest in een allOf-bewerking.

"if": {
    "allOf": [{
            "not": {
                "field": "tags",
                "containsKey": "application"
            }
        },
        {
            "field": "type",
            "equals": "Microsoft.Storage/storageAccounts"
        }
    ]
},

Voorwaarden

Een voorwaarde evalueert of een waarde aan bepaalde criteria voldoet. 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"

Voor minder worden lessOrEquals, greater en greaterOrEquals weergegeven als het eigenschapstype niet overeen komt met het voorwaardetype. Tekenreeksvergelijkingen worden gemaakt met behulp van InvariantCultureIgnoreCase .

Wanneer u de voorwaarden like en notLike gebruikt, geeft u een jokerteken * op in de waarde . De waarde mag niet meer dan één jokerteken * hebben.

Wanneer u de voorwaarden match en notMatch gebruikt, geeft u op dat deze overeenkomen met een cijfer, voor een letter, zodat deze overeenkomen met een teken en een ander teken dat met dat werkelijke # teken overeen ? . komt. Hoewel match en notMatch case-sensitive zijn, zijn alle andere voorwaarden die een stringValue evalueren niet-case-gevoelig. Er zijn niet-casegevoelige alternatieven 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 veldexpressie. 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 voorbereid 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 locatieagnostisch zijn.
  • id
    • Retourneert de resource-id van de resource die wordt geëvalueerd.
    • Voorbeeld: /subscriptions/06be863d-0996-4d56-be22-384767287aa2/resourceGroups/myRG/providers/Microsoft.KeyVault/vaults/myVault
  • identity.type
  • tags
  • tags['<tagName>']
    • Deze haaksyntaxis ondersteunt tagnamen met leestekens, zoals een afbreekstreepje, punt of spatie.
    • Waarbij <tagName> de naam is van de tag om de voorwaarde voor te valideren.
    • Voorbeelden: tags['Acct.CostCenter'] waarbij Acct.CostCenter de naam van de tag is.
  • tags['''<tagName>''']
    • Deze haaksyntaxis ondersteunt tagnamen met apostroofs door te escapen met dubbele apostroofs.
    • Waarbij ' <tagName> ' de naam is van de tag om de voorwaarde voor te valideren.
    • Voorbeeld: tags['''My.Apostrophe.Tag'''] waarbij 'My.Apostrophe.Tag' de naam van de tag is.
  • eigenschapsaliassen: zie Aliassen voor een lijst.

Notitie

tags.<tagName>, tags[tagName] en zijn nog steeds tags[tag.with.dots] acceptabele manieren om een tagsveld te declareren. De voorkeursexpressie is echter de expressies die hierboven worden vermeld.

Notitie

In veldexpressie die [ * ] verwijst naar alias, wordt elk element in de matrix afzonderlijk geëvalueerd met logische elementen en tussen elementen. Zie Verwijzen naar de resource-eigenschappen van de matrix voor meer informatie.

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 de beleidstoewijzing.

In het volgende voorbeeld wordt gebruikt voor het maken van een veld tags opzoek naar de tag met de naam concat de waarde van de tagName parameter. Als die tag niet bestaat, wordt het effect wijzigen gebruikt om de tag toe te voegen met behulp van de waarde van dezelfde benoemde tag die is ingesteld op de bovenliggende resourcegroep met 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"
            ]
        }
    }
}

Waarde

Voorwaarden die evalueren of een waarde aan bepaalde criteria voldoet, kunnen worden gevormd met behulp van een waardeexpressie. Waarden kunnen letterlijke waarden zijn, de waarden van parametersof de geretourneerde waarden van ondersteunde sjabloonfuncties.

Waarschuwing

Als het resultaat van een sjabloonfunctie een fout is, mislukt de beleidsevaluatie. Een mislukte evaluatie is een impliciete weigering. Zie sjabloonfouten vermijden voor meer informatie. Gebruik enforcementMode van DoNotEnforce om 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 van een beleidsregel wordt een waarde gebruikt om het resultaat van de functie en de resourceGroup() geretourneerde naam-eigenschap te vergelijken met een voorwaarde zoals *netrg . Met de regel wordt een resource die niet van het Microsoft.Network/* type is, in een resourcegroep waarvan de naam eindigt op , niet van het type . *netrg

{
    "if": {
        "allOf": [{
                "value": "[resourceGroup().name]",
                "like": "*netrg"
            },
            {
                "field": "type",
                "notLike": "Microsoft.Network/*"
            }
        ]
    },
    "then": {
        "effect": "deny"
    }
}

In dit voorbeeld van een beleidsregel wordt waarde gebruikt om te controleren of het resultaat van meerdere geneste functies gelijk is aan true . Met de regel wordt elke resource die niet ten minste drie tags heeft, uitgesloten.

{
    "mode": "indexed",
    "policyRule": {
        "if": {
            "value": "[less(length(field('tags')), 3)]",
            "equals": "true"
        },
        "then": {
            "effect": "deny"
        }
    }
}

Sjabloonfouten voorkomen

Het gebruik van sjabloonfuncties in waarde maakt veel complexe geneste functies mogelijk. Als het resultaat van een sjabloonfunctie een fout is, mislukt de beleidsevaluatie. Een mislukte evaluatie is een impliciete weigering. Een voorbeeld van een waarde die in bepaalde scenario's mislukt:

{
    "policyRule": {
        "if": {
            "value": "[substring(field('name'), 0, 3)]",
            "equals": "abc"
        },
        "then": {
            "effect": "audit"
        }
    }
}

In de bovenstaande voorbeeldbeleidsregel wordt subtekenreeks() gebruikt om de eerste drie tekens van de naam te vergelijken met abc. Als de naam korter is dan drie tekens, resulteert de functie in een substring() fout. Deze fout zorgt ervoor dat het beleid een weigereffect wordt.

Gebruik in plaats daarvan de functie if() om te controleren of de eerste drie tekens van de naam gelijk zijn aan abc zonder dat een naam die korter is dan drie tekens een fout veroorzaakt:

{
    "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 gewijzigde beleidsregel controleert u de lengte van de naam voordat u probeert een op een waarde met if() minder dan drie tekens op te substring() halen. Als de naam te kort is, wordt in plaats daarvan de waarde 'niet beginnend met abc' geretourneerd en vergeleken met abc. Een resource met een korte naam die niet begint met abc mislukt nog steeds de beleidsregel, maar veroorzaakt geen fout meer tijdens de evaluatie.

Count

Voorwaarden die tellen 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 voldoet. Met Count wordt elk matrixlid geëvalueerd voor een voorwaardeexpressie en worden de werkelijke resultaten opgeteld, die vervolgens worden vergeleken met de expressieoperator.

Aantal velden

Tel hoeveel leden van een matrix in de nettolading van de aanvraag voldoen aan een voorwaardeexpressie. De structuur van expressies voor het aantal velden 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 het aantal velden:

  • 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 [ * ] lid van de alias-matrix van count.field . Als deze eigenschap niet is opgegeven, worden alle matrixleden met het pad 'field' geëvalueerd als true. 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 aan de voorwaardeexpressie count.where heeft voldaan. Er moet een numerieke voorwaarde worden gebruikt.

Expressies voor het aantal velden kunnen dezelfde veldmatrice maximaal drie keer opstellen in één policyRule-definitie.

Zie Verwijzen naar matrixresource-eigenschappen voor meer informatie over het werken met matrixeigenschappen in Azure Policy, inclusief gedetailleerde uitleg over hoe de expressie voor het aantal velden wordt geëvalueerd.

Aantal waarden

Tel hoeveel leden van een matrix aan een voorwaarde voldoen. De matrix kan een letterlijke matrix zijn of een verwijzing naar de matrixparameter. De structuur van expressies voor het aantal waarden 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 het aantal waarden:

  • count.value (vereist): de matrix die moet worden geëvalueerd.
  • count.name (vereist): de indexnaam, bestaande uit Engelse letters en cijfers. Hiermee definieert u 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 onderliggende expressie van een andere count-expressie. Als 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 als 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 geïnsemaneerde matrixlid kan worden gebruikt door de huidige functie aan te roepen.
  • <condition> (vereist): de waarde wordt vergeleken met het aantal items dat aan de count.where voorwaardeexpressie heeft voldaan. Er moet een numerieke voorwaarde worden gebruikt.

De volgende limieten worden afgedwongen:

  • Expressies voor het aantal waarden kunnen maximaal 10 worden gebruikt in één policyRule-definitie.
  • Elke expressie voor het aantal waarden kan maximaal 100 iteraties uitvoeren. Dit getal omvat het aantal iteraties dat wordt uitgevoerd door expressies voor het aantal bovenliggende waarden.

De huidige functie

De current() functie is alleen beschikbaar binnen de count.where voorwaarde. Deze retourneert de waarde van het matrixlid dat momenteel wordt geïnsuleerd door de evaluatie van de count-expressie.

Gebruik van het aantal waarden

  • current(<index name defined in count.name>). Bijvoorbeeld: current('arrayMember').
  • current(). Alleen toegestaan wanneer de expressie voor het aantal waarden geen onderliggende waarde van een andere count-expressie is. Retourneert dezelfde waarde als hierboven.

Als de waarde die door de aanroep wordt geretourneerd een object is, worden eigenschapsaccesoires ondersteund. Bijvoorbeeld: current('objectArrayMember').property.

Gebruik van aantal velden

  • current(<the array alias defined in count.field>). Bijvoorbeeld current('Microsoft.Test/resource/enumeratedArray[*]').
  • current(). Alleen toegestaan als de expressie voor het aantal velden geen onderliggende expressie 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: Controleren 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 leden van de object matrix 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: Controleer 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 de functie in de voorwaarden om toegang te krijgen tot de waarde van het momenteel current() where geïnsemaneerde 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 de functie in de voorwaarden om toegang te krijgen tot de waarde van het field() where momenteel geïndeereerde 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: Controleer 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: controleer 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 worden geleverd door een matrixparameter.

{
    "count": {
        "value": "[parameters('namePatterns')]",
        "name": "pattern",
        "where": {
            "field": "name",
            "like": "[current('pattern')]"
        }
    },
    "greater": 0
}

Voorbeeld 4: Controleer of een van de adres voorvoegsels van het virtuele netwerk niet in de lijst met goedgekeurde voorvoegsels staat.

{
    "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'))]"
}

Effect

Azure Policy ondersteunt de volgende soorten effect:

  • Toevoeg: voegt de gedefinieerde set velden toe aan de aanvraag
  • Controle: genereert een waarschuwingsgebeurtenis in het activiteitenlogboek, maar mislukt de aanvraag niet
  • AuditIfNotExists: genereert een waarschuwingsgebeurtenis in het activiteitenlogboek als er geen gerelateerde resource bestaat
  • Weigeren: genereert een gebeurtenis in het activiteitenlogboek en mislukt de aanvraag
  • DeployIfNotExists: implementeert een gerelateerde resource als deze nog niet bestaat
  • Uitgeschakeld: evalueert resources niet op naleving van de beleidsregel
  • Wijzigen: hiermee worden de gedefinieerde tags toegevoegd, bijgewerkt of verwijderd uit een resource of abonnement
  • EnforceOPAConstraint (afgeschaft): hiermee configureert u de toegangscontroller van de Open Policy Agent met Gatekeeper v3 voor zelf-beheerde Kubernetes-clusters in Azure
  • EnforceRegoPolicy (afgeschaft): hiermee configureert u de toegangscontroller van de Open Policy Agent met Gatekeeper v2 in Azure Kubernetes Service

Zie Understanding Azure Policy Effects voor volledige details over elk effect, de volgorde van de evaluatie, eigenschappen Azure Policy voorbeelden.

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()
  • deployment()
  • list*
  • newGuid()
  • pickZones()
  • providers()
  • reference()
  • resourceId()
  • 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 wijkt af 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 universele ISO 8601 Datum/tijd-indeling. yyyy-MM-ddTHH:mm:ss.fffffffZ

De volgende functies zijn alleen beschikbaar in beleidsregels:

  • addDays(dateTime, numberOfDaysToAdd)

    • dateTime:[Required] string - String in the Universal ISO 8601 DateTime format 'yyyy-MM-ddTHH:mm:ss. FFFFFFFZ'
    • numberOfDaysToAdd:[Vereist] geheel getal - aantal dagen dat moet worden toevoegen
  • field(fieldName)

    • fieldName:[vereist] tekenreeks - Naam van het op te halen veld
    • 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 in de resource die worden geëvalueerd. Een voorbeeld van dit gebruik is te zien in het DeployIfNotExists-voorbeeld.
  • requestContext().apiVersion

    • Retourneert de API-versie van de aanvraag die de 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 compatibiliteitsevaluatie van bestaande resources.
  • policy()

    • Retourneert de volgende informatie over het beleid dat wordt geëvalueerd. Eigenschappen zijn toegankelijk vanuit het geretourneerde object (bijvoorbeeld: [policy().assignmentId] ).

      {
        "assignmentId": "/subscriptions/ad404ddd-36a5-4ea8-b3e3-681e77487a63/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)

    • bereik: [vereist] tekenreeks - Tekenreeks die een bereik van IP-adressen opgeeft om te controleren of de targetRange zich binnen.
    • targetRange:[vereist] tekenreeks - Tekenreeks die een bereik van IP-adressen opgeeft om te valideren als opgenomen in het bereik.
    • Retourneert een Booleaanse booleaanse tekst voor of het IP-adresbereik van het bereik het IP-adresbereik targetRange bevat. Lege bereiken of een combinatie van IP-families is niet toegestaan en resulteert in evaluatiefout.

    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 dat is gedefinieerd door ip-adressen voor het begin en het eind (voorbeelden: 192.168.0.1-192.168.0.9 , 2001:0DB8::-2001:0DB8::3:FFFF )
  • current(indexName)

Voorbeeld van beleidsfunctie

In dit voorbeeld van een beleidsregel wordt de resourcefunctie gebruikt om de eigenschap name op te halen, gecombineerd met de matrix- en objectfunctie om een voorwaarde te bouwen die afdwingt dat de resourcenaam begint met de naam van de resourceGroup concat like resourcegroep.

{
    "if": {
        "not": {
            "field": "name",
            "like": "[concat(resourceGroup().name,'*')]"
        }
    },
    "then": {
        "effect": "deny"
    }
}

Aliassen

U gebruikt eigenschapsaliassen voor toegang tot specifieke eigenschappen voor een resourcetype. Met aliassen kunt u beperken welke waarden of voorwaarden zijn toegestaan voor een eigenschap van een resource. Elke alias wordt voor een bepaald resourcetype aan paden in verschillende API-versies toe te kennen. Tijdens de beleidsevaluatie krijgt de beleidsent engine het eigenschapspad voor die API-versie.

De lijst met aliassen groeit altijd. Als u wilt weten welke aliassen momenteel worden ondersteund door Azure Policy, gebruikt u een van de volgende methoden:

  • Azure Policy-extensie voor Visual Studio Code (aanbevolen)

    Gebruik de Azure Policy-extensie voor Visual Studio Code om aliassen voor resource-eigenschappen weer te geven en te ontdekken.

    Schermopname van de Azure Policy voor Visual Studio Code met de muisaanwijzer op een eigenschap om de aliasnamen weer te geven.

  • Azure PowerShell

    # Login first with Connect-AzAccount if not using Cloud Shell
    
    # Use Get-AzPolicyAlias to list available providers
    Get-AzPolicyAlias -ListAvailable
    
    # Use Get-AzPolicyAlias to list aliases for a Namespace (such as Azure Compute -- Microsoft.Compute)
    (Get-AzPolicyAlias -NamespaceMatch 'compute').Aliases
    

    Notitie

    Als u aliassen wilt vinden die kunnen worden gebruikt met het effect wijzigen, gebruikt u de volgende opdracht in Azure PowerShell 4.6.0 of hoger:

    Get-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' }
    
  • Azure CLI

    # Login first with az login if not using Cloud Shell
    
    # List namespaces
    az provider list --query [*].namespace
    
    # Get Azure Policy aliases for a specific Namespace (such as Azure Compute -- Microsoft.Compute)
    az provider show --namespace Microsoft.Compute --expand "resourceTypes/aliases" --query "resourceTypes[].aliases[].name"
    
  • REST API / ARMClient

    GET https://management.azure.com/providers/?api-version=2019-10-01&$expand=resourceTypes/aliases
    

Inzicht in de alias [*]

Verschillende beschikbare aliassen hebben een versie die wordt weergegeven als een 'normale' naam en een andere die eraan [*] is gekoppeld. Bijvoorbeeld:

  • Microsoft.Storage/storageAccounts/networkAcls.ipRules
  • Microsoft.Storage/storageAccounts/networkAcls.ipRules[*]

De alias 'normaal' vertegenwoordigt het veld als één waarde. Dit veld is voor exacte vergelijkingsscenario's waarin de hele set waarden exact moet zijn zoals gedefinieerd, niet meer en niet minder.

De [*] alias vertegenwoordigt een verzameling waarden die zijn geselecteerd uit de elementen van een matrixresource-eigenschap. Bijvoorbeeld:

Alias Geselecteerde waarden
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] De elementen van de ipRules matrix.
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action De waarden van de action eigenschap van elk element van de ipRules matrix.

Bij gebruik in een veldvoorwaarde maken matrixaliassen het mogelijk om elk afzonderlijk matrixelement te vergelijken met een doelwaarde. Wanneer u deze gebruikt met de count-expressie, kunt u het volgende doen:

  • De grootte van een matrix controleren
  • Controleer of alle\alle\neen van de matrixelementen aan een complexe voorwaarde voldoet
  • Controleer of precies n matrixelementen voldoen aan een complexe voorwaarde

Zie Verwijzen naar de resource-eigenschappen van de matrix voor meer informatie en voorbeelden.

Volgende stappen