Estructura de definición de Azure PolicyAzure Policy definition structure

Azure Policy usa las definiciones de directivas de recursos para establecer convenciones para los recursos.Resource policy definitions are used by Azure Policy to establish conventions for resources. Cada definición describe la compatibilidad de recursos y el efecto que debe realizarse cuando un recurso no es compatible.Each definition describes resource compliance and what effect to take when a resource is non-compliant. La definición de convenciones permite controlar los costes y administrar los recursos más fácilmente.By defining conventions, you can control costs and more easily manage your resources. Por ejemplo, puede especificar que se permitan solo determinados tipos de máquinas virtuales.For example, you can specify that only certain types of virtual machines are allowed. O puede obligar a que todos los recursos tengan una etiqueta concreta.Or, you can require that all resources have a particular tag. Todos los recursos secundarios heredan las directivas.Policies are inherited by all child resources. Si una directiva se aplica a un grupo de recursos, será aplicable a todos los recursos de dicho grupo de recursos.If a policy is applied to a resource group, it's applicable to all the resources in that resource group.

El esquema de definición de Directiva se encuentra aquí: 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

Para crear una definición de directiva se utiliza JSON.You use JSON to create a policy definition. La definición de directiva contiene elementos para:The policy definition contains elements for:

  • modomode
  • parametersparameters
  • nombre para mostrardisplay name
  • descriptiondescription
  • regla de directivapolicy rule
    • evaluación lógicalogical evaluation
    • efectoeffect

Por ejemplo, el siguiente JSON muestra una directiva que limita las ubicaciones donde se implementan los recursos: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"
            }
        }
    }
}

Todos los ejemplos de Azure Policy se encuentran en Ejemplos de Azure Policy.All Azure Policy samples are at Azure Policy samples.

ModeMode

El modo se configura en función de si la directiva tiene como destino una propiedad de Azure Resource Manager o una propiedad del proveedor de recursos.Mode is configured depending on if the policy is targeting an Azure Resource Manager property or a Resource Provider property.

Modos de Resource ManagerResource Manager modes

El modo determina qué tipos de recurso se evaluarán para una directiva.The mode determines which resource types will be evaluated for a policy. Los modos admitidos son:The supported modes are:

  • all: evalúe los grupos de recursos y todos los tipos de recursoall: evaluate resource groups and all resource types
  • indexed: evalúe solo los tipos de recurso que admitan las etiquetas y la ubicaciónindexed: only evaluate resource types that support tags and location

Se recomienda que establezca mode en all en la mayoría de los casos.We recommend that you set mode to all in most cases. Todas las definiciones de directivas creadas a través del portal usan el modo all.All policy definitions created through the portal use the all mode. Si usa PowerShell o la CLI de Azure, puede especificar el parámetro mode de forma manual.If you use PowerShell or Azure CLI, you can specify the mode parameter manually. Si la definición de directiva no incluye un valor de modo, el valor predeterminado es all en Azure PowerShell y null en la CLI de 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 modo null es lo mismo que usar indexed para la compatibilidad con versiones anteriores.A null mode is the same as using indexed to support backwards compatibility.

indexed debe usarse al crear directivas que apliquen etiquetas o ubicaciones.indexed should be used when creating policies that enforce tags or locations. Aunque no es obligatorio, impide que los recursos que no son compatibles con etiquetas y ubicaciones aparezcan como no compatibles en los resultados de cumplimiento.While not required, it prevents resources that don't support tags and locations from showing up as non-compliant in the compliance results. La excepción son los grupos de recursos.The exception is resource groups. Las directivas que aplican la ubicación o etiquetas en un grupo de recursos deben establecer mode en all y tener como destino específico el 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. Para obtener un ejemplo, consulte Aplicar etiqueta y su valor en grupos de recursos.For an example, see Enforce resource group tags. Para obtener una lista de los recursos que admiten etiquetas, consulte Compatibilidad con etiquetas de los recursos de Azure.For a list of resources that support tags, see Tag support for Azure resources.

Modos del proveedor de recursos (versión preliminar)Resource Provider modes (preview)

Actualmente se admiten los siguientes modos del proveedor de recursos durante la versión preliminar:The following Resource Provider modes are currently supported during preview:

  • Microsoft.ContainerService.Data para administrar reglas del controlador de admisión en Azure Kubernetes Service.Microsoft.ContainerService.Data for managing admission controller rules on Azure Kubernetes Service. Las políticas que usan este modo del proveedor de recursos deben utilizar el efecto EnforceRegoPolicy.Policies using this Resource Provider mode must use the EnforceRegoPolicy effect.
  • Microsoft.Kubernetes.Data para administrar clústeres de Kubernetes del motor de AKS autoadministrados en Azure.Microsoft.Kubernetes.Data for managing self-managed AKS Engine Kubernetes clusters on Azure. Las políticas que usan este modo del proveedor de recursos deben utilizar el efecto EnforceOPAConstraint.Policies using this Resource Provider mode must use the EnforceOPAConstraint effect.
  • Microsoft.KeyVault.Data para administrar almacenes y certificados en Azure Key Vault.Microsoft.KeyVault.Data for managing vaults and certificates in Azure Key Vault.

Nota

Los modos del proveedor de recursos solo admiten definiciones de directivas integradas y no admiten iniciativas durante la versión preliminar.Resource Provider modes only support built-in policy definitions and don't support initiatives while in preview.

ParámetrosParameters

Los parámetros ayudan a simplificar la administración de directivas mediante la reducción del número de definiciones de directiva.Parameters help simplify your policy management by reducing the number of policy definitions. Piense en los parámetros como si fueran los campos de un formulario: name, address, city, state.Think of parameters like the fields on a form – name, address, city, state. Estos parámetros no cambian, pero sí sus valores en función del individuo que rellena el formulario.These parameters always stay the same, however their values change based on the individual filling out the form. Los parámetros funcionan del mismo modo al crear las directivas.Parameters work the same way when building policies. Con la inclusión de parámetros en una definición de directiva, puede volver a usar esa directiva en distintos escenarios con valores diferentes.By including parameters in a policy definition, you can reuse that policy for different scenarios by using different values.

Nota

Pueden añadirse parámetros a una definición existente y asignada.Parameters may be added to an existing and assigned definition. El nuevo parámetro debe incluir la propiedad defaultValue.The new parameter must include the defaultValue property. Así se evita que las asignaciones existentes de la directiva o la iniciativa realizadas indirectamente no sean válidas.This prevents existing assignments of the policy or initiative from indirectly being made invalid.

Propiedades del parámetroParameter properties

Un parámetro tiene las siguientes propiedades que se usan en la definición de directiva:A parameter has the following properties that are used in the policy definition:

  • name: El nombre del parámetro.name: The name of your parameter. Lo utiliza la función de la implementación parameters dentro de la regla de directiva.Used by the parameters deployment function within the policy rule. Para más información, consulte Uso de un valor de parámetro.For more information, see using a parameter value.
  • type: Determina si el parámetro es string, array, object, boolean, integer, float o datetime.type: Determines if the parameter is a string, array, object, boolean, integer, float, or datetime.
  • metadata: Define las subpropiedades que usa principalmente Azure Portal para mostrar información intuitiva:metadata: Defines subproperties primarily used by the Azure portal to display user-friendly information:
    • description: La explicación de para qué se usa el parámetro.description: The explanation of what the parameter is used for. Puede utilizarse para proporcionar ejemplos de valores aceptables.Can be used to provide examples of acceptable values.
    • displayName: El nombre descriptivo que se muestra en el portal para el parámetro.displayName: The friendly name shown in the portal for the parameter.
    • strongType: (Opcional) Se usa al asignar la definición de directiva mediante el portal.strongType: (Optional) Used when assigning the policy definition through the portal. Proporciona una lista que tiene en cuenta el contexto.Provides a context aware list. Para más información, consulte strongType.For more information, see strongType.
    • assignPermissions: (Opcional) Establecer como true para que Azure Portal cree asignaciones de roles durante la asignación de directivas.assignPermissions: (Optional) Set as true to have Azure portal create role assignments during policy assignment. Esta propiedad es útil en caso de que desee asignar permisos fuera del ámbito de asignación.This property is useful in case you wish to assign permissions outside the assignment scope. Hay una asignación de roles por cada definición de roles de la directiva (o por cada definición de roles de todas las directivas de la iniciativa).There is one role assignment per role definition in the policy (or per role definition in all of the policies in the initiative). El valor del parámetro debe ser un recurso o un ámbito válidos.The parameter value must be a valid resource or scope.
  • defaultValue: (Opcional) Establece el valor del parámetro en una asignación, si no se especifica ningún valor.defaultValue: (Optional) Sets the value of the parameter in an assignment if no value is given. Requerido cuando se actualiza una definición de directiva existente que está asignada.Required when updating an existing policy definition that is assigned.
  • allowedValues: (Opcional) Proporciona una matriz de los valores que acepta el parámetro durante la asignación.allowedValues: (Optional) Provides an array of values that the parameter accepts during assignment.

Por ejemplo, podría definir una definición de directiva para limitar las ubicaciones en las que se pueden implementar los recursos.As an example, you could define a policy definition to limit the locations where resources can be deployed. Un parámetro para esa definición de directiva podría ser allowedLocations.A parameter for that policy definition could be allowedLocations. Este parámetro podría utilizarse por cada asignación de la definición de directiva para limitar los valores aceptados.This parameter would be used by each assignment of the policy definition to limit the accepted values. El uso de strongType proporciona una experiencia mejorada al completar la asignación mediante el 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"
        ]
    }
}

Uso de un valor de parámetroUsing a parameter value

En la regla de directiva, se hace referencia a los parámetros con la siguiente sintaxis de función parameters:In the policy rule, you reference parameters with the following parameters function syntax:

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

En este ejemplo se hace referencia al parámetro allowedLocations que se mostró en las propiedades del parámetro.This sample references the allowedLocations parameter that was demonstrated in parameter properties.

strongTypestrongType

Dentro de la propiedad metadata, puede usar strongType para proporcionar una lista de opciones de selección múltiple en Azure Portal.Within the metadata property, you can use strongType to provide a multi-select list of options within the Azure portal. Los valores permitidos para strongType actualmente incluyen: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

Ubicación de definiciónDefinition location

Al crear una iniciativa o directiva, es necesario especificar la ubicación de la definición.While creating an initiative or policy, it's necessary to specify the definition location. La ubicación de la definición puede especificarse como un grupo de administración o una suscripción.The definition location must be a management group or a subscription. La ubicación determina el ámbito al que pueden asignarse la directiva o la iniciativa.This location determines the scope to which the initiative or policy can be assigned. Los recursos deben ser miembros directos o elementos secundarios dentro de la jerarquía de la ubicación de la definición para que puedan ser destino de asignación.Resources must be direct members of or children within the hierarchy of the definition location to target for assignment.

Si la ubicación de la definición es:If the definition location is a:

  • Una suscripción: solo se puede asignar la directiva a los recursos dentro de esa suscripción.Subscription - Only resources within that subscription can be assigned the policy.
  • Un grupo de administración: solo se puede asignar la directiva a los recursos dentro de grupos de administración secundarios y suscripciones secundarias.Management group - Only resources within child management groups and child subscriptions can be assigned the policy. Si planea aplicar la definición de directiva a varias suscripciones, la ubicación debe ser un grupo de administración que contenga esas suscripciones.If you plan to apply the policy definition to several subscriptions, the location must be a management group that contains those subscriptions.

Nombre para mostrar y descripciónDisplay name and description

Use los valores displayName y description para identificar la definición de directiva y proporcionar el contexto para su uso.You use displayName and description to identify the policy definition and provide context for when it's used. displayName tiene una longitud máxima de 128 caracteres y description tiene una longitud máxima de 512 caracteres.displayName has a maximum length of 128 characters and description a maximum length of 512 characters.

Regla de directivaPolicy rule

La regla de directiva se compone de los bloques If y Then.The policy rule consists of If and Then blocks. En el bloque If, defina una o varias condiciones que especifican cuándo se aplica la directiva.In the If block, you define one or more conditions that specify when the policy is enforced. Puede aplicar operadores lógicos a estas condiciones para definir con precisión el escenario de una directiva.You can apply logical operators to these conditions to precisely define the scenario for a policy.

En el bloque Then, defina el efecto que se produce cuando se cumplen las condiciones de If.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"
    }
}

Operadores lógicosLogical operators

Los operadores lógicos admitidos son:Supported logical operators are:

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

La sintaxis not invierte el resultado de la condición.The not syntax inverts the result of the condition. La sintaxis allOf (similar a la operación lógica And) requiere que se cumplan todas las condiciones.The allOf syntax (similar to the logical And operation) requires all conditions to be true. La sintaxis anyOf (similar a la operación lógica Or) requiere que se cumplan una o varias condiciones.The anyOf syntax (similar to the logical Or operation) requires one or more conditions to be true.

Puede anidar los operadores lógicos.You can nest logical operators. El ejemplo siguiente muestra una operación not que está anidada dentro de una operación 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"
        }
    ]
},

CondicionesConditions

Una condición evalúa si un campo o el descriptor de acceso value cumple determinados criterios.A condition evaluates whether a field or the value accessor meets certain criteria. Estas son las condiciones que se admiten: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"

Cuando se usan las condiciones like y notLike, incluya un carácter comodín (*) en el valor.When using the like and notLike conditions, you provide a wildcard * in the value. El valor no debe contener más de un carácter comodín *.The value shouldn't have more than one wildcard *.

Cuando se usan las condiciones match y notMatch, proporcione # para que coincida un dígito, ? para una letra, . para que coincida cualquier carácter y cualquier otro carácter para que coincida ese carácter en sí.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 y notMatch distinguen mayúsculas de minúsculas.match and notMatch are case-sensitive. Las alternativas de distinción entre mayúsculas y minúsculas están disponibles en matchInsensitively y notMatchInsensitively.Case-insensitive alternatives are available in matchInsensitively and notMatchInsensitively. Por ejemplo, consulte Permitir varios patrones de nombre.For examples, see Allow several name patterns.

FieldsFields

Para crear condiciones se usan campos.Conditions are formed by using fields. Un campo coincide con las propiedades de la carga de solicitud de recursos y describe el estado del recurso.A field matches properties in the resource request payload and describes the state of the resource.

Se admiten los siguientes campos:The following fields are supported:

  • name
  • fullName
    • Devuelve el nombre completo del recurso.Returns the full name of the resource. El nombre completo de un recurso es el nombre del recurso precedido por los nombres de recurso principal (por ejemplo "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>']
    • Esta sintaxis con corchetes admite nombres de etiquetas que tienen signos de puntuación como guion, punto o espacio.This bracket syntax supports tag names that have punctuation such as a hyphen, period, or space.
    • Donde <tagName> es el nombre de la etiqueta para validar la condición.Where <tagName> is the name of the tag to validate the condition for.
    • Ejemplos: tags['Acct.CostCenter'] donde Acct.CostCenter es el nombre de la etiqueta.Examples: tags['Acct.CostCenter'] where Acct.CostCenter is the name of the tag.
  • tags['''<tagName>''']
    • Esta sintaxis con corchetes admite nombres de etiquetas con apóstrofos mediante secuencias de escape con dobles apóstrofos.This bracket syntax supports tag names that have apostrophes in it by escaping with double apostrophes.
    • Donde <tagName> es el nombre de la etiqueta para validar la condición.Where '<tagName>' is the name of the tag to validate the condition for.
    • Ejemplo: tags['''My.Apostrophe.Tag'''] donde 'My.Apostrophe.Tag' es el nombre de la etiqueta.Example: tags['''My.Apostrophe.Tag'''] where 'My.Apostrophe.Tag' is the name of the tag.
  • alias de propiedad: para obtener una lista, vea Alias.property aliases - for a list, see Aliases.

Nota

tags.<tagName>, tags[tagName] y tags[tag.with.dots] son todavía formas aceptables de declarar un campo de etiquetas.tags.<tagName>, tags[tagName], and tags[tag.with.dots] are still acceptable ways of declaring a tags field. Sin embargo, las expresiones preferidas son las mencionadas anteriormente.However, the preferred expressions are those listed above.

Uso de etiquetas con parámetrosUse tags with parameters

Un valor de parámetro se puede pasar a un campo de etiqueta.A parameter value can be passed to a tag field. Al pasar un parámetro a un campo de etiqueta aumenta la flexibilidad de la definición de directiva durante la asignación de directivas.Passing a parameter to a tag field increases the flexibility of the policy definition during policy assignment.

En el ejemplo siguiente, concat se usa para crear una búsqueda de campos de etiquetas para la etiqueta denominada con el valor del parámetro tagName.In the following example, concat is used to create a tags field lookup for the tag named the value of the tagName parameter. Si esa etiqueta no existe, se usa el efecto modify para agregarla con el valor de la misma etiqueta con nombre establecida en el grupo de recursos principal de los recursos auditados mediante la función de búsqueda 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"
            ]
        }
    }
}

ValorValue

Las condiciones también se pueden formar mediante el uso de value.Conditions can also be formed using value. value comprueba las condiciones en parámetros, funciones de plantilla admitidas o literales.value checks conditions against parameters, supported template functions, or literals. value se empareja con cualquier condición admitida.value is paired with any supported condition.

Advertencia

Si el resultado de una función de plantilla es un error, no se pude realizar la evaluación de directivas.If the result of a template function is an error, policy evaluation fails. Una evaluación con errores es una denegación implícita.A failed evaluation is an implicit deny. Para más información, consulte cómo evitar los errores de plantilla.For more information, see avoiding template failures.

Ejemplos de valueValue examples

En este ejemplo de regla de directiva se utiliza value para comparar el resultado de la función resourceGroup() y la propiedad name devuelta con una condición like de *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 regla niega cualquier recurso que no sea de tipo Microsoft.Network/* en cualquier grupo de recursos cuyo nombre termine en *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"
    }
}

En este ejemplo de regla de directiva se utiliza value para comprobar si el resultado de varias funciones anidadas es igual a true.This policy rule example uses value to check if the result of multiple nested functions equals true. La regla deniega cualquier recurso que no tenga al menos tres etiquetas.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"
        }
    }
}

Evitar los errores de plantillaAvoiding template failures

El uso de funciones de plantilla en el valor permite muchas funciones anidadas complejas.The use of template functions in value allows for many complex nested functions. Si el resultado de una función de plantilla es un error, no se pude realizar la evaluación de directivas.If the result of a template function is an error, policy evaluation fails. Una evaluación con errores es una denegación implícita.A failed evaluation is an implicit deny. Un ejemplo de un valor que produce un error en ciertos escenarios:An example of a value that fails in certain scenarios:

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

La regla de directiva del ejemplo anterior usa substring() para comparar los tres primeros caracteres del nombre con abc.The example policy rule above uses substring() to compare the first three characters of name to abc. Si el nombre tiene menos de tres caracteres, la función substring() produce un error.If name is shorter than three characters, the substring() function results in an error. Este error hace que la directiva tenga el efecto de denegar.This error causes the policy to become a deny effect.

En su lugar, use la función if() para comprobar si los tres primeros caracteres del nombre son igual a abc sin permitir que un nombre menor de tres caracteres produzca un error: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 regla de directivas revisada, if() comprueba la longitud del nombre antes de intentar obtener un elemento substring() de un valor con menos de tres caracteres.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. Si el nombre es demasiado corto, se devuelve en su lugar el valor "no comienza por abc" en lugar de compararlo con abc.If name is too short, the value "not starting with abc" is returned instead and compared to abc. Un recurso con un nombre corto que no comienza por abc sigue produciendo un error en la regla de directivas, pero ya no se produce un error durante la evaluación.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.

EfectoEffect

Azure Policy admite los siguientes tipos de efecto:Azure Policy supports the following types of effect:

  • Append: agrega el conjunto de campos definido a la solicitud.Append: adds the defined set of fields to the request
  • Audit: genera un evento de advertencia en el registro de actividad pero no genera un error en la solicitud.Audit: generates a warning event in activity log but doesn't fail the request
  • AuditIfNotExists: genera un evento de advertencia en el registro de actividad en caso de no existir un recurso relacionado.AuditIfNotExists: generates a warning event in activity log if a related resource doesn't exist
  • Deny: genera un evento en el registro de actividad y genera un error en la solicitud.Deny: generates an event in the activity log and fails the request
  • DeployIfNotExists: implementa un recurso relacionado si todavía no existe.DeployIfNotExists: deploys a related resource if it doesn't already exist
  • Disabled: no se evalúa el cumplimiento de la regla de directivas en los recursos.Disabled: doesn't evaluate resources for compliance to the policy rule
  • EnforceOPAConstraint (versión preliminar): configura el controlador de admisiones Open Policy Agent con Gatekeeper v3 para clústeres de Kubernetes autoadministrados en Azure (versión preliminar)EnforceOPAConstraint (preview): configures the Open Policy Agent admissions controller with Gatekeeper v3 for self-managed Kubernetes clusters on Azure (preview)
  • EnforceRegoPolicy (versión preliminar): configura el controlador de admisiones Open Policy Agent con Gatekeeper v2 en Azure Kubernetes ServiceEnforceRegoPolicy (preview): configures the Open Policy Agent admissions controller with Gatekeeper v2 in Azure Kubernetes Service
  • Modify: agrega, actualiza o quita las etiquetas definidas de un recurso.Modify: adds, updates, or removes the defined tags from a resource

Para obtener información detallada sobre cada efecto, el orden de evaluación, las propiedades y algunos ejemplos, consulte Descripción de los efectos de Azure Policy.For complete details on each effect, order of evaluation, properties, and examples, see Understanding Azure Policy Effects.

Funciones de directivaPolicy functions

Se pueden usar todas las funciones de plantilla de Resource Manager dentro de una regla de directivas, excepto las siguientes funciones y funciones definidas por el usuario: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()
  • lista*list*
  • newGuid()newGuid()
  • pickZones()pickZones()
  • providers()providers()
  • reference()reference()
  • resourceId()resourceId()
  • variables()variables()

Las siguientes funciones están disponibles para su uso en una regla de directivas, pero difieren del uso en una plantilla de 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 (fecha y hora): [Obligatorio] cadena: cadena con el formato de fecha y hora universal ISO 8601 "yyyy-MM-ddTHH:mm:ss.fffffffZ"dateTime: [Required] string - String in the Universal ISO 8601 DateTime format 'yyyy-MM-ddTHH:mm:ss.fffffffZ'
    • numberOfDaysToAdd (número de días para agregar): [Obligatorio] entero: número de días que se desea agregarnumberOfDaysToAdd: [Required] integer - Number of days to add
  • utcNow(): a diferencia de una plantilla de Resource Manager, se puede usar con otro valor distinto del predeterminado.utcNow() - Unlike a Resource Manager template, this can be used outside defaultValue.
    • Devuelve una cadena que se establece en la fecha y hora actuales en formato de fecha y hora universal ISO 8601 "yyyy-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'

Además, la función field está disponible para las reglas de directiva.Additionally, the field function is available to policy rules. field se usa principalmente con AuditIfNotExists y DeployIfNotExists para hacer referencia a los campos del recurso que se van a evaluar.field is primarily used with AuditIfNotExists and DeployIfNotExists to reference fields on the resource that are being evaluated. Este uso se puede observar en el ejemplo de DeployIfNotExists.An example of this use can be seen in the DeployIfNotExists example.

Ejemplo de función de directivaPolicy function example

Este ejemplo de regla de directiva usa la función de recurso resourceGroup para obtener la propiedad nombre, combinada con la matriz concat y la función de objeto para compilar una condición like que exige que el nombre del recurso empiece con el nombre del grupo de recursos.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

Los alias de propiedad se usan para tener acceso a propiedades específicas de un tipo de recurso.You use property aliases to access specific properties for a resource type. Los alias le permiten restringir los valores o condiciones que se permiten para una propiedad en un recurso.Aliases enable you to restrict what values or conditions are allowed for a property on a resource. Cada alias se asigna a las rutas de acceso en las diferentes versiones de la API para un tipo de recurso determinado.Each alias maps to paths in different API versions for a given resource type. Durante la evaluación de directivas, el motor de directiva obtiene la ruta de acceso de propiedad para esa versión de la API.During policy evaluation, the policy engine gets the property path for that API version.

La lista de alias siempre está en aumento.The list of aliases is always growing. Para descubrir qué alias son compatibles actualmente con Azure Policy, use uno de los métodos siguientes: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
    
  • CLI de 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 de REST/ARMClientREST API / ARMClient

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

Descripción del alias [*]Understanding the [*] alias

Algunos de los alias disponibles tienen una versión que aparece como un nombre "normal" y otra que tiene agregado [*] .Several of the aliases that are available have a version that appears as a 'normal' name and another that has [*] attached to it. Por ejemplo:For example:

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

El alias "normal" representa el campo como un valor único.The 'normal' alias represents the field as a single value. Este campo se utiliza en escenarios de comparación de coincidencia exacta, cuando todo el conjunto de valores debe ser exactamente como se define, nada más y nada menos.This field is for exact match comparison scenarios when the entire set of values must be exactly as defined, no more and no less.

El alias [*] hace posible comparar con el valor de cada elemento de la matriz y las propiedades específicas de cada elemento.The [*] alias makes it possible to compare against the value of each element in the array and specific properties of each element. Este enfoque permite comparar propiedades de elementos para escenarios del tipo "si ninguno de", "si alguno de" o "si todos los de".This approach makes it possible to compare element properties for 'if none of', 'if any of', or 'if all of' scenarios. Con ipRules[*] , un ejemplo sería validar que cada acción es Denegar, pero no preocuparse por cuántas reglas existen o cuál es el valor de la dirección 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. Esta regla de ejemplo busca las coincidencias de ipRules[*].value con 10.0.4.1 y aplica el tipo de efecto effectType solo si no encuentra al menos una coincidencia: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')]"
    }
}

Para más información, consulte Evaluación del alias [*].For more information, see evaluating the [*] alias.

IniciativasInitiatives

Las iniciativas le permiten agrupan varias definiciones de directivas relacionadas para simplificar las asignaciones y la administración, porque se trabaja con un grupo como un elemento único.Initiatives enable you to group several related policy definitions to simplify assignments and management because you work with a group as a single item. Por ejemplo, puede agrupar las definiciones de directivas de etiquetado relacionadas en una sola iniciativa.For example, you can group related tagging policy definitions into a single initiative. En lugar de asignar individualmente cada directiva, la aplica.Rather than assigning each policy individually, you apply the initiative.

En el ejemplo siguiente se muestra cómo crear una iniciativa para controlar dos etiquetas: costCenter y productName.The following example illustrates how to create an initiative for handling two tags: costCenter and productName. Usa dos directivas integradas para aplicar el valor de etiqueta predeterminado.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"
}

Pasos siguientesNext steps