Structuur van Azure-beleidsdefinitiesAzure Policy definition structure

Resource-beleidsdefinities worden gebruikt door Azure Policy tot stand brengen van conventies voor resources.Resource policy definitions are used by Azure Policy to establish conventions for resources. Elke definitie beschrijft resourcenaleving en wat moet worden uitgevoerd wanneer een resource niet compatibel is zijn doorgevoerd.Each definition describes resource compliance and what effect to take when a resource is non-compliant. Door te definiëren verdragen, kunt u kosten beheren en meer resources eenvoudig beheren.By defining conventions, you can control costs and more easily manage your resources. U kunt bijvoorbeeld opgeven dat alleen bepaalde typen virtuele machines zijn toegestaan.For example, you can specify that only certain types of virtual machines are allowed. Of u kunt vereisen dat alle resources een bepaald label hebben.Or, you can require that all resources have a particular tag. Beleidsregels worden overgenomen door alle onderliggende resources.Policies are inherited by all child resources. Als een beleid wordt toegepast op een resourcegroep, is het van toepassing op alle resources in die resourcegroep.If a policy is applied to a resource group, it's applicable to all the resources in that resource group.

Het schema voor het definitie beleid vindt u hier: https://schema.management.azure.com/schemas/2019-06-01/policyDefinition.jsonThe policy definition schema is found here: https://schema.management.azure.com/schemas/2019-06-01/policyDefinition.json

JSON kunt u een beleidsdefinitie maken.You use JSON to create a policy definition. De beleidsdefinitie bevat elementen voor:The policy definition contains elements for:

  • modusmode
  • parametersparameters
  • Weergavenaamdisplay name
  • descriptiondescription
  • beleidsregelpolicy rule
    • logische evaluatielogical evaluation
    • effecteffect

De volgende JSON ziet u bijvoorbeeld een beleid dat beperkt welke resources zijn geïmplementeerd:For example, the following JSON shows a policy that limits where resources are deployed:

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

Alle Azure Policy-voor beelden zijn Azure Policy-voor beelden.All Azure Policy samples are at Azure Policy samples.

ModusMode

De modus is geconfigureerd, afhankelijk van of het beleid is gericht op een Azure Resource Manager eigenschap of een bron provider eigenschap.Mode is configured depending on if the policy is targeting an Azure Resource Manager property or a Resource Provider property.

Resource Manager-modiResource Manager modes

De modus bepaalt welke resourcetypen voor een beleid wordt geëvalueerd.The mode determines which resource types will be evaluated for a policy. De ondersteunde modi zijn:The supported modes are:

  • all: resourcegroepen en alle resourcetypen evaluerenall: evaluate resource groups and all resource types
  • indexed: alleen evalueren resourcetypen die ondersteuning bieden voor labels en de locatieindexed: only evaluate resource types that support tags and location

We raden u aan modus naar all in de meeste gevallen.We recommend that you set mode to all in most cases. Alle beleidsdefinities die zijn gemaakt via de portal gebruiken de all modus.All policy definitions created through the portal use the all mode. Als u PowerShell of Azure CLI gebruikt, kunt u opgeven de modus parameter handmatig.If you use PowerShell or Azure CLI, you can specify the mode parameter manually. Als de beleidsdefinitie bevat geen een modus waarde, wordt standaard all in Azure PowerShell en in het null in de Azure CLI.If the policy definition doesn't include a mode value, it defaults to all in Azure PowerShell and to null in Azure CLI. Een null modus is hetzelfde als wanneer u indexed ter ondersteuning van achterwaartse compatibiliteit.A null mode is the same as using indexed to support backwards compatibility.

indexed moet worden gebruikt bij het maken van beleid dat labels of locaties worden afgedwongen.indexed should be used when creating policies that enforce tags or locations. Hoewel dit niet vereist is, voor komt u dat resources die tags en locaties ondersteunen, niet kunnen worden weer gegeven als niet-compatibel in de nalevings resultaten.While not required, it prevents resources that don't support tags and locations from showing up as non-compliant in the compliance results. De uitzondering hierop is resourcegroepen.The exception is resource groups. Voor die locatie of de tags voor een resourcegroep afdwingen moeten ingesteld modus naar all en een specifiek doel de Microsoft.Resources/subscriptions/resourceGroups type.Policies that enforce location or tags on a resource group should set mode to all and specifically target the Microsoft.Resources/subscriptions/resourceGroups type. Zie voor een voorbeeld afdwingen groep resourcetags.For an example, see Enforce resource group tags. Zie tag-ondersteuning voor Azure-resourcesvoor een lijst met resources die Tags ondersteunen.For a list of resources that support tags, see Tag support for Azure resources.

resource provider modi (preview-versie)Resource Provider modes (preview)

De volgende resource provider modi worden momenteel ondersteund tijdens de preview-versie:The following Resource Provider modes are currently supported during preview:

  • Microsoft.ContainerService.Data voor het beheren van regels voor toegangs beheer in de Azure Kubernetes-service.Microsoft.ContainerService.Data for managing admission controller rules on Azure Kubernetes Service. Beleids regels die gebruikmaken van deze resource provider modus moeten het EnforceRegoPolicy -effect gebruiken.Policies using this Resource Provider mode must use the EnforceRegoPolicy effect.
  • Microsoft.Kubernetes.Data voor het beheren van zelf-beheerde AKS-engine Kubernetes-clusters op Azure.Microsoft.Kubernetes.Data for managing self-managed AKS Engine Kubernetes clusters on Azure. Beleids regels die gebruikmaken van deze resource provider modus moeten het EnforceOPAConstraint -effect gebruiken.Policies using this Resource Provider mode must use the EnforceOPAConstraint effect.
  • Microsoft.KeyVault.Data voor het beheren van kluizen en certificaten in Azure Key Vault.Microsoft.KeyVault.Data for managing vaults and certificates in Azure Key Vault.

Notitie

De resource provider modi bieden alleen ondersteuning voor ingebouwde beleids definities en bieden geen ondersteuning voor initiatieven als er een preview-versie beschikbaar is.Resource Provider modes only support built-in policy definitions and don't support initiatives while in preview.

ParametersParameters

Parameters helpen uw beleidsbeheer te vereenvoudigen door het aantal beleidsdefinities te verminderen.Parameters help simplify your policy management by reducing the number of policy definitions. Met parameters, zoals de velden in een formulier – name, address, city, state.Think of parameters like the fields on a form – name, address, city, state. Deze parameters altijd hetzelfde blijven, maar hun waarden worden gewijzigd op basis van het afzonderlijke invullen van het formulier.These parameters always stay the same, however their values change based on the individual filling out the form. Parameters werken op dezelfde manier als het samenstellen van beleid.Parameters work the same way when building policies. Door parameters te nemen in de beleidsdefinitie van een, kunt u beleid voor verschillende scenario's met behulp van verschillende waarden gebruiken.By including parameters in a policy definition, you can reuse that policy for different scenarios by using different values.

Notitie

Para meters kunnen worden toegevoegd aan een bestaande en toegewezen definitie.Parameters may be added to an existing and assigned definition. De nieuwe para meter moet de eigenschap DefaultValue bevatten.The new parameter must include the defaultValue property. Dit voorkomt dat bestaande toewijzingen van het beleid of initiatief indirect wordt ongeldig gemaakt.This prevents existing assignments of the policy or initiative from indirectly being made invalid.

Parameter eigenschappenParameter properties

Een para meter heeft de volgende eigenschappen die worden gebruikt in de beleids definitie:A parameter has the following properties that are used in the policy definition:

  • naam: de naam van de para meter.name: The name of your parameter. Wordt gebruikt door de implementatie functie parameters binnen de beleids regel.Used by the parameters deployment function within the policy rule. Zie een parameter waarde gebruikenvoor meer informatie.For more information, see using a parameter value.
  • type: bepaalt of de para meter een teken reeks, een matrix, een object, een Booleaanse waarde, een geheel getal, een floatof een datum/tijdis.type: Determines if the parameter is a string, array, object, boolean, integer, float, or datetime.
  • metadata: definieert subeigenschappen die voornamelijk worden gebruikt door de Azure Portal om gebruikers vriendelijke informatie weer te geven:metadata: Defines subproperties primarily used by the Azure portal to display user-friendly information:
    • description: de uitleg van het gebruik van de para meter voor.description: The explanation of what the parameter is used for. Kan worden gebruikt om voor beelden te bieden van acceptabele waarden.Can be used to provide examples of acceptable values.
    • displayName: de beschrijvende naam die wordt weer gegeven in de portal voor de para meter.displayName: The friendly name shown in the portal for the parameter.
    • strongType: (optioneel) gebruikt bij het toewijzen van de beleids definitie via de portal.strongType: (Optional) Used when assigning the policy definition through the portal. Biedt een context bewuste lijst.Provides a context aware list. Zie strongTypevoor meer informatie.For more information, see strongType.
    • assignPermissions: (optioneel) Stel in op waar als u wilt Azure Portal roltoewijzingen wilt maken tijdens de beleids toewijzing.assignPermissions: (Optional) Set as true to have Azure portal create role assignments during policy assignment. Deze eigenschap is handig voor het geval u machtigingen wilt toewijzen buiten het toewijzings bereik.This property is useful in case you wish to assign permissions outside the assignment scope. Er is één roltoewijzing per roldefinitie in het beleid (of per functie definitie in alle beleids regels in het initiatief).There is one role assignment per role definition in the policy (or per role definition in all of the policies in the initiative). De parameter waarde moet een geldige resource of een geldig bereik zijn.The parameter value must be a valid resource or scope.
  • defaultValue: (optioneel) Hiermee stelt u de waarde van de para meter in een toewijzing in als er geen waarde is opgegeven.defaultValue: (Optional) Sets the value of the parameter in an assignment if no value is given. Vereist bij het bijwerken van een bestaande beleids definitie die is toegewezen.Required when updating an existing policy definition that is assigned.
  • allowedValues: (optioneel) biedt een matrix met waarden die door de para meter worden geaccepteerd tijdens de toewijzing.allowedValues: (Optional) Provides an array of values that the parameter accepts during assignment.

U kunt bijvoorbeeld een beleids definitie definiëren om de locaties te beperken waar resources kunnen worden geïmplementeerd.As an example, you could define a policy definition to limit the locations where resources can be deployed. Een para meter voor die beleids definitie kan allowedLocationszijn.A parameter for that policy definition could be allowedLocations. Deze para meter wordt gebruikt door elke toewijzing van de beleids definitie om de geaccepteerde waarden te beperken.This parameter would be used by each assignment of the policy definition to limit the accepted values. Het gebruik van strongType biedt een verbeterde ervaring bij het volt ooien van de toewijzing via de portal:The use of strongType provides an enhanced experience when completing the assignment through the 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 parameter waarde gebruikenUsing a parameter value

In de beleids regel verwijst u naar para meters met de volgende parameters functie syntaxis:In the policy rule, you reference parameters with the following parameters function syntax:

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

Dit voor beeld verwijst naar de allowedLocations -para meter die is gedemonstreerd in parameter eigenschappen.This sample references the allowedLocations parameter that was demonstrated in parameter properties.

strongTypestrongType

Binnen de metadata eigenschap kunt u strongType gebruiken om een multi-select lijst met opties te bieden in de Azure Portal.Within the metadata property, you can use strongType to provide a multi-select list of options within the Azure portal. Toegestane waarden voor strongType momenteel opnemen:Allowed values for strongType currently include:

  • location
  • resourceTypes
  • storageSkus
  • vmSKUs
  • existingResourceGroups
  • omsWorkspace
  • Microsoft.EventHub/Namespaces/EventHubs
  • Microsoft.EventHub/Namespaces/EventHubs/AuthorizationRules
  • Microsoft.EventHub/Namespaces/AuthorizationRules
  • Microsoft.RecoveryServices/vaults
  • Microsoft.RecoveryServices/vaults/backupPolicies

DefinitielocatieDefinition location

Tijdens het maken van een initiatief of het beleid, is het nodig zijn om de definitielocatie te geven.While creating an initiative or policy, it's necessary to specify the definition location. De locatie van de definitie moet op een beheergroep of een abonnement.The definition location must be a management group or a subscription. Deze locatie bepaalt het bereik waarvoor de initiatief of het beleid kan worden toegewezen.This location determines the scope to which the initiative or policy can be assigned. Resources moet directe leden van of kinderen binnen de hiërarchie van de locatie van de definitie om de doelgroep voor het toewijzen van te zijn.Resources must be direct members of or children within the hierarchy of the definition location to target for assignment.

Als de locatie van de definitie a:If the definition location is a:

  • Abonnement - alleen de resources in dat abonnement aan het beleid kunnen worden toegewezen.Subscription - Only resources within that subscription can be assigned the policy.
  • Beheergroep - alleen resources in de onderliggende beheergroepen en onderliggende abonnementen kunnen worden toegewezen op het beleid.Management group - Only resources within child management groups and child subscriptions can be assigned the policy. Als u van plan bent om toe te passen van de beleidsdefinitie voor verschillende abonnementen, is de locatie moet een beheergroep met deze abonnementen.If you plan to apply the policy definition to several subscriptions, the location must be a management group that contains those subscriptions.

Weergavenaam en beschrijvingDisplay name and description

U gebruikt displayName en beschrijving om te bepalen van de beleidsdefinitie en een context bieden voor wanneer deze wordt gebruikt.You use displayName and description to identify the policy definition and provide context for when it's used. DisplayName heeft een maximale lengte van 128 tekens en een Beschrijving van Maxi maal 512 tekens.displayName has a maximum length of 128 characters and description a maximum length of 512 characters.

BeleidsregelPolicy rule

De beleidsregel bestaat uit als en vervolgens blokken.The policy rule consists of If and Then blocks. In de als blok, definieert u een of meer voorwaarden die opgeven wanneer het beleid wordt afgedwongen.In the If block, you define one or more conditions that specify when the policy is enforced. U kunt logische operators toepassen op deze voorwaarden voor het definiëren van het scenario voor een beleid nauwkeurig.You can apply logical operators to these conditions to precisely define the scenario for a policy.

In de vervolgens blok, definieert u het effect dat gebeurt er wanneer de als voorwaarden is voldaan.In the Then block, you define the effect that happens when the If conditions are fulfilled.

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

Logische operatorsLogical operators

Ondersteunde logische operators zijn:Supported logical operators are:

  • "not": {condition or operator}
  • "allOf": [{condition or operator},{condition or operator}]
  • "anyOf": [{condition or operator},{condition or operator}]

De niet syntaxis keert het resultaat van de voorwaarde.The not syntax inverts the result of the condition. De allOf syntaxis (vergelijkbaar met de logische en bewerking) vereist dat alle voorwaarden wordt voldaan.The allOf syntax (similar to the logical And operation) requires all conditions to be true. De dragen syntaxis (vergelijkbaar met de logische of bewerking) vereist een of meer voorwaarden wordt voldaan.The anyOf syntax (similar to the logical Or operation) requires one or more conditions to be true.

U kunt logische operators nesten.You can nest logical operators. Het volgende voorbeeld wordt een niet bewerking die is genest in een allOf bewerking.The following example shows a not operation that is nested within an allOf operation.

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

VoorwaardenConditions

In een voor waarde wordt geëvalueerd of een veld of de waarde -accessor voldoet aan bepaalde criteria.A condition evaluates whether a field or the value accessor meets certain criteria. De ondersteunde voorwaarden zijn:The supported conditions are:

  • "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": "value"
  • "lessOrEquals": "value"
  • "greater": "value"
  • "greaterOrEquals": "value"
  • "exists": "bool"

Wanneer u de zoals en notlike zijn voorwaarden bieden u een jokerteken * in de waarde.When using the like and notLike conditions, you provide a wildcard * in the value. De waarde mag niet meer dan één jokerteken hebben *.The value shouldn't have more than one wildcard *.

Wanneer u de voor waarden match en notMatch gebruikt, geeft u # een cijfer, ? voor een letter, . op te zoeken naar een wille keurig teken en elk ander teken dat overeenkomt met het werkelijke teken.When using the match and notMatch conditions, provide # to match a digit, ? for a letter, . to match any character, and any other character to match that actual character. match en notMatch zijn hoofdletter gevoelig.match and notMatch are case-sensitive. Hoofdletter gevoelige alternatieven zijn beschikbaar in matchInsensitively en notMatchInsensitively.Case-insensitive alternatives are available in matchInsensitively and notMatchInsensitively. Zie voor voorbeelden van toestaan verschillende bestandsnaampatronen.For examples, see Allow several name patterns.

VeldenFields

Voorwaarden zijn samengesteld met behulp van velden.Conditions are formed by using fields. Een veld overeenkomt met eigenschappen in de nettolading van de resource-aanvraag en een beschrijving van de status van de resource.A field matches properties in the resource request payload and describes the state of the resource.

De volgende velden worden ondersteund:The following fields are supported:

  • name
  • fullName
    • Retourneert de volledige naam van de resource.Returns the full name of the resource. De volledige naam van een resource is de naam van de resource voorafgegaan door een bovenliggende resource-namen (bijvoorbeeld ' MijnServer/MijnDatabase').The full name of a resource is the resource name prepended by any parent resource names (for example "myServer/myDatabase").
  • kind
  • type
  • location
  • identity.type
  • tags
  • tags['<tagName>']
    • De syntaxis van het haakje ondersteunt label namen met lees tekens zoals een afbreek streepje, een punt of een spatie.This bracket syntax supports tag names that have punctuation such as a hyphen, period, or space.
    • Waar <tagName> is de naam van de code voor het valideren van de voorwaarde voor.Where <tagName> is the name of the tag to validate the condition for.
    • Voor beelden: tags['Acct.CostCenter'] waarbij acct. CostCenter de naam van de tag is.Examples: tags['Acct.CostCenter'] where Acct.CostCenter is the name of the tag.
  • tags['''<tagName>''']
    • De syntaxis van het haakje ondersteunt label namen met apostrofs in het teken met dubbele apostrofs.This bracket syntax supports tag names that have apostrophes in it by escaping with double apostrophes.
    • Waarbij '<tagName>' de naam van het label is voor het valideren van de voor waarde voor.Where '<tagName>' is the name of the tag to validate the condition for.
    • Voor beeld: tags['''My.Apostrophe.Tag'''] waarbij ' My. apostrof. tag ' de naam van de tag is.Example: tags['''My.Apostrophe.Tag'''] where 'My.Apostrophe.Tag' is the name of the tag.
  • de eigenschap aliassen - Zie voor een lijst aliassen.property aliases - for a list, see Aliases.

Notitie

tags.<tagName>, tags[tagName]en tags[tag.with.dots] zijn nog steeds acceptabele manieren om een label veld te declareren.tags.<tagName>, tags[tagName], and tags[tag.with.dots] are still acceptable ways of declaring a tags field. De voorkeurs expressies zijn echter die in de bovenstaande lijst.However, the preferred expressions are those listed above.

Tags gebruiken met para metersUse tags with parameters

Een parameter waarde kan worden door gegeven aan een label veld.A parameter value can be passed to a tag field. Door een para meter door te geven aan een label veld, verhoogt u de flexibiliteit van de beleids definitie tijdens beleids toewijzing.Passing a parameter to a tag field increases the flexibility of the policy definition during policy assignment.

In het volgende voor beeld wordt concat gebruikt voor het maken van een label veld met de naam de waarde van de para meter tagName .In the following example, concat is used to create a tags field lookup for the tag named the value of the tagName parameter. Als dat label niet bestaat, wordt het wijzigings effect gebruikt om de tag toe te voegen met behulp van de waarde van dezelfde benoemde tag die is ingesteld voor de bovenliggende resource groep van de gecontroleerde resources met behulp van de functie lookup resourcegroup().If that tag doesn't exist, the modify effect is used to add the tag using the value of the same named tag set on the audited resources parent resource group by using the resourcegroup() lookup function.

{
    "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/b24988ac-6180-42a0-ab88-20f7382dd24c"
            ]
        }
    }
}

WaardeValue

Voor waarden kunnen ook worden gevormd met behulp van een waarde.Conditions can also be formed using value. waarde controleert de voor waarden op basis van para meters, ondersteunde sjabloon functiesof letterlijke tekens.value checks conditions against parameters, supported template functions, or literals. waarde wordt gekoppeld aan elke ondersteunde voor waarde.value is paired with any supported condition.

Waarschuwing

Als het resultaat van een sjabloon functie een fout is, mislukt de beleids evaluatie.If the result of a template function is an error, policy evaluation fails. Een mislukte evaluatie is een impliciete weigering.A failed evaluation is an implicit deny. Zie voor meer informatie sjabloon fouten voor komen.For more information, see avoiding template failures.

Voor beelden van waardenValue examples

In dit voor beeld van een beleids regel wordt de waarde gebruikt om het resultaat van de resourceGroup() functie en de eigenschap geretourneerde naam te vergelijken met een like -voor waarde van *netrg.This policy rule example uses value to compare the result of the resourceGroup() function and the returned name property to a like condition of *netrg. De regel weigert resources die niet van het Microsoft.Network/* type zijn in een resource groep waarvan de naam eindigt op *netrg.The rule denies any resource not of the Microsoft.Network/* type in any resource group whose name ends in *netrg.

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

Dit voor beeld van een beleids regel gebruikt een waarde om te controleren of het resultaat van meerdere geneste functies gelijk is aan true.This policy rule example uses value to check if the result of multiple nested functions equals true. De regel weigert een resource die niet ten minste drie tags heeft.The rule denies any resource that doesn't have at least three tags.

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

Storingen in sjablonen voor komenAvoiding template failures

Het gebruik van sjabloon functies in waarde biedt veel complexe geneste functies.The use of template functions in value allows for many complex nested functions. Als het resultaat van een sjabloon functie een fout is, mislukt de beleids evaluatie.If the result of a template function is an error, policy evaluation fails. Een mislukte evaluatie is een impliciete weigering.A failed evaluation is an implicit deny. Een voor beeld van een waarde die mislukt in bepaalde scenario's:An example of a value that fails in certain scenarios:

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

De voorbeeld beleidsregel hierboven maakt gebruik van subtekenreeks () om de eerste drie tekens van de naam te vergelijken met ABC.The example policy rule above uses substring() to compare the first three characters of name to abc. Als de naam korter is dan drie tekens, resulteert de functie substring() in een fout.If name is shorter than three characters, the substring() function results in an error. Als gevolg van deze fout wordt het beleid geweigerd .This error causes the policy to become a deny effect.

Gebruik in plaats daarvan de functie als () 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:Instead, use the if() function to check if the first three characters of name equal abc without allowing a name shorter than three characters to cause an error:

{
    "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 gereviseerde beleids regel controleert if() de lengte van de naam voordat er wordt geprobeerd een substring() op te halen met een waarde van minder dan drie tekens.With the revised policy rule, if() checks the length of name before trying to get a substring() on a value with fewer than three characters. Als de naam te kort is, wordt de waarde ' niet beginnend met ABC ' geretourneerd in plaats van ABC.If name is too short, the value "not starting with abc" is returned instead and compared to abc. Een resource met een korte naam die niet met ABC begint, mislukt nog steeds de beleids regel, maar veroorzaakt geen fout meer tijdens de evaluatie.A resource with a short name that doesn't begin with abc still fails the policy rule, but no longer causes an error during evaluation.

AantalCount

Voor waarden die tellen hoeveel leden van een matrix in de resource-nettolading voldoen aan een voor waarde-expressie, kunnen worden gevormd met de expressie Count .Conditions that count how many members of an array in the resource payload satisfy a condition expression can be formed using count expression. Bij algemene scenario's wordt gecontroleerd of ten minste één van ', ' precies één van ', ' alle of ' geen van ' de matrix leden voldoen aan de voor waarde.Common scenarios are checking whether 'at least one of', 'exactly one of', 'all of', or 'none of' the array members satisfy the condition. met Count wordt elk matrixlid geëvalueerd voor een voorwaarde expressie en worden de werkelijke resultaten opgeteld, die vervolgens worden vergeleken met de expressie operator.count evaluates each array member for a condition expression and sums the true results, which is then compared to the expression operator.

De structuur van de Count -expressie is:The structure of the count expression 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 aantal:The following properties are used with count:

  • Count. Field (vereist): bevat het pad naar de matrix en moet een matrix alias zijn.count.field (required): Contains the path to the array and must be an array alias. Als de matrix ontbreekt, wordt de expressie geëvalueerd naar False zonder rekening te houden met de voor waarde-expressie.If the array is missing, the expression is evaluated to false without considering the condition expression.
  • Count. where (optioneel): de voor waarde-expressie voor het afzonderlijk evalueren van elke [*] alias matrix lid van aantal. Field.count.where (optional): The condition expression to individually evaluate each [*] alias array member of count.field. Als deze eigenschap niet is gegeven, worden alle matrix leden met het pad van ' Field ' geëvalueerd als waar.If this property is not provided, all array members with the path of 'field' are evaluated to true. Elke voor waarde kan worden gebruikt in deze eigenschap.Any condition can be used inside this property. Logische Opera tors kunnen worden gebruikt in deze eigenschap om complexe evaluatie vereisten te maken.Logical operators can be used inside this property to create complex evaluation requirements.
  • <voor waarde> (vereist): de waarde wordt vergeleken met het aantal items dat aan het aantal is voldaan. where -voor waarde-expressie.<condition> (required): The value is compared to the number of items that met the count.where condition expression. Er moet een numerieke voor waarde worden gebruikt.A numeric condition should be used.

Aantal voor beeldenCount examples

Voor beeld 1: controleren of een matrix leeg isExample 1: Check if an array is empty

{
    "count": {
        "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]"
    },
    "equals": 0
}

Voor beeld 2: controleren op slechts één matrixlid om te voldoen aan de voor waarde-expressieExample 2: Check for only one array member to meet the condition expression

{
    "count": {
        "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
        "where": {
            "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
            "equals": "My unique description"
        }
    },
    "equals": 1
}

Voor beeld 3: controleren of er ten minste één matrixlid is om te voldoen aan de voor waarde-expressieExample 3: Check for at least one array member to meet the condition expression

{
    "count": {
        "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
        "where": {
            "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
            "equals": "My common description"
        }
    },
    "greaterOrEquals": 1
}

Voor beeld 4: controleren of alle leden van een object Matrix voldoen aan de voor waarde-expressieExample 4: Check that all object array members meet the condition expression

{
    "count": {
        "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
        "where": {
            "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
            "equals": "description"
        }
    },
    "equals": "[length(field('Microsoft.Network/networkSecurityGroups/securityRules[*]'))]"
}

Voor beeld 5: controleren of alle leden van de teken reeks matrix voldoen aan de voor waarde-expressieExample 5: Check that all string array members meet the condition expression

{
    "count": {
        "field": "Microsoft.Sql/servers/securityAlertPolicies/emailAddresses[*]",
        "where": {
            "field": "Microsoft.Sql/servers/securityAlertPolicies/emailAddresses[*]",
            "like": "*@contoso.com"
        }
    },
    "equals": "[length(field('Microsoft.Sql/servers/securityAlertPolicies/emailAddresses[*]'))]"
}

Voor beeld 6: veld in waarde gebruiken om te controleren of alle matrix leden voldoen aan de voor waarde-expressieExample 6: Use field inside value to check that all array members meet the condition expression

{
    "count": {
        "field": "Microsoft.Sql/servers/securityAlertPolicies/emailAddresses[*]",
        "where": {
            "value": "[last(split(first(field('Microsoft.Sql/servers/securityAlertPolicies/emailAddresses[*]')), '@'))]",
            "equals": "contoso.com"
        }
    },
    "equals": "[length(field('Microsoft.Sql/servers/securityAlertPolicies/emailAddresses[*]'))]"
}

Voor beeld 7: Controleer of ten minste één matrixlid overeenkomt met meerdere eigenschappen in de voor waarde-expressieExample 7: Check that at least one array member matches multiple properties in the condition expression

{
    "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
}

EffectEffect

Azure Policy ondersteunt de volgende typen effect:Azure Policy supports the following types of effect:

  • Toevoeg- : voegt de gedefinieerde set velden toe aan de aanvraagAppend: adds the defined set of fields to the request
  • Audit: genereert een waarschuwingsgebeurtenis in het activiteitenlogboek, maar niet de aanvraag misluktAudit: generates a warning event in activity log but doesn't fail the request
  • AuditIfNotExists: er wordt een waarschuwings gebeurtenis in het activiteiten logboek gegenereerd als een gerelateerde resource niet bestaatAuditIfNotExists: generates a warning event in activity log if a related resource doesn't exist
  • Weigeren: genereert een gebeurtenis in het activiteitenlogboek en de aanvraag is misluktDeny: generates an event in the activity log and fails the request
  • DeployIfNotExists: implementeert een gerelateerde resource als deze nog niet bestaatDeployIfNotExists: deploys a related resource if it doesn't already exist
  • Uitgeschakelde: resources voor naleving van de beleidsregel niet evaluerenDisabled: doesn't evaluate resources for compliance to the policy rule
  • EnforceOPAConstraint (preview): Hiermee configureert u de open Policy Agent Admissions controller met gate keeper v3 voor zelf-beheerde Kubernetes-clusters in azure (preview-versie)EnforceOPAConstraint (preview): configures the Open Policy Agent admissions controller with Gatekeeper v3 for self-managed Kubernetes clusters on Azure (preview)
  • EnforceRegoPolicy (preview): Hiermee configureert u de open Policy Agent Admissions-controller met gate keeper v2 in de Azure Kubernetes-serviceEnforceRegoPolicy (preview): configures the Open Policy Agent admissions controller with Gatekeeper v2 in Azure Kubernetes Service
  • Wijzigen: de gedefinieerde labels worden toegevoegd, bijgewerkt of verwijderd uit een resourceModify: adds, updates, or removes the defined tags from a resource

Zie voor meer informatie over elk effect, de volg orde van evaluatie, eigenschappen en voor beelden informatie over Azure Policy effecten.For complete details on each effect, order of evaluation, properties, and examples, see Understanding Azure Policy Effects.

BeleidsfunctiesPolicy functions

Alle Resource Manager-sjabloon functies zijn beschikbaar voor gebruik in een beleids regel, met uitzonde ring van de volgende functies en door de gebruiker gedefinieerde functies:All Resource Manager template functions are available to use within a policy rule, except the following functions and user-defined functions:

  • copyIndex()copyIndex()
  • implementatie ()deployment()
  • orderverzamellijstlist*
  • newGuid()newGuid()
  • pickZones()pickZones()
  • providers ()providers()
  • verwijzing ()reference()
  • resourceId()resourceId()
  • variabelen ()variables()

De volgende functies zijn beschikbaar voor gebruik in een beleids regel, maar verschillen van het gebruik in een Azure Resource Manager sjabloon:The following functions are available to use in a policy rule, but differ from use in an Azure Resource Manager template:

  • addDays (dateTime, numberOfDaysToAdd)addDays(dateTime, numberOfDaysToAdd)
    • DateTime: [required] string-string in de indeling Universal ISO 8601 datetime ' jjjj-mm-ddTuu: mm: SS. fffffffZ '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 toegevoegdnumberOfDaysToAdd: [Required] integer - Number of days to add
  • utcNow ()-in tegens telling tot een resource manager-sjabloon, kan dit buiten de standaard waarde worden gebruikt.utcNow() - Unlike a Resource Manager template, this can be used outside defaultValue.
    • Retourneert een teken reeks die is ingesteld op de huidige datum en tijd 8601 in de indeling JJJJ-MM-DDTuu: mm: SS. fffffffZReturns a string that is set to the current date and time in Universal ISO 8601 DateTime format 'yyyy-MM-ddTHH:mm:ss.fffffffZ'

Bovendien de field functie is beschikbaar voor de regels.Additionally, the field function is available to policy rules. field wordt voornamelijk gebruikt met AuditIfNotExists en DeployIfNotExists verwijzing velden op de resource die worden geëvalueerd.field is primarily used with AuditIfNotExists and DeployIfNotExists to reference fields on the resource that are being evaluated. Een voorbeeld van het gebruik kan worden weergegeven de DeployIfNotExists voorbeeld.An example of this use can be seen in the DeployIfNotExists example.

Voor beeld van beleids functiePolicy function example

In dit voorbeeld van beleid voor regel maakt gebruik van de resourceGroup resource-functie om op te halen de naam eigenschap in combinatie met de concat matrix- en -functie voor het bouwen een like voorwaarde dat de naam van de resource te starten met de naam van de resourcegroep.This policy rule example uses the resourceGroup resource function to get the name property, combined with the concat array and object function to build a like condition that enforces the resource name to start with the resource group name.

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

AliassenAliases

U de eigenschap aliassen gebruiken voor toegang tot specifieke eigenschappen voor een resourcetype.You use property aliases to access specific properties for a resource type. Aliassen kunnen u beperken welke waarden of voorwaarden zijn toegestaan voor een eigenschap van een resource.Aliases enable you to restrict what values or conditions are allowed for a property on a resource. Elke alias wordt toegewezen aan paden in verschillende API-versies voor een gegeven resourcetype.Each alias maps to paths in different API versions for a given resource type. Tijdens de evaluatie van het beleid haalt de beleidsengine het eigenschapspad voor die API-versie.During policy evaluation, the policy engine gets the property path for that API version.

De lijst met aliassen groeien blijft.The list of aliases is always growing. Als wilt weten welke aliassen worden momenteel ondersteund door Azure Policy, moet u een van de volgende methoden gebruiken:To find what aliases are currently supported by Azure Policy, use one of the following methods:

  • Azure Policy-extensie voor Visual Studio code (aanbevolen)Azure Policy extension for Visual Studio Code (recommended)

    Gebruik de extensie Azure Policy voor Visual Studio code om aliassen voor resource-eigenschappen weer te geven en te detecteren.Use the Azure Policy extension for Visual Studio Code to view and discover aliases for resource properties.

    Azure Policy-extensie voor Visual Studio code

  • Azure Resource GraphAzure Resource Graph

    Gebruik de operator project om de alias van een resource weer te geven.Use the project operator to display the alias of a resource.

    Resources
    | where type=~'microsoft.storage/storageaccounts'
    | limit 1
    | project aliases
    
    az graph query -q "Resources | where type=~'microsoft.storage/storageaccounts' | limit 1 | project aliases"
    
    Search-AzGraph -Query "Resources | where type=~'microsoft.storage/storageaccounts' | limit 1 | project aliases"
    
  • Azure PowerShellAzure 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
    
  • Azure-CLIAzure 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 / ARMClientREST API / ARMClient

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

Inzicht krijgen in de alias [*]Understanding the [*] alias

Verschillende van de aliassen die beschikbaar zijn, hebben een versie die wordt weer gegeven als een ' normale ' naam en een andere die [*] eraan is gekoppeld.Several of the aliases that are available have a version that appears as a 'normal' name and another that has [*] attached to it. Bijvoorbeeld:For example:

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

De ' normale ' alias vertegenwoordigt het veld als een enkele waarde.The 'normal' alias represents the field as a single value. Dit veld is bedoeld voor vergelijkings scenario's die exact overeenkomen wanneer de volledige set waarden exact zo moet worden gedefinieerd, niet meer en niet minder.This field is for exact match comparison scenarios when the entire set of values must be exactly as defined, no more and no less.

Met de [*] alias kunt u vergelijken met de waarde van elk element in de matrix en specifieke eigenschappen van elk element.The [*] alias makes it possible to compare against the value of each element in the array and specific properties of each element. Deze aanpak maakt het mogelijk om element eigenschappen te vergelijken voor ' If geen ', ' als een van ', ' of ' als alle scenario's.This approach makes it possible to compare element properties for 'if none of', 'if any of', or 'if all of' scenarios. Gebruik de expressie aantal voor waarde voor complexere scenario's.For more complex scenarios, use the count condition expression. Als u ipRules[*] gebruikt, wordt er een voor beeld van gevalideerd dat elke actie wordt geweigerd, maar is er geen zorgen meer over hoeveel regels bestaan of wat de IP- waarde is.Using ipRules[*], an example would be validating that every action is Deny, but not worrying about how many rules exist or what the IP value is. Met deze voorbeeld regel wordt gecontroleerd op eventuele overeenkomsten met ipRules[*]. waarde voor 10.0.4.1 en wordt de effectType alleen toegepast als er ten minste één overeenkomst wordt gevonden:This sample rule checks for any matches of ipRules[*].value to 10.0.4.1 and applies the effectType only if it doesn't find at least one match:

"policyRule": {
    "if": {
        "allOf": [
            {
                "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules",
                "exists": "true"
            },
            {
                "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].value",
                "notEquals": "10.0.4.1"
            }
        ]
    },
    "then": {
        "effect": "[parameters('effectType')]"
    }
}

Zie de alias [*] evaluerenvoor meer informatie.For more information, see evaluating the [*] alias.

InitiatievenInitiatives

Initiatieven kunnen u verschillende beleidsdefinities toewijzingen en het beheer vereenvoudigen omdat u met een groep als één item werkt verwante groeperen.Initiatives enable you to group several related policy definitions to simplify assignments and management because you work with a group as a single item. Bijvoorbeeld, kunt u gerelateerde tagging beleidsdefinities in een enkele initiatief groeperen.For example, you can group related tagging policy definitions into a single initiative. In plaats van elk beleid afzonderlijk toewijst, moet u het initiatief toepassen.Rather than assigning each policy individually, you apply the initiative.

Het volgende voorbeeld wordt het maken van een initiatief voor het verwerken van twee labels: costCenter en productName.The following example illustrates how to create an initiative for handling two tags: costCenter and productName. Het maakt gebruik van twee ingebouwde beleidsregels om toe te passen van de standaardwaarde van de tag.It uses two built-in policies to apply the default tag value.

{
    "properties": {
        "displayName": "Billing Tags Policy",
        "policyType": "Custom",
        "description": "Specify cost Center tag and product name tag",
        "parameters": {
            "costCenterValue": {
                "type": "String",
                "metadata": {
                    "description": "required value for Cost Center tag"
                }
            },
            "productNameValue": {
                "type": "String",
                "metadata": {
                    "description": "required value for product Name tag"
                }
            }
        },
        "policyDefinitions": [{
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
                "parameters": {
                    "tagName": {
                        "value": "costCenter"
                    },
                    "tagValue": {
                        "value": "[parameters('costCenterValue')]"
                    }
                }
            },
            {
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/2a0e14a6-b0a6-4fab-991a-187a4f81c498",
                "parameters": {
                    "tagName": {
                        "value": "costCenter"
                    },
                    "tagValue": {
                        "value": "[parameters('costCenterValue')]"
                    }
                }
            },
            {
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
                "parameters": {
                    "tagName": {
                        "value": "productName"
                    },
                    "tagValue": {
                        "value": "[parameters('productNameValue')]"
                    }
                }
            },
            {
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/2a0e14a6-b0a6-4fab-991a-187a4f81c498",
                "parameters": {
                    "tagName": {
                        "value": "productName"
                    },
                    "tagValue": {
                        "value": "[parameters('productNameValue')]"
                    }
                }
            }
        ]
    },
    "id": "/subscriptions/<subscription-id>/providers/Microsoft.Authorization/policySetDefinitions/billingTagsPolicy",
    "type": "Microsoft.Authorization/policySetDefinitions",
    "name": "billingTagsPolicy"
}

Volgende stappenNext steps