Struttura delle definizioni di criteri di AzureAzure Policy definition structure

Le definizioni dei criteri delle risorse vengono usati da Criteri di Azure per stabilire le convenzioni delle risorse.Resource policy definitions are used by Azure Policy to establish conventions for resources. Ogni definizione descrive la conformità della risorsa e le azioni da intraprendere quando una risorsa non è conforme.Each definition describes resource compliance and what effect to take when a resource is non-compliant. Definendo le convenzioni, è possibile controllare i costi e gestire più facilmente le risorse.By defining conventions, you can control costs and more easily manage your resources. È ad esempio possibile specificare che vengano consentiti solo determinati tipi di macchine virtuali.For example, you can specify that only certain types of virtual machines are allowed. In alternativa, è possibile richiedere che tutte le risorse abbiano un tag specifico.Or, you can require that all resources have a particular tag. I criteri vengono ereditati da tutte le risorse figlio.Policies are inherited by all child resources. Se un criterio viene applicato a un gruppo di risorse, è applicabile a tutte le risorse in tale gruppo.If a policy is applied to a resource group, it's applicable to all the resources in that resource group.

Lo schema di definizione dei criteri è disponibile qui: 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

Per creare una definizione di criterio è possibile usare JSON.You use JSON to create a policy definition. La definizione dei criteri contiene gli elementi per:The policy definition contains elements for:

  • modemode
  • parametersparameters
  • nome visualizzatodisplay name
  • Descrizionedescription
  • regola dei criteripolicy rule
    • valutazione logicalogical evaluation
    • effettoeffect

Ad esempio, la notazione JSON seguente illustra un criterio che limita i punti in cui vengono distribuite le risorse: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"
            }
        }
    }
}

Tutti gli esempi di criteri di Azure sono disponibili in esempi di criteri di Azure.All Azure Policy samples are at Azure Policy samples.

ModeMode

La modalità viene configurata in base al fatto che i criteri siano destinati a una proprietà Azure Resource Manager o a una proprietà del provider di risorse.Mode is configured depending on if the policy is targeting an Azure Resource Manager property or a Resource Provider property.

Modalità Gestione risorseResource Manager modes

Il parametro mode (modalità) determina quali tipi di risorse verranno valutate per l'assegnazione dei criteri.The mode determines which resource types will be evaluated for a policy. Le modalità supportate sono:The supported modes are:

  • all: vengono valutati i gruppi di risorse e tutti i tipi di risorseall: evaluate resource groups and all resource types
  • indexed: vengono valutati solo i tipi di risorse che supportano tag e il percorsoindexed: only evaluate resource types that support tags and location

Nella maggior parte dei casi, è consigliabile impostare il parametro mode su all.We recommend that you set mode to all in most cases. Tutte le definizioni di criteri create tramite il portale usano la modalità all.All policy definitions created through the portal use the all mode. Se si usa PowerShell o l'interfaccia della riga di comando di Azure è necessario specificare il parametro mode manualmente.If you use PowerShell or Azure CLI, you can specify the mode parameter manually. Se la definizione dei criteri non include un valore mode, assume il valore predefinito all in Azure PowerShell e null nell'interfaccia della riga di comando di Azure.If the policy definition doesn't include a mode value, it defaults to all in Azure PowerShell and to null in Azure CLI. Un valore mode null equivale all'utilizzo di indexed per supportare la compatibilità con le versioni precedenti.A null mode is the same as using indexed to support backwards compatibility.

indexed deve essere usato durante la creazione di criteri che applicano tag o percorsi.indexed should be used when creating policies that enforce tags or locations. Sebbene non sia necessario, evita che le risorse che non supportano tag e percorsi vengano visualizzate come non conformi nei risultati sulla conformità.While not required, it prevents resources that don't support tags and locations from showing up as non-compliant in the compliance results. L'eccezione è rappresentata dai gruppi di risorse.The exception is resource groups. Per i criteri che applicano percorsi o tag a un gruppo di risorse, impostare il parametro mode su all e specificare una destinazione specifica per il tipo Microsoft.Resources/subscriptions/resourceGroups.Policies that enforce location or tags on a resource group should set mode to all and specifically target the Microsoft.Resources/subscriptions/resourceGroups type. Per un esempio, vedere Applicare tag di gruppi di risorse.For an example, see Enforce resource group tags. Per un elenco di risorse che supportano i tag, vedere supporto dei tag per le risorse di Azure.For a list of resources that support tags, see Tag support for Azure resources.

modalità del provider di risorse (anteprima)Resource Provider modes (preview)

Le modalità del provider di risorse seguenti sono attualmente supportate durante l'anteprima:The following Resource Provider modes are currently supported during preview:

  • Microsoft.ContainerService.Data per la gestione delle regole del controller di ammissione nel servizio Azure Kubernetes.Microsoft.ContainerService.Data for managing admission controller rules on Azure Kubernetes Service. I criteri che usano questa modalità del provider di risorse devono usare l'effetto EnforceRegoPolicy .Policies using this Resource Provider mode must use the EnforceRegoPolicy effect.
  • Microsoft.Kubernetes.Data per la gestione di cluster Kubernetes del motore AKS autogestiti in Azure.Microsoft.Kubernetes.Data for managing self-managed AKS Engine Kubernetes clusters on Azure. I criteri che usano questa modalità del provider di risorse devono usare l'effetto EnforceOPAConstraint .Policies using this Resource Provider mode must use the EnforceOPAConstraint effect.
  • Microsoft.KeyVault.Data per la gestione di insiemi di credenziali e certificati in Azure Key Vault.Microsoft.KeyVault.Data for managing vaults and certificates in Azure Key Vault.

Nota

Le modalità del provider di risorse supportano solo le definizioni dei criteri predefinite e non supportano le iniziative in fase di anteprima.Resource Provider modes only support built-in policy definitions and don't support initiatives while in preview.

parametriParameters

I parametri consentono di semplificare la gestione dei criteri, riducendone il numero di definizioni.Parameters help simplify your policy management by reducing the number of policy definitions. I parametri possono essere paragonati ai campi di un modulo: name, address, city, state.Think of parameters like the fields on a form – name, address, city, state. Questi parametri rimangono sempre invariati, ma i loro valori cambiano a seconda dei dati immessi durante la compilazione del modulo da parte dei singoli utenti.These parameters always stay the same, however their values change based on the individual filling out the form. I parametri funzionano nello stesso modo durante la creazione di criteri.Parameters work the same way when building policies. L'inclusione dei parametri in una definizione dei criteri consente di riutilizzare i singoli criteri in vari scenari mediante l'uso di valori diversi.By including parameters in a policy definition, you can reuse that policy for different scenarios by using different values.

Nota

I parametri possono essere aggiunti a una definizione esistente e assegnata.Parameters may be added to an existing and assigned definition. Il nuovo parametro deve includere la proprietà defaultValue.The new parameter must include the defaultValue property. In questo modo le assegnazioni esistenti dei criteri o dell'iniziativa non possono essere rese indirettamente non valide.This prevents existing assignments of the policy or initiative from indirectly being made invalid.

Proprietà parametroParameter properties

Un parametro presenta le proprietà seguenti, usate nella definizione di criteri:A parameter has the following properties that are used in the policy definition:

  • nome: il nome del parametro.name: The name of your parameter. Usato dalla funzione di distribuzione parameters all'interno della regola dei criteri.Used by the parameters deployment function within the policy rule. Per altre informazioni, vedere Usare un valore di parametro.For more information, see using a parameter value.
  • type: determina se il parametro è una stringa, una matrice, un oggetto, un valore booleano, un Integer, un valore floato DateTime.type: Determines if the parameter is a string, array, object, boolean, integer, float, or datetime.
  • metadata: definisce le sottoproprietà utilizzate principalmente dal portale di Azure per visualizzare informazioni descrittivo:metadata: Defines subproperties primarily used by the Azure portal to display user-friendly information:
    • description: spiegazione della funzione utilizzata per il parametro.description: The explanation of what the parameter is used for. Può essere usata per fornire esempi di valori accettabili.Can be used to provide examples of acceptable values.
    • displayName: il nome descrittivo visualizzato nel portale per il parametro.displayName: The friendly name shown in the portal for the parameter.
    • strongType: (facoltativo) usato durante l'assegnazione della definizione dei criteri tramite il portale.strongType: (Optional) Used when assigning the policy definition through the portal. Fornisce un elenco con riconoscimento del contesto.Provides a context aware list. Per altre informazioni, vedere strongType.For more information, see strongType.
    • assignPermissions: (facoltativo) impostare su true per avere portale di Azure creare assegnazioni di ruolo durante l'assegnazione dei criteri.assignPermissions: (Optional) Set as true to have Azure portal create role assignments during policy assignment. Questa proprietà è utile nel caso in cui si desideri assegnare autorizzazioni al di fuori dell'ambito di assegnazione.This property is useful in case you wish to assign permissions outside the assignment scope. È disponibile un'assegnazione di ruolo per ogni definizione di ruolo nel criterio (o per definizione di ruolo in tutti i criteri dell'iniziativa).There is one role assignment per role definition in the policy (or per role definition in all of the policies in the initiative). Il valore del parametro deve essere una risorsa o un ambito valido.The parameter value must be a valid resource or scope.
  • defaultValue: (facoltativo) imposta il valore del parametro in un'assegnazione se non viene specificato alcun valore.defaultValue: (Optional) Sets the value of the parameter in an assignment if no value is given. Obbligatoria quando si aggiorna una definizione di criteri esistente già assegnata.Required when updating an existing policy definition that is assigned.
  • allowedValues: (facoltativo) fornisce una matrice di valori accettati dal parametro durante l'assegnazione.allowedValues: (Optional) Provides an array of values that the parameter accepts during assignment.

Ad esempio, è possibile definire una definizione di criteri per limitare i percorsi in cui le risorse possono essere distribuite.As an example, you could define a policy definition to limit the locations where resources can be deployed. Un parametro per questa definizione di criteri potrebbe essere allowedLocations.A parameter for that policy definition could be allowedLocations. Questo parametro è stato usato da ogni assegnazione della definizione di criteri per limitare i valori accettati.This parameter would be used by each assignment of the policy definition to limit the accepted values. L'uso di strongType offre un'esperienza migliorata nel completamento dell'assegnazione tramite portale: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"
        ]
    }
}

Usare un valore di parametroUsing a parameter value

Nella regola dei criteri è necessario fare riferimento ai parametri con la sintassi della funzione parameters seguente:In the policy rule, you reference parameters with the following parameters function syntax:

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

Questo esempio fa riferimento al parametro allowedLocations illustrato nella sezione relativa alle proprietà dei parametri.This sample references the allowedLocations parameter that was demonstrated in parameter properties.

strongTypestrongType

Nella proprietà metadata è possibile usare strongType per fornire un elenco di opzioni di selezione multipla nel portale di Azure.Within the metadata property, you can use strongType to provide a multi-select list of options within the Azure portal. I valori consentiti per strongType attualmente includono: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

Posizione della definizioneDefinition location

Durante la creazione di iniziative o criteri è importante specificare la posizione della definizione.While creating an initiative or policy, it's necessary to specify the definition location. La posizione della definizione deve essere specificata come un gruppo di gestione o una sottoscrizione.The definition location must be a management group or a subscription. Tale posizione determina l'ambito al quale la definizione delle iniziative o dei criteri può essere assegnata.This location determines the scope to which the initiative or policy can be assigned. Le risorse devono essere membri diretti o elementi figli all'interno della gerarchia della posizione della definizione da destinare all'assegnazione.Resources must be direct members of or children within the hierarchy of the definition location to target for assignment.

Se la posizione della definizione è:If the definition location is a:

  • Una sottoscrizione: solo le risorse all'interno di tale sottoscrizione possono essere assegnate ai criteri.Subscription - Only resources within that subscription can be assigned the policy.
  • Un gruppo di gestione: solo le risorse all'interno dei gruppi di gestione figlio e delle sottoscrizioni figlio possono essere assegnate ai criteri.Management group - Only resources within child management groups and child subscriptions can be assigned the policy. Se si intende applicare questa definizione di criteri a più sottoscrizioni, la posizione deve essere un gruppo di gestione contenente tali sottoscrizioni.If you plan to apply the policy definition to several subscriptions, the location must be a management group that contains those subscriptions.

Nome visualizzato e descrizioneDisplay name and description

Usare displayName e description per identificare la definizione dei criteri e fornire il contesto d'uso.You use displayName and description to identify the policy definition and provide context for when it's used. displayName ha una lunghezza massima di 128 caratteri e description una lunghezza massima di 512 caratteri.displayName has a maximum length of 128 characters and description a maximum length of 512 characters.

Regola dei criteriPolicy rule

La regola dei criteri è costituita dai blocchi If e Then blocchi.The policy rule consists of If and Then blocks. Nel blocco If, si definiscono una o più condizioni che specificano quando i criteri vengono applicati.In the If block, you define one or more conditions that specify when the policy is enforced. È possibile applicare gli operatori logici a queste condizioni per definire con precisione lo scenario di un criterio.You can apply logical operators to these conditions to precisely define the scenario for a policy.

Nel blocco Then si definisce l'effetto che si verifica quando le condizioni If sono soddisfatte.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"
    }
}

Operatori logiciLogical operators

Gli operatori logici supportati sono:Supported logical operators are:

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

La sintassi not inverte il risultato della condizione.The not syntax inverts the result of the condition. La sintassi allOf (simile all'operazione logica And) richiede che tutte le condizioni siano vere.The allOf syntax (similar to the logical And operation) requires all conditions to be true. La sintassi anyOf (simile all'operazione logica Or) richiede che una o più condizioni siano vere.The anyOf syntax (similar to the logical Or operation) requires one or more conditions to be true.

È possibile annidare gli operatori logici.You can nest logical operators. L'esempio seguente illustra un'operazione not nidificata in un'operazione allOf.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"
        }
    ]
},

CondizioniConditions

Una condizione valuta se una funzione di accesso field o value soddisfa determinati criteri.A condition evaluates whether a field or the value accessor meets certain criteria. Le condizioni supportate sono: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"

Quando si usano le condizioni like e notLike, è possibile inserire un carattere jolly * nel valore.When using the like and notLike conditions, you provide a wildcard * in the value. Il valore non deve contenere più di un carattere jolly *.The value shouldn't have more than one wildcard *.

Quando si usano le condizioni match e notMatch , fornire # per trovare la corrispondenza con una cifra, ? per una lettera, . in modo che corrisponda a qualsiasi carattere e qualsiasi altro carattere in modo che corrisponda al carattere effettivo.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 e notMatch fanno distinzione tra maiuscole e minuscole.match and notMatch are case-sensitive. Alternative senza distinzione tra maiuscole e minuscole sono disponibili in matchInsensitively e notMatchInsensitively.Case-insensitive alternatives are available in matchInsensitively and notMatchInsensitively. Ad esempio, vedere Consentire modelli nome multipli.For examples, see Allow several name patterns.

FieldsFields

Le condizioni vengono formate usando i campi.Conditions are formed by using fields. Un campo rappresenta le proprietà nel payload delle richieste di risorse e descrive lo stato della risorsa.A field matches properties in the resource request payload and describes the state of the resource.

Sono supportati i seguenti campi:The following fields are supported:

  • name
  • fullName
    • Restituisce il nome completo della risorsa.Returns the full name of the resource. Il nome completo di una risorsa è il nome della risorsa con anteposti gli eventuali nomi delle risorse padre (ad esempio "myServer/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>']
    • Questa sintassi tra parentesi quadre supporta nomi di tag con segni di punteggiatura, ad esempio un trattino, punti o spazi.This bracket syntax supports tag names that have punctuation such as a hyphen, period, or space.
    • Dove <tagName> è il nome del tag per il quale convalidare la condizione.Where <tagName> is the name of the tag to validate the condition for.
    • Esempi: tags['Acct.CostCenter'] dove Acct.CostCenter è il nome del tag.Examples: tags['Acct.CostCenter'] where Acct.CostCenter is the name of the tag.
  • tags['''<tagName>''']
    • Questa sintassi tra parentesi quadre supporta nomi di tag contenenti apostrofi eseguendo l'escape con esso in caratteri di escape con apostrofi doppi.This bracket syntax supports tag names that have apostrophes in it by escaping with double apostrophes.
    • Dove '<tagName>' è il nome del tag per il quale convalidare la condizione.Where '<tagName>' is the name of the tag to validate the condition for.
    • Esempio: tags['''My.Apostrophe.Tag'''] in cui ' My. Apostrof. Tag ' è il nome del tag.Example: tags['''My.Apostrophe.Tag'''] where 'My.Apostrophe.Tag' is the name of the tag.
  • alias delle proprietà; per un elenco, vedere alias.property aliases - for a list, see Aliases.

Nota

tags.<tagName>, tags[tagName] e tags[tag.with.dots] sono comunque modi accettabili per dichiarare un campo tags.tags.<tagName>, tags[tagName], and tags[tag.with.dots] are still acceptable ways of declaring a tags field. Tuttavia, le espressioni preferibili sono quelle elencate in precedenza.However, the preferred expressions are those listed above.

Usare tag con parametriUse tags with parameters

È possibile passare a un campo di tag un valore di parametro.A parameter value can be passed to a tag field. Passare un parametro a un campo di tag aumenta la flessibilità della definizione dei criteri durante l'assegnazione dei criteri.Passing a parameter to a tag field increases the flexibility of the policy definition during policy assignment.

Nell'esempio seguente, concat viene usato per creare una ricerca nei campi di tag per il tag che ha come nome il valore del parametro tagName.In the following example, concat is used to create a tags field lookup for the tag named the value of the tagName parameter. Se il tag non esiste, l'effetto di modifica viene usato per aggiungere il tag usando il valore dello stesso set di tag denominato nel gruppo di risorse padre delle risorse controllate tramite la funzione di ricerca 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"
            ]
        }
    }
}

ValoreValue

Le condizioni possono essere formate anche usando value.Conditions can also be formed using value. value controlla le condizioni rispetto a parametri, funzioni di modello supportate o valori letterali.value checks conditions against parameters, supported template functions, or literals. value è associato a qualsiasi condizione supportata.value is paired with any supported condition.

Avviso

Se il risultato di una funzione modello è un errore, la valutazione dei criteri ha esito negativo.If the result of a template function is an error, policy evaluation fails. Una valutazione non riuscita è un' negazioneimplicita.A failed evaluation is an implicit deny. Per ulteriori informazioni, vedere la pagina relativa alla prevenzione degli errori del modello.For more information, see avoiding template failures.

Esempi d'uso di valueValue examples

Questa regola dei criteri usa value per confrontare il risultato della funzione resourceGroup() e la proprietà restituita name rispetto a una condizione like di *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. La regola respinge qualsiasi risorsa che non faccia parte di Microsoft.Network/*type in qualsiasi gruppo di risorse il cui nome termina con *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"
    }
}

Questa regola dei criteri usa value per verificare se il risultato di più funzioni annidate corrisponde a equals true.This policy rule example uses value to check if the result of multiple nested functions equals true. La regola respinge qualsiasi risorsa che non dispone di almeno tre tag.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"
        }
    }
}

Evitare gli errori di modelliAvoiding template failures

L'utilizzo delle funzioni di modello in value consente numerose funzioni annidate complesse.The use of template functions in value allows for many complex nested functions. Se il risultato di una funzione modello è un errore, la valutazione dei criteri ha esito negativo.If the result of a template function is an error, policy evaluation fails. Una valutazione non riuscita è un' negazioneimplicita.A failed evaluation is an implicit deny. Un esempio di un valore che ha esito negativo in determinati scenari:An example of a value that fails in certain scenarios:

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

La regola dei criteri di esempio precedente USA substring () per confrontare i primi tre caratteri di nome in ABC.The example policy rule above uses substring() to compare the first three characters of name to abc. Se il nome è più breve di tre caratteri, la funzione substring() genera un errore.If name is shorter than three characters, the substring() function results in an error. Questo errore fa sì che i criteri diventino un effetto negato .This error causes the policy to become a deny effect.

Utilizzare invece la funzione if () per verificare se i primi tre caratteri del nome corrispondono a ABC senza consentire a un nome più breve di tre caratteri di generare un errore: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"
        }
    }
}

Con la regola dei criteri modificata, if() controlla la lunghezza del nome prima di provare a ottenere un substring() su un valore con meno di tre caratteri.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. Se il nome è troppo breve, viene invece restituito il valore "Not Starting with ABC" e viene confrontato con ABC.If name is too short, the value "not starting with abc" is returned instead and compared to abc. Una risorsa con un nome breve che non inizia con ABC continua ad avere esito negativo sulla regola dei criteri, ma non causa più errori durante la valutazione.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.

EffettoEffect

Criteri di Azure supporta i seguenti tipi di effetto:Azure Policy supports the following types of effect:

  • Append: aggiunge il set di campi definiti alla richiestaAppend: adds the defined set of fields to the request
  • Audit: genera un evento di avviso nel log attività, ma non nega la richiestaAudit: generates a warning event in activity log but doesn't fail the request
  • AuditIfNotExists: genera un evento di avviso nel log attività se una risorsa correlata non esisteAuditIfNotExists: generates a warning event in activity log if a related resource doesn't exist
  • Deny: genera un evento nel log attività e nega la richiestaDeny: generates an event in the activity log and fails the request
  • DeployIfNotExists: distribuisce una risorsa correlata se non esiste giàDeployIfNotExists: deploys a related resource if it doesn't already exist
  • Disabled: non valuta le risorse per garantire la conformità alla regola dei criteriDisabled: doesn't evaluate resources for compliance to the policy rule
  • EnforceOPAConstraint (anteprima): configura il controller di ammissione di agenti criteri aperti con gatekeeper V3 per i cluster Kubernetes autogestiti in Azure (anteprima)EnforceOPAConstraint (preview): configures the Open Policy Agent admissions controller with Gatekeeper v3 for self-managed Kubernetes clusters on Azure (preview)
  • EnforceRegoPolicy (anteprima): configura il controller di ammissione di agenti criteri aperti con gatekeeper V2 nel servizio Azure KubernetesEnforceRegoPolicy (preview): configures the Open Policy Agent admissions controller with Gatekeeper v2 in Azure Kubernetes Service
  • Modifica: aggiunge, aggiorna o rimuove i tag definiti da una risorsaModify: adds, updates, or removes the defined tags from a resource

Per informazioni complete su ogni effetto, ordine di valutazione, proprietà ed esempi, vedere informazioni sugli effetti dei criteri di Azure.For complete details on each effect, order of evaluation, properties, and examples, see Understanding Azure Policy Effects.

Funzioni dei criteriPolicy functions

Tutte le funzioni di modello di gestione risorse sono disponibili per l'uso in una regola dei criteri, eccetto le funzioni e le funzioni definite dall'utente seguenti:All Resource Manager template functions are available to use within a policy rule, except the following functions and user-defined functions:

  • copyIndex()copyIndex()
  • deployment()deployment()
  • list*list*
  • newGuid ()newGuid()
  • pickZones()pickZones()
  • providers()providers()
  • reference()reference()
  • resourceId()resourceId()
  • variables()variables()

Le funzioni seguenti sono disponibili per l'uso in una regola dei criteri, ma sono diverse da quelle usate in un modello di Azure Resource Manager: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] stringa stringa nel formato DateTime universale ISO 8601' aaaa-mm-ggThh: mm: SS. fffffffZ 'dateTime: [Required] string - String in the Universal ISO 8601 DateTime format 'yyyy-MM-ddTHH:mm:ss.fffffffZ'
    • numberOfDaysToAdd: [Required] numero intero di giorni da aggiungerenumberOfDaysToAdd: [Required] integer - Number of days to add
  • utcNow (): diversamente da un modello di Gestione risorse, può essere usato all'esterno di defaultValue.utcNow() - Unlike a Resource Manager template, this can be used outside defaultValue.
    • Restituisce una stringa impostata sulla data e l'ora correnti nel formato DateTime ISO 8601 universale ' AAAA-MM-GGThh: 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'

Inoltre, la funzione field è disponibile per le regole dei criteri.Additionally, the field function is available to policy rules. field viene principalmente usata con AuditIfNotExists e DeployIfNotExists per fare riferimento ai campi sulla risorsa che viene valutata.field is primarily used with AuditIfNotExists and DeployIfNotExists to reference fields on the resource that are being evaluated. Altre informazioni sono disponibili nell'esempio DeployIfNotExists.An example of this use can be seen in the DeployIfNotExists example.

Esempio di funzione dei criteriPolicy function example

Questo esempio di regola dei criteri usa la resourceGroup funzione risorsa per ottenere la proprietà name, in combinazione con la matrice concat e la funzione oggetto per creare una condizione like che fa in modo che il nome della risorsa inizi con il nome del gruppo di risorse.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

Usare gli alias delle proprietà per accedere alle proprietà specifiche per un tipo di risorsa.You use property aliases to access specific properties for a resource type. Gli alias consentono di limitare le condizioni o i valori consentiti per una proprietà su una risorsa.Aliases enable you to restrict what values or conditions are allowed for a property on a resource. Ogni alias esegue il mapping ai percorsi in versioni di API diverse per un tipo di risorsa specificato.Each alias maps to paths in different API versions for a given resource type. Durante la valutazione dei criteri, il motore dei criteri ottiene il percorso della proprietà per la versione API specificata.During policy evaluation, the policy engine gets the property path for that API version.

L'elenco degli alias è in costante crescita.The list of aliases is always growing. Per scoprire quali alias sono attualmente supportati da Criteri di Azure usare uno dei metodi seguenti: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
    
  • Interfaccia della riga di comando di AzureAzure 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"
    
  • API REST / ARMClientREST API / ARMClient

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

Informazioni sull'alias [*]Understanding the [*] alias

Molti degli alias disponibili hanno una versione che viene visualizzata come un nome "normale" e un'altra a cui viene aggiunto [*] .Several of the aliases that are available have a version that appears as a 'normal' name and another that has [*] attached to it. Ad esempio:For example:

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

L'alias ' Normal ' rappresenta il campo come valore singolo.The 'normal' alias represents the field as a single value. Questo campo è per gli scenari di confronto con corrispondenza esatta quando l'intero set di valori deve essere esattamente come definito, non più e non meno.This field is for exact match comparison scenarios when the entire set of values must be exactly as defined, no more and no less.

L'alias [*] consente di eseguire il confronto con il valore di ogni elemento nella matrice e con proprietà specifiche di ogni elemento.The [*] alias makes it possible to compare against the value of each element in the array and specific properties of each element. Questo approccio consente di confrontare le proprietà degli elementi per gli scenari "If None of", "if any of" o "if all of".This approach makes it possible to compare element properties for 'if none of', 'if any of', or 'if all of' scenarios. Utilizzando ipRules [*] , un esempio consiste nel convalidare che ogni azione è negata, ma non è preoccupante del numero di regole esistenti o del valore IP.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. Questa regola di esempio controlla la presenza di eventuali corrispondenze di ipRules [*]. Value in 10.0.4.1 e applica effectType solo se non trova almeno una corrispondenza: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')]"
    }
}

Per ulteriori informazioni, vedere la pagina relativa alla valutazione dell'alias [*].For more information, see evaluating the [*] alias.

IniziativeInitiatives

Le iniziative consentono di raggruppare più definizioni di criteri correlati per semplificare le assegnazioni e la gestione e quindi di usare un gruppo come se fosse un unico elemento.Initiatives enable you to group several related policy definitions to simplify assignments and management because you work with a group as a single item. È possibile ad esempio raggruppare tutte le definizioni di criteri relativi ai tag in una singola iniziativa.For example, you can group related tagging policy definitions into a single initiative. Invece di assegnare ciascun criterio singolarmente, si applica l'iniziativa.Rather than assigning each policy individually, you apply the initiative.

L'esempio seguente illustra come creare un'iniziativa per la gestione di due tag: costCenter e productName.The following example illustrates how to create an initiative for handling two tags: costCenter and productName. Usa due criteri predefiniti per applicare il valore di tag predefinito.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"
}

Passaggi successiviNext steps