Azure Policy-definitionsstrukturAzure Policy definition structure

Resursen principdefinitioner används av Azure Policy för att etablera konventioner för resurser.Resource policy definitions are used by Azure Policy to establish conventions for resources. Varje definition beskriver resurskompatibilitet och vad i kraft för att vidta när en resurs är inkompatibla.Each definition describes resource compliance and what effect to take when a resource is non-compliant. Du kan styra kostnaderna genom att definiera konventioner och mer hantera enkelt dina resurser.By defining conventions, you can control costs and more easily manage your resources. Du kan till exempel ange att bara vissa typer av virtuella datorer är tillåtna.For example, you can specify that only certain types of virtual machines are allowed. Eller så kan du kräva att alla resurser har en viss tagg.Or, you can require that all resources have a particular tag. Principer ärvs av alla underordnade resurser.Policies are inherited by all child resources. Om en princip tillämpas på en resursgrupp, kan den användas för alla resurser i resursgruppen.If a policy is applied to a resource group, it's applicable to all the resources in that resource group.

Princip definitions schema finns här: 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

Du kan använda JSON för att skapa en principdefinition.You use JSON to create a policy definition. Principdefinitionen innehåller element för:The policy definition contains elements for:

  • lägemode
  • parametersparameters
  • Visningsnamndisplay name
  • beskrivningdescription
  • principregelpolicy rule
    • logiska utvärderinglogical evaluation
    • effekteffect

Följande JSON visar exempelvis en princip som begränsar där resurser har distribuerats: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"
            }
        }
    }
}

Alla Azure Policys exempel finns på Azure policy exempel.All Azure Policy samples are at Azure Policy samples.

LägeMode

Läge konfigureras beroende på om principen är riktad mot en Azure Resource Manager-egenskap eller en resurs leverantörs egenskap.Mode is configured depending on if the policy is targeting an Azure Resource Manager property or a Resource Provider property.

Lägen i Resource ManagerResource Manager modes

Den läge avgör vilka typer av resurser kommer att utvärderas för en princip.The mode determines which resource types will be evaluated for a policy. De stödda lägena är:The supported modes are:

  • all: utvärdera resursgrupper och alla resurstyperall: evaluate resource groups and all resource types
  • indexed: endast utvärdera resurstyper som stöder taggar och platsindexed: only evaluate resource types that support tags and location

Vi rekommenderar att du ställer in läge till all i de flesta fall.We recommend that you set mode to all in most cases. Alla principdefinitioner som skapats via portalen användning i all läge.All policy definitions created through the portal use the all mode. Om du använder PowerShell eller Azure CLI kan du ange den läge parametern manuellt.If you use PowerShell or Azure CLI, you can specify the mode parameter manually. Om principdefinitionen inte innehåller en läge , den standardvärdet all i Azure PowerShell och till null i 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. En null läge är detsamma som att använda indexed att stödja bakåtkompatibilitet kompatibilitet.A null mode is the same as using indexed to support backwards compatibility.

indexed ska användas när du skapar principer som tillämpar taggar eller platser.indexed should be used when creating policies that enforce tags or locations. Även om det inte krävs, förhindrar det att resurser som inte stöder taggar och platser visas som icke-kompatibla i resultatet av efterlevnaden.While not required, it prevents resources that don't support tags and locations from showing up as non-compliant in the compliance results. Undantaget är resursgrupper.The exception is resource groups. Principer som framtvinga plats eller taggar på en resursgrupp bör ange läge till all och specifikt mål den Microsoft.Resources/subscriptions/resourceGroups typen.Policies that enforce location or tags on a resource group should set mode to all and specifically target the Microsoft.Resources/subscriptions/resourceGroups type. Ett exempel finns i framtvinga grupp resurstaggar.For an example, see Enforce resource group tags. En lista över resurser som stöder taggar finns i tagga stöd för Azure-resurser.For a list of resources that support tags, see Tag support for Azure resources.

Resurs leverantörs lägenResource Provider modes

Det enda resurs leverantörs läge som stöds för närvarande är Microsoft.ContainerService.Data för hantering av regler för åtkomst kontroll i Azure Kubernetes-tjänsten.The only Resource Provider mode supported currently is Microsoft.ContainerService.Data for managing admission controller rules on Azure Kubernetes Service.

Anteckning

Azure policy för Kubernetes finns i en offentlig för hands version och stöder bara inbyggda princip definitioner.Azure Policy for Kubernetes is in Public Preview and only supports built-in policy definitions.

ParametrarParameters

Parametrar underlätta hanteringen av principer genom att minska antalet principdefinitioner.Parameters help simplify your policy management by reducing the number of policy definitions. Tänk på parametrar som fält i ett formulär – name, address, city, state.Think of parameters like the fields on a form – name, address, city, state. Dessa parametrar desamma alltid, men deras värden ändras baserat på enskilda fyller i formuläret.These parameters always stay the same, however their values change based on the individual filling out the form. Parametrar fungerar på samma sätt som när du skapar principer.Parameters work the same way when building policies. Du kan återanvända principen för olika scenarier med hjälp av olika värden genom att lägga till parametrar i en principdefinition.By including parameters in a policy definition, you can reuse that policy for different scenarios by using different values.

Anteckning

Parametrar kan läggas till i en befintlig och tilldelad definition.Parameters may be added to an existing and assigned definition. Den nya parametern måste innehålla egenskapen DefaultValue .The new parameter must include the defaultValue property. Detta förhindrar att befintliga tilldelningar för principen eller initiativ indirekt görs ogiltig.This prevents existing assignments of the policy or initiative from indirectly being made invalid.

Parameter egenskaperParameter properties

En parameter har följande egenskaper som används i princip definitionen:A parameter has the following properties that are used in the policy definition:

  • name: Parameterns namn.name: The name of your parameter. Används av distributions funktionen parameters i princip regeln.Used by the parameters deployment function within the policy rule. Mer information finns i använda ett parameter värde.For more information, see using a parameter value.
  • type: Anger om parametern är en sträng, en matris, ett objekt, ett booleskt värde , ett flyttaleller en datetime.type: Determines if the parameter is a string, array, object, boolean, integer, float, or datetime.
  • metadata: Definierar under egenskaper som främst används av Azure Portal för att Visa användarvänlig information:metadata: Defines subproperties primarily used by the Azure portal to display user-friendly information:
    • description: En förklaring av vad parametern används för.description: The explanation of what the parameter is used for. Kan användas för att ge exempel på acceptabla värden.Can be used to provide examples of acceptable values.
    • displayName: Det egna namnet som visas i portalen för-parametern.displayName: The friendly name shown in the portal for the parameter.
    • strongType: Valfritt Används när du tilldelar princip definitionen via portalen.strongType: (Optional) Used when assigning the policy definition through the portal. Innehåller en Sammanhangs medveten lista.Provides a context aware list. Mer information finns i strongType.For more information, see strongType.
    • assignPermissions: Valfritt Ange som Sant om du vill att Azure Portal skapa roll tilldelningar under princip tilldelning.assignPermissions: (Optional) Set as true to have Azure portal create role assignments during policy assignment. Den här egenskapen är användbar om du vill tilldela behörigheter utanför tilldelnings omfånget.This property is useful in case you wish to assign permissions outside the assignment scope. Det finns en roll tilldelning per roll definition i principen (eller per roll definition i alla principer i initiativet).There is one role assignment per role definition in the policy (or per role definition in all of the policies in the initiative). Parametervärdet måste vara en giltig resurs eller ett giltigt omfång.The parameter value must be a valid resource or scope.
  • defaultValue: Valfritt Anger värdet för parametern i en tilldelning om inget värde anges.defaultValue: (Optional) Sets the value of the parameter in an assignment if no value is given. Krävs när du uppdaterar en befintlig princip definition som är tilldelad.Required when updating an existing policy definition that is assigned.
  • allowedValues: Valfritt Innehåller en matris med värden som parametern accepterar under tilldelningen.allowedValues: (Optional) Provides an array of values that the parameter accepts during assignment.

Du kan till exempel definiera en princip definition för att begränsa de platser där resurser kan distribueras.As an example, you could define a policy definition to limit the locations where resources can be deployed. En parameter för den princip definitionen kan vara allowedLocations.A parameter for that policy definition could be allowedLocations. Den här parametern används av varje tilldelning av princip definitionen för att begränsa de godkända värdena.This parameter would be used by each assignment of the policy definition to limit the accepted values. Användningen av strongType ger en bättre upplevelse när du slutför tilldelningen via portalen: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"
        ]
    }
}

Använda ett parameter värdeUsing a parameter value

I principregeln du referera till parametrar med följande parameters distribution värdet funktionens syntax:In the policy rule, you reference parameters with the following parameters deployment value function syntax:

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

Det här exemplet refererar till den allowedLocations -parameter som visades i parameter egenskaper.This sample references the allowedLocations parameter that was demonstrated in parameter properties.

strongTypestrongType

I egenskapen metadata kan du använda strongType för att ange en lista över alternativ i Azure Portal som innehåller flera alternativ.Within the metadata property, you can use strongType to provide a multi-select list of options within the Azure portal. Tillåtna värden för strongType nu: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

Definitionens platsDefinition location

När du skapar ett initiativ- eller är det nödvändigt att ange platsen för definition.While creating an initiative or policy, it's necessary to specify the definition location. Definitionens plats måste vara en hanteringsgrupp eller en prenumeration.The definition location must be a management group or a subscription. Den här platsen anger omfånget som den initiativ- eller kan tilldelas.This location determines the scope to which the initiative or policy can be assigned. Resurser måste vara direkta medlemmar i eller underordnade objekt inom hierarkin för definitionens plats för att rikta för tilldelning.Resources must be direct members of or children within the hierarchy of the definition location to target for assignment.

Om den definition lagras a:If the definition location is a:

  • Prenumeration – endast resurser inom den prenumerationen kan tilldelas principen.Subscription - Only resources within that subscription can be assigned the policy.
  • Hanteringsgruppen – endast resurser i underordnade hanteringsgrupper och underordnade prenumerationer kan du tilldela principen.Management group - Only resources within child management groups and child subscriptions can be assigned the policy. Om du planerar att använda principdefinitionen till flera prenumerationer, måste platsen vara en hanteringsgrupp som innehåller dessa prenumerationer.If you plan to apply the policy definition to several subscriptions, the location must be a management group that contains those subscriptions.

Namn och beskrivningDisplay name and description

Du använder displayName och beskrivning identifiera principdefinitionen och ge ett sammanhang för när den används.You use displayName and description to identify the policy definition and provide context for when it's used. DisplayName får innehålla högst 128 tecken och beskrivningen får bestå av högst 512 tecken.displayName has a maximum length of 128 characters and description a maximum length of 512 characters.

PrincipregelPolicy rule

Principregeln består av om och sedan block.The policy rule consists of If and Then blocks. I den om block, definierar du en eller flera villkor som anger när principen tillämpas.In the If block, you define one or more conditions that specify when the policy is enforced. Du kan använda logiska operatorer för dessa villkor för att ange exakt scenariot för en princip.You can apply logical operators to these conditions to precisely define the scenario for a policy.

I den sedan block, definierar du den effekt som händer när den om villkor är uppfyllda.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"
    }
}

Logiska operatorerLogical operators

Logiska operatorer som stöds är:Supported logical operators are:

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

Den inte syntax inverterar resultatet av villkoret.The not syntax inverts the result of the condition. Den allOf syntax (liknar den logiska och åtgärden) kräver att alla villkor vara uppfyllda.The allOf syntax (similar to the logical And operation) requires all conditions to be true. Den anyOf syntax (liknar den logiska eller åtgärden) kräver en eller flera villkor vara uppfyllda.The anyOf syntax (similar to the logical Or operation) requires one or more conditions to be true.

Du kan kapsla logiska operatorer.You can nest logical operators. I följande exempel visas en inte åtgärd som är kapslade i en allOf igen.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"
        }
    ]
},

VillkorConditions

Ett villkor utvärderar om ett fält eller värde accessor uppfyller vissa villkor.A condition evaluates whether a field or the value accessor meets certain criteria. Villkor som stöds är:The supported conditions are:

  • "equals": "value"
  • "notEquals": "value"
  • "like": "value"
  • "notLike": "value"
  • "match": "value"
  • "matchInsensitively": "value"
  • "notMatch": "value"
  • "notMatchInsensitively": "value"
  • "contains": "value"
  • "notContains": "value"
  • "in": ["value1","value2"]
  • "notIn": ["value1","value2"]
  • "containsKey": "keyName"
  • "notContainsKey": "keyName"
  • "less": "value"
  • "lessOrEquals": "value"
  • "greater": "value"
  • "greaterOrEquals": "value"
  • "exists": "bool"

När du använder den som och notLike villkor du anger ett jokertecken * i värdet.When using the like and notLike conditions, you provide a wildcard * in the value. Värdet får inte innehålla fler än ett jokertecken *.The value shouldn't have more than one wildcard *.

När du använder matchnings -och notMatch -villkoren anger du # för att matcha en siffra, ? för en bokstav, . för att matcha alla tecken och andra tecken som ska matcha det faktiska tecknet.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. matchnings -och notMatch är Skift läges känsliga.match and notMatch are case-sensitive. Skift läges känsliga alternativ är tillgängliga i matchInsensitively och notMatchInsensitively.Case-insensitive alternatives are available in matchInsensitively and notMatchInsensitively. Exempel finns i Tillåt flera namn mönster.For examples, see Allow several name patterns.

FältFields

Villkor bildas genom att använda fält.Conditions are formed by using fields. Ett fält matchar egenskaper i nyttolasten i begäran av resursen och beskriver tillståndet för resursen.A field matches properties in the resource request payload and describes the state of the resource.

Följande fält stöds:The following fields are supported:

  • name
  • fullName
    • Returnerar det fullständiga namnet på resursen.Returns the full name of the resource. Det fullständiga namnet på en resurs är resursnamnet föregås av ett anpassningsprefix av alla överordnade resursnamn (till exempel ”minserver/myDatabase”).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>']
    • Den här klammerns syntax stöder taggnamn som har skiljetecken, till exempel bindestreck, punkter eller blank steg.This bracket syntax supports tag names that have punctuation such as a hyphen, period, or space.
    • Där <tagName> är namnet på taggen för att verifiera villkoret för.Where <tagName> is the name of the tag to validate the condition for.
    • Exempel: tags['Acct.CostCenter'] där acct. CostCenter är namnet på taggen.Examples: tags['Acct.CostCenter'] where Acct.CostCenter is the name of the tag.
  • tags['''<tagName>''']
    • Den här klammerns syntax stöder taggnamn som har apostrofer i den genom att använda dubbla apostrofer.This bracket syntax supports tag names that have apostrophes in it by escaping with double apostrophes.
    • Där "<tagName @ no__t-2" är namnet på taggen som verifierar villkoret för.Where '<tagName>' is the name of the tag to validate the condition for.
    • Exempel: tags['''My.Apostrophe.Tag'''] där "<tagName @ no__t-3" är namnet på taggen.Example: tags['''My.Apostrophe.Tag'''] where '<tagName>' is the name of the tag.
  • Egenskapen alias – en lista i alias.property aliases - for a list, see Aliases.

Anteckning

tags.<tagName>, tags[tagName] och tags[tag.with.dots] är fortfarande acceptabla sätt att deklarera ett Tags-fält.tags.<tagName>, tags[tagName], and tags[tag.with.dots] are still acceptable ways of declaring a tags field. De prioriterade uttrycken är dock de som anges ovan.However, the preferred expressions are those listed above.

Använda taggar med parametrarUse tags with parameters

Ett parameter värde kan skickas till ett tagg-fält.A parameter value can be passed to a tag field. Att skicka en parameter till ett taggnamn ökar flexibiliteten i princip definitionen under princip tilldelning.Passing a parameter to a tag field increases the flexibility of the policy definition during policy assignment.

I följande exempel används concat för att skapa ett fält uppslag för taggen som heter värdet för TagName -parametern.In the following example, concat is used to create a tags field lookup for the tag named the value of the tagName parameter. Om taggen inte finns används Lägg till -funktionen för att lägga till taggen med värdet för samma namngivna tagg uppsättning på den överordnade resurs gruppen granskade resurser med hjälp av sök funktionen resourcegroup().If that tag doesn't exist, the append 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": "append",
        "details": [{
            "field": "[concat('tags[', parameters('tagName'), ']')]",
            "value": "[resourcegroup().tags[parameters('tagName')]]"
        }]
    }
}

ValueValue

Villkor kan även skapas med hjälp av värde.Conditions can also be formed using value. värde kontrollerar villkor mot parametrar, mall funktioner som stödseller litteraler.value checks conditions against parameters, supported template functions, or literals. värdet kombineras med alla villkorsom stöds.value is paired with any supported condition.

Varning

Om resultatet av en mall är ett fel, Miss lyckas princip utvärderingen.If the result of a template function is an error, policy evaluation fails. En misslyckad utvärdering är en implicit nekande.A failed evaluation is an implicit deny. Mer information finns i undvika mall-haverier.For more information, see avoiding template failures.

Värde exempelValue examples

Den här princip regel exemplet använder värdet för att jämföra resultatet av funktionen resourceGroup() och egenskapen returnerat namn till ett like villkor för *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. Regeln nekar en resurs som inte är av typen Microsoft.Network/* i någon resurs grupp vars namn slutar på *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"
    }
}

Den här princip regel exemplet använder värdet för att kontrol lera om resultatet av flera kapslade funktioner är lika med true.This policy rule example uses value to check if the result of multiple nested functions equals true. Regeln nekar en resurs som inte har minst tre taggar.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"
        }
    }
}

Undvika synkroniseringsfelAvoiding template failures

Användningen av Template Functions i Value tillåter många komplexa kapslade funktioner.The use of template functions in value allows for many complex nested functions. Om resultatet av en mall är ett fel, Miss lyckas princip utvärderingen.If the result of a template function is an error, policy evaluation fails. En misslyckad utvärdering är en implicit nekande.A failed evaluation is an implicit deny. Ett exempel på ett värde som inte fungerar i vissa scenarier:An example of a value that fails in certain scenarios:

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

Exempel princip regeln ovan använder del sträng () för att jämföra de tre första tecken namnen med ABC.The example policy rule above uses substring() to compare the first three characters of name to abc. Om namnet är kortare än tre tecken resulterar funktionen substring() i ett fel.If name is shorter than three characters, the substring() function results in an error. Det här felet gör att principen blir en neka -påverkan.This error causes the policy to become a deny effect.

Använd i stället funktionen IF () för att kontrol lera om de tre första tecknen i namn är lika med ABC utan att ett namn som är kortare än tre tecken kan orsaka ett fel: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"
        }
    }
}

Med den ändrade princip regeln if() kontrollerar längden på namnet innan den försöker hämta ett substring() på ett värde med färre än tre tecken.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. Om namnet är för kort returneras värdet "inte börjar med ABC" i stället och jämförs med ABC.If name is too short, the value "not starting with abc" is returned instead and compared to abc. En resurs med ett kort namn som inte börjar med ABC kan fortfarande inte utföra princip regeln, men inte längre orsaka ett fel under utvärderingen.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.

VerkanEffect

Azure Policy stöder följande typer av påverkan:Azure Policy supports the following types of effect:

  • Neka: Generera en händelse i aktivitetsloggen och misslyckas begäranDeny: generates an event in the activity log and fails the request
  • Granska: genererar en varning-händelse i aktivitetsloggen men inte misslyckas begäranAudit: generates a warning event in activity log but doesn't fail the request
  • Lägg till: lägger till en definierad uppsättning fält på begäranAppend: adds the defined set of fields to the request
  • AuditIfNotExists: aktiverar granskning om en resurs inte finnsAuditIfNotExists: enables auditing if a resource doesn't exist
  • DeployIfNotExists: distribuerar en resurs om den inte redan finnsDeployIfNotExists: deploys a resource if it doesn't already exist
  • Inaktiverad: inte utvärdera resurser för principregelnDisabled: doesn't evaluate resources for compliance to the policy rule
  • EnforceRegoPolicy: konfigurerar kontrollanten för öppen Policy Agent inspelare i Azure Kubernetes-tjänsten (för hands version)EnforceRegoPolicy: configures the Open Policy Agent admissions controller in Azure Kubernetes Service (preview)
  • Ändra: lägger till, uppdaterar eller tar bort definierade taggar från en resursModify: adds, updates, or removes the defined tags from a resource

För lägga till, måste du ange följande information:For append, you must provide the following details:

"effect": "append",
"details": [{
    "field": "field name",
    "value": "value of the field"
}]

Värdet kan vara en sträng eller ett JSON-format-objekt.The value can be either a string or a JSON format object.

AuditIfNotExists och DeployIfNotExists utvärdera förekomsten av en relaterad resurs och tillämpa en regel.AuditIfNotExists and DeployIfNotExists evaluate the existence of a related resource and apply a rule. Om resursen inte matchar regeln, implementeras effekten.If the resource doesn't match the rule, the effect is implemented. Du kan till exempel kräva att en nätverksbevakare distribueras för alla virtuella nätverk.For example, you can require that a network watcher is deployed for all virtual networks. Mer information finns i den granska om tillägg inte finns exempel.For more information, see the Audit if extension doesn't exist example.

Den DeployIfNotExists effekt kräver den roleDefinitionId -egenskapen i den information delen av principregeln.The DeployIfNotExists effect requires the roleDefinitionId property in the details portion of the policy rule. Mer information finns i reparation – konfigurera principdefinitionen.For more information, see Remediation - Configure policy definition.

"details": {
    ...
    "roleDefinitionIds": [
        "/subscription/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
        "/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
    ]
}

På samma sätt krävs roleDefinitionId -egenskapen i informations delen av princip regeln för Åtgärds uppgiften.Similarly, Modify requires roleDefinitionId property in the details portion of the policy rule for the remediation task. Ändra kräver även en Åtgärds mat ris för att definiera vilka åtgärder som ska vidtas på resurs taggarna.Modify also requires an operations array to define what actions to take on the resources tags.

Fullständig information om varje effekt, utvärderings ordning, egenskaper och exempel finns i förstå Azure policys effekter.For complete details on each effect, order of evaluation, properties, and examples, see Understanding Azure Policy Effects.

Princip fungerarPolicy functions

Alla funktioner i Resource Manager-mallar är tillgängliga för användning i en princip regel, förutom följande funktioner och användardefinierade funktioner:All Resource Manager template functions are available to use within a policy rule, except the following functions and user-defined functions:

  • copyIndex()copyIndex()
  • distribution ()deployment()
  • listalist*
  • newGuid()newGuid()
  • pickZones()pickZones()
  • providers ()providers()
  • referens ()reference()
  • resourceId ()resourceId()
  • variabler ()variables()

Följande funktioner är tillgängliga för användning i en princip regel, men skiljer sig från användningen i en Azure Resource Manager-mall: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] sträng sträng i Universal ISO 8601 datetime-formatet ' ÅÅÅÅ-MM-ddTHH: mm: SS. fffffffZ 'dateTime: [Required] string - String in the Universal ISO 8601 DateTime format 'yyyy-MM-ddTHH:mm:ss.fffffffZ'
    • numberOfDaysToAdd: [required] heltal-antal dagar som ska läggas tillnumberOfDaysToAdd: [Required] integer - Number of days to add
  • utcNow () – till skillnad från en Resource Manager-mall kan detta användas utanför defaultValue.utcNow() - Unlike a Resource Manager template, this can be used outside defaultValue.
    • Returnerar en sträng som har angetts till aktuellt datum och aktuell tid i universellt ISO 8601 DateTime-format ' ÅÅÅÅ-MM-ddTHH: mm: SS. fffffffZ 'Returns a string that is set to the current date and time in Universal ISO 8601 DateTime format 'yyyy-MM-ddTHH:mm:ss.fffffffZ'

Dessutom kan den field funktionen är tillgänglig för hanteringsprincipregler (MPR).Additionally, the field function is available to policy rules. field används främst med AuditIfNotExists och DeployIfNotExists till referensfält på resursen som utvärderas.field is primarily used with AuditIfNotExists and DeployIfNotExists to reference fields on the resource that are being evaluated. Ett exempel på den här användningen visas på den DeployIfNotExists exempel.An example of this use can be seen in the DeployIfNotExists example.

Exempel på princip funktionPolicy function example

Den här principen regelexempel använder den resourceGroup resurs-funktionen för att hämta den namn egenskapen tillsammans med den concat matris och objekt-funktionen för att skapa en like villkor som tillämpar resursnamnet att starta med resursgruppens namn.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"
    }
}

AliasAliases

Du kan använda egenskapen alias för att få åtkomst till specifika egenskaper för en resurstyp.You use property aliases to access specific properties for a resource type. Alias kan du begränsa vilka värden eller villkor är tillåtna för en egenskap för en resurs.Aliases enable you to restrict what values or conditions are allowed for a property on a resource. Varje alias som mappas till sökvägar i olika API-versioner för en viss resurstyp.Each alias maps to paths in different API versions for a given resource type. Under principutvärdering hämtar principmodulen egenskapssökvägen för den API-versionen.During policy evaluation, the policy engine gets the property path for that API version.

Lista över alla alias växer.The list of aliases is always growing. Använd någon av följande metoder för att hitta vilka alias är för närvarande stöds av Azure Policy:To find what aliases are currently supported by Azure Policy, use one of the following methods:

  • 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
    

Förstå alias [*]Understanding the [*] alias

Flera av de alias som är tillgängliga har en version som visas som ett ”normal” namn och en annan som har [*] kopplade till den.Several of the aliases that are available have a version that appears as a 'normal' name and another that has [*] attached to it. Exempel:For example:

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

Aliaset "normal" representerar fältet som ett enda värde.The 'normal' alias represents the field as a single value. Det här fältet är för exakta matchnings scenarier när hela uppsättningen med värden måste vara exakt som definierad, inte mer eller mindre.This field is for exact match comparison scenarios when the entire set of values must be exactly as defined, no more and no less.

[@No__t-1] -aliaset gör det möjligt att jämföra mot värdet för varje element i matrisen och vissa egenskaper för varje element.The [*] alias makes it possible to compare against the value of each element in the array and specific properties of each element. Den här metoden gör det möjligt att jämföra element egenskaper för "if ingen", "om några", "eller" om alla "-scenarier.This approach makes it possible to compare element properties for 'if none of', 'if any of', or 'if all of' scenarios. Med ipRules [*] verifierar ett exempel att varje åtgärd är nekad, men inte bekymrar dig om hur många regler som finns eller vad IP- värdet är.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. Den här exempel regeln söker efter eventuella matchningar av ipRules [*]. värde till 10.0.4.1 och tillämpar bara effectType om det inte hittar minst en matchning: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')]"
    }
}

Mer information finns i avsnittet om att utvärdera [*] alias.For more information, see evaluating the [*] alias.

InitiativInitiatives

Initiativ kan du gruppera flera relaterade principdefinitioner för att förenkla tilldelningar och hantering eftersom du arbetar med en grupp som ett enskilt objekt.Initiatives enable you to group several related policy definitions to simplify assignments and management because you work with a group as a single item. Du kan exempelvis gruppera relaterade taggning principdefinitioner i ett enda initiativ.For example, you can group related tagging policy definitions into a single initiative. I stället för att tilldela varje princip individuellt kan använda du initiativ.Rather than assigning each policy individually, you apply the initiative.

I följande exempel illustrerar hur du skapar ett initiativ för att hantera två taggar: costCenter och productName.The following example illustrates how to create an initiative for handling two tags: costCenter and productName. Två inbyggda principer används för att tillämpa taggen standardvärdet.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"
}

Nästa stegNext steps