Estructura de definición de Azure PolicyAzure Policy definition structure

Azure Policy establece las convenciones de los recursos.Azure Policy establishes conventions for resources. Las definiciones de directiva describen las condiciones de cumplimiento de los recursos y qué sucederá si se cumple una condición.Policy definitions describe resource compliance conditions and the effect to take if a condition is met. Una condición compara un campo o un valor de propiedad de recurso con un valor requerido.A condition compares a resource property field or a value to a required value. Para acceder a los campos de propiedad de recurso, se usa alias.Resource property fields are accessed by using aliases. Cuando el campo de una propiedad de recurso es una matriz, se puede usar un alias de matriz especial para seleccionar valores de todos los miembros de la matriz y aplicar una condición a cada uno de ellos.When a resource property field is an array, a special array alias can be used to select values from all array members and apply a condition to each one. Más información sobre las condiciones.Learn more about conditions.

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 bien, puede exigir que todos los recursos tengan una etiqueta concreta.Or, you can require that resources have a particular tag. Los recursos secundarios heredan las asignaciones de directivas.Policy assignments are inherited by child resources. Si una asignación de directiva se aplica a un grupo de recursos, será aplicable a todos los recursos de dicho grupo de recursos.If a policy assignment is applied to a resource group, it's applicable to all the resources in that resource group.

El esquema de definición de directiva policyRule se encuentra aquí: https://schema.management.azure.com/schemas/2019-09-01/policyDefinition.jsonThe policy definition policyRule schema is found here: https://schema.management.azure.com/schemas/2019-09-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:

  • nombre para mostrardisplay name
  • descriptiondescription
  • modemode
  • metadatametadata
  • parámetrosparameters
  • 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": {
        "displayName": "Allowed locations",
        "description": "This policy enables you to restrict the locations your organization can specify when deploying resources.",
        "mode": "Indexed",
        "metadata": {
            "version": "1.0.0",
            "category": "Locations"
        },
        "parameters": {
            "allowedLocations": {
                "type": "array",
                "metadata": {
                    "description": "The list of locations that can be specified when deploying resources",
                    "strongType": "location",
                    "displayName": "Allowed locations"
                },
                "defaultValue": [ "westus2" ]
            }
        },
        "policyRule": {
            "if": {
                "not": {
                    "field": "location",
                    "in": "[parameters('allowedLocations')]"
                }
            },
            "then": {
                "effect": "deny"
            }
        }
    }
}

Los patrones y elementos integrados de Azure Policy se encuentran en Ejemplos de Azure Policy.Azure Policy built-ins and patterns are at Azure Policy samples.

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.

Nota

Durante la creación o actualización de una definición de directiva, las propiedades id, type y name se definen mediante propiedades externas al JSON y no son necesarias en el archivo JSON.During the creation or updating of a policy definition, id, type, and name are defined by properties external to the JSON and aren't necessary in the JSON file. Al capturar la definición de directiva mediante el SDK, se devuelven las propiedades id, type y name como parte del JSON, pero cada una de ellas es información de solo lectura relacionada con la definición de directiva.Fetching the policy definition via SDK returns the id, type, and name properties as part of the JSON, but each are read-only information related to the policy definition.

TipoType

Aunque no se puede establecer la propiedad type, hay tres valores que devuelve el SDK y que son visibles en el portal:While the type property can't be set, there are three values that are returned by SDK and visible in the portal:

  • Builtin: Microsoft proporciona y mantiene estas definiciones de directiva.Builtin: These policy definitions are provided and maintained by Microsoft.
  • Custom: todas las definiciones de directiva creadas por los clientes tienen este valor.Custom: All policy definitions created by customers have this value.
  • Static: indica una definición de directiva Cumplimiento normativo con Propiedad de Microsoft.Static: Indicates a Regulatory Compliance policy definition with Microsoft Ownership. Los resultados de cumplimiento de estas definiciones de directiva son los resultados de las auditorías de terceros en la infraestructura de Microsoft.The compliance results for these policy definitions are the results of third-party audits on Microsoft infrastructure. En Azure Portal, este valor se muestra a veces como Administrado por Microsoft.In the Azure portal, this value is sometimes displayed as Microsoft managed. Para más información, consulte Responsabilidad compartida en la nube.For more information, see Shared responsibility in the cloud.

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 evalúan para una definición de directiva.The mode determines which resource types are evaluated for a policy definition. Los modos admitidos son:The supported modes are:

  • all: evalúe los grupos de recursos, las suscripciones y todos los tipos de recursoall: evaluate resource groups, subscriptions, 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

Por ejemplo, en un recurso, Microsoft.Network/routeTables admite etiquetas y ubicación, y se evalúa en ambos modos.For example, resource Microsoft.Network/routeTables supports tags and location and is evaluated in both modes. Sin embargo, Microsoft.Network/routeTables/routes no se puede etiquetar y no se evalúa en el modo Indexed.However, resource Microsoft.Network/routeTables/routes can't be tagged and isn't evaluated in Indexed mode.

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 y las suscripciones.The exception is resource groups and subscriptions. Las directivas que aplican la ubicación o etiquetas en un grupo de recursos o suscripción deben establecer mode en all y tener como destino específico el tipo Microsoft.Resources/subscriptions/resourceGroups o Microsoft.Resources/subscriptions.Policy definitions that enforce location or tags on a resource group or subscription should set mode to all and specifically target the Microsoft.Resources/subscriptions/resourceGroups or Microsoft.Resources/subscriptions type. Para obtener un ejemplo, consulte Patrón: Etiquetas: ejemplo n.º 1.For an example, see Pattern: Tags - Sample #1. 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 recursosResource Provider modes

El siguiente modo del proveedor de recursos es totalmente compatible:The following Resource Provider mode is fully supported:

  • Microsoft.Kubernetes.Data para administrar los clústeres de Kubernetes en o fuera de Azure.Microsoft.Kubernetes.Data for managing your Kubernetes clusters on or off Azure. Las definiciones que utilizan este modo del proveedor de recursos usan los efectos auditoría, denegar y deshabilitado.Definitions using this Resource Provider mode use effects audit, deny, and disabled. El uso del efecto EnforceOPAConstraint está en desuso.Use of the EnforceOPAConstraint effect is deprecated.

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

Nota

Los modos del proveedor de recursos solo admiten definiciones de directivas integradas y no admiten exenciones.Resource Provider modes only support built-in policy definitions and don't support exemptions.

MetadatosMetadata

La propiedad metadata opcional almacena información acerca de la definición de la directiva.The optional metadata property stores information about the policy definition. Los clientes pueden definir las propiedades y los valores útiles para su organización en metadata.Customers can define any properties and values useful to their organization in metadata. Aun así, hay algunas propiedades comunes que se usan en Azure Policy y los elementos integrados. Cada propiedad metadata tiene un límite de 1024 caracteres.However, there are some common properties used by Azure Policy and in built-ins. Each metadata property has a limit of 1024 characters.

Propiedades de metadatos comunesCommon metadata properties

  • version (cadena): realiza el seguimiento de los detalles sobre la versión del contenido de una definición de directiva.version (string): Tracks details about the version of the contents of a policy definition.
  • category (cadena): determina en qué categoría de Azure Portal se muestra la definición de directiva.category (string): Determines under which category in Azure portal the policy definition is displayed.
  • preview (booleano): marca true o false si la definición de directiva es versión preliminar.preview (boolean): True or false flag for if the policy definition is preview.
  • deprecated (booleano): marca true o false si la definición de directiva está marcada como en desuso.deprecated (boolean): True or false flag for if the policy definition has been marked as deprecated.

Nota

El servicio Azure Policy usa las propiedades version, preview y deprecated para transmitir el nivel de cambio a una definición o iniciativa de directiva integradas y el estado.The Azure Policy service uses version, preview, and deprecated properties to convey level of change to a built-in policy definition or initiative and state. El formato de version es: {Major}.{Minor}.{Patch}.The format of version is: {Major}.{Minor}.{Patch}. Determinados estados, como en desuso o versión preliminar, están anexados a la propiedad version o están en otra propiedad como booleano.Specific states, such as deprecated or preview, are appended to the version property or in another property as a boolean. Para obtener más información sobre la forma en que Azure Policy crea versiones los elementos integrados, vea Control de versiones integradas.For more information about the way Azure Policy versions built-ins, see Built-in versioning.

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's 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. Las comparaciones de valores permitidas distinguen mayúsculas de minúsculas.Allowed value comparisons are case-sensitive.

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. strongType puede ser un tipo de recurso compatible o un valor permitido.strongType can be a supported resource type or an allowed value. Para determinar si un tipo de recurso es válido para strongType, use Get-AzResourceProvider.To determine if a resource type is valid for strongType, use Get-AzResourceProvider. El formato de un tipo de recurso strongType es <Resource Provider>/<Resource Type>.The format for a resource type strongType is <Resource Provider>/<Resource Type>. Por ejemplo, Microsoft.Network/virtualNetworks/subnets.For example, Microsoft.Network/virtualNetworks/subnets.

Se admiten algunos tipos de recursos no devueltos por Get-AzResourceProvider.Some resource types not returned by Get-AzResourceProvider are supported. Estos tipos son:Those types are:

  • Microsoft.RecoveryServices/vaults/backupPolicies

Los valores admitidos para strongType que no son tipo de recurso son:The non resource type allowed values for strongType are:

  • location
  • resourceTypes
  • storageSkus
  • vmSKUs
  • existingResourceGroups

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:

  • Suscripción: la definición de la directiva solo se puede asignar a los recursos incluidos dentro de esa suscripción.Subscription - Only resources within that subscription can be assigned the policy definition.
  • Grupo de administración: la definición de la directiva solo se puede asignar a los recursos incluidos 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 definition. Si planea aplicar la definición de directiva a varias suscripciones, la ubicación debe ser un grupo de administración que contenga cada una de las suscripciones.If you plan to apply the policy definition to several subscriptions, the location must be a management group that contains each subscription.

Para obtener más información, vea Descripción del ámbito de Azure Policy.For more information, see Understand scope in Azure Policy.

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 | modify | 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 cumple determinados criterios.A condition evaluates whether a value 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": "dateValue" | "less": "stringValue" | "less": intValue
  • "lessOrEquals": "dateValue" | "lessOrEquals": "stringValue" | "lessOrEquals": intValue
  • "greater": "dateValue" | "greater": "stringValue" | "greater": intValue
  • "greaterOrEquals": "dateValue" | "greaterOrEquals": "stringValue" | "greaterOrEquals": intValue"greaterOrEquals": "dateValue" | "greaterOrEquals": "stringValue" | "greaterOrEquals": intValue
  • "exists": "bool"

Para less, lessOrEquals, greater y greaterOrEquals, si el tipo de propiedad no coincide con el tipo de condición, se produce un error.For less, lessOrEquals, greater, and greaterOrEquals, if the property type doesn't match the condition type, an error is thrown. La comparación de cadenas se realiza con InvariantCultureIgnoreCase.String comparisons are made using InvariantCultureIgnoreCase.

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. Mientras que match y notMatch distinguen mayúsculas de minúsculas, el resto de las condiciones que evalúan un elemento stringValue no lo hacen.While match and notMatch are case-sensitive, all other conditions that evaluate a stringValue are case-insensitive. 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.

CamposFields

Las condiciones que evalúan si los valores de las propiedades de la carga de solicitudes de recursos cumplen determinados criterios se pueden formar usando una expresión field.Conditions that evaluate whether the values of properties in the resource request payload meet certain criteria can be formed using a field expression. 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
    • Los campos de ubicación se normalizan para admitir varios formatos.Location fields are normalized to support various formats. Por ejemplo, East US 2 se considera igual que eastus2.For example, East US 2 is considered equal to eastus2.
    • Use global para los recursos que son independientes de la ubicación.Use global for resources that are location agnostic.
  • id
    • Devuelve el id. del recurso que se está evaluando.Returns the resource ID of the resource that is being evaluated.
    • Ejemplo: /subscriptions/06be863d-0996-4d56-be22-384767287aa2/resourceGroups/myRG/providers/Microsoft.KeyVault/vaults/myVaultExample: /subscriptions/06be863d-0996-4d56-be22-384767287aa2/resourceGroups/myRG/providers/Microsoft.KeyVault/vaults/myVault
  • 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 de la que se va a 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 de la que se va a 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.

Nota

En las expresiones field que hacen referencia a [*] alias, cada elemento de la matriz se evalúa de forma individual con el operador and lógico entre elementos.In field expressions referring to [*] alias, each element in the array is evaluated individually with logical and between elements. Para obtener más información, consulte Referencia a las propiedades de recursos de matriz.For more information, see Referencing array resource properties.

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/4a9ae827-6dc8-4573-8ac7-8239d42aa03f"
            ]
        }
    }
}

ValueValue

Las condiciones que evalúan si un valor cumple determinados criterios se pueden formar utilizando una expresión value.Conditions that evaluate whether a value meets certain criteria can be formed using a value expression. Los valores pueden ser literales, los valores de parámetros o los valores devueltos de cualquier función de plantilla compatible.Values can be literals, the values of parameters, or the returned values of any supported template functions.

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. Use enforcementMode de DoNotEnforce para evitar el efecto de una evaluación con errores en los recursos nuevos o actualizados mientras se prueba y valida una nueva definición de directiva.Use enforcementMode of DoNotEnforce to prevent impact of a failed evaluation on new or updated resources while testing and validating a new policy definition.

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.

CountCount

Las condiciones que cuentan el número de miembros de una matriz que cumplen determinados criterios se pueden formar usando una expresión count.Conditions that count how many members of an array meet certain criteria can be formed using a count expression. Algunos escenarios comunes consisten en comprobar si "al menos uno de", "exactamente uno de", "todos" o "ninguno de" los miembros de la matriz satisfacen la condición.Common scenarios are checking whether 'at least one of', 'exactly one of', 'all of', or 'none of' the array members satisfy a condition. count evalúa una expresión de condición en cada miembro de la matriz y suma los resultados que son true para luego compararlos con el operador de la expresión.Count evaluates each array member for a condition expression and sums the true results, which is then compared to the expression operator.

Field countField count

Cuente el número de miembros de una matriz de la carga de solicitudes que satisfacen una expresión de condición.Count how many members of an array in the request payload satisfy a condition expression. La estructura de la expresión field count es la siguiente:The structure of field count expressions is:

{
    "count": {
        "field": "<[*] alias>",
        "where": {
            /* condition expression */
        }
    },
    "<condition>": "<compare the count of true condition expression array members to this value>"
}

Las siguientes propiedades se utilizan con field count:The following properties are used with field count:

  • count.field (requerido): Contiene la ruta de acceso a la matriz y debe ser un alias de matriz.count.field (required): Contains the path to the array and must be an array alias.
  • count.where (opcional): la expresión de condición para evaluar de forma individual cada miembro de matriz de [* alias] de count.field.count.where (optional): The condition expression to individually evaluate for each [*] alias array member of count.field. Si no se proporciona esta propiedad, todos los miembros de la matriz con la ruta de acceso "field" se evalúan como true.If this property isn't provided, all array members with the path of 'field' are evaluated to true. En esta propiedad se puede usar cualquier condición.Any condition can be used inside this property. Los operadores lógicos pueden usarse dentro de esta propiedad para crear requisitos de evaluación complejos.Logical operators can be used inside this property to create complex evaluation requirements.
  • <condition> (obligatorio): El valor se compara con el número de elementos que cumplieron la expresión de condición count.where.<condition> (required): The value is compared to the number of items that met the count.where condition expression. Se debe usar una condición numérica.A numeric condition should be used.

Las expresiones field count pueden enumerar la misma matriz de campos hasta tres veces en una sola definición de policyRule.Field count expressions can enumerate the same field array up to three times in a single policyRule definition.

Para más información sobre cómo trabajar con propiedades de matrices en Azure Policy, incluida una explicación detallada sobre cómo se evalúa la expresión field count, consulte Referencia a las propiedades de recursos de matriz.For more details on how to work with array properties in Azure Policy, including detailed explanation on how the field count expression is evaluated, see Referencing array resource properties.

Value countValue count

Cuente el número de miembros de una matriz que satisfacen una condición.Count how many members of an array satisfy a condition. La matriz puede ser una matriz de literales o una referencia a un parámetro de matriz.The array can be a literal array or a reference to array parameter. La estructura de la expresión value count es la siguiente:The structure of value count expressions is:

{
    "count": {
        "value": "<literal array | array parameter reference>",
        "name": "<index name>",
        "where": {
            /* condition expression */
        }
    },
    "<condition>": "<compare the count of true condition expression array members to this value>"
}

Las siguientes propiedades se utilizan con value count:The following properties are used with value count:

  • count.value (requerido): la matriz que se va a evaluar.count.value (required): The array to evaluate.
  • count.name (requerido): el nombre del índice, compuesto por letras y dígitos en inglés.count.name (required): The index name, composed of English letters and digits. Define un nombre para el valor del miembro de la matriz evaluado en la iteración actual.Defines a name for the value of the array member evaluated in the current iteration. El nombre se usa para hacer referencia al valor actual dentro de la condición count.where.The name is used for referencing the current value inside the count.where condition. Opcional cuando la expresión count no está en un elemento secundario de otra expresión count.Optional when the count expression isn't in a child of another count expression. Cuando no se proporciona, el nombre del índice se establece implícitamente en "default".When not provided, the index name is implicitly set to "default".
  • count.where (opcional): la expresión de condición para evaluar de forma individual cada miembro de la matriz de count.value.count.where (optional): The condition expression to individually evaluate for each array member of count.value. Si no se proporciona esta propiedad, todos los miembros de la matriz se evalúan como true.If this property isn't provided, all array members are evaluated to true. En esta propiedad se puede usar cualquier condición.Any condition can be used inside this property. Los operadores lógicos pueden usarse dentro de esta propiedad para crear requisitos de evaluación complejos.Logical operators can be used inside this property to create complex evaluation requirements. Se puede acceder al valor del miembro de la matriz enumerado actualmente mediante la llamada a la función current.The value of the currently enumerated array member can be accessed by calling the current function.
  • <condition> (obligatorio): El valor se compara con el número de elementos que cumplieron la expresión de condición count.where.<condition> (required): The value is compared to the number of items that met the count.where condition expression. Se debe usar una condición numérica.A numeric condition should be used.

Se aplican los límites siguientes:The following limits are enforced:

  • Se pueden usar hasta 10 expresiones value count en una única definición de policyRule.Up to 10 value count expressions can be used in a single policyRule definition.
  • Cada expresión value count puede realizar hasta 100 iteraciones.Each value count expression can perform up to 100 iterations. Este número incluye el número de iteraciones realizadas por cualquier expresión value count principal.This number includes the number of iterations performed by any parent value count expressions.

Función currentThe current function

La función current() solo está disponible dentro de la condición count.where.The current() function is only available inside the count.where condition. Esta función devuelve el valor del miembro de la matriz que está enumerado actualmente en la evaluación de la expresión count.It returns the value of the array member that is currently enumerated by the count expression evaluation.

Uso de value countValue count usage

  • current(<index name defined in count.name>).current(<index name defined in count.name>). Por ejemplo: current('arrayMember').For example: current('arrayMember').
  • current().current(). Solo se permite cuando la expresión value count no es un elemento secundario de otra expresión count.Allowed only when the value count expression isn't a child of another count expression. Devuelve el mismo valor que antes.Returns the same value as above.

Si el valor devuelto por la llamada es un objeto, se admiten los descriptores de acceso de propiedad.If the value returned by the call is an object, property accessors are supported. Por ejemplo: current('objectArrayMember').property.For example: current('objectArrayMember').property.

Uso de field countField count usage

  • current(<the array alias defined in count.field>).current(<the array alias defined in count.field>). Por ejemplo, current('Microsoft.Test/resource/enumeratedArray[*]').For example, current('Microsoft.Test/resource/enumeratedArray[*]').
  • current().current(). Solo se permite cuando la expresión field count no es un elemento secundario de otra expresión count.Allowed only when the field count expression isn't a child of another count expression. Devuelve el mismo valor que antes.Returns the same value as above.
  • current(<alias of a property of the array member>).current(<alias of a property of the array member>). Por ejemplo, current('Microsoft.Test/resource/enumeratedArray[*].property').For example, current('Microsoft.Test/resource/enumeratedArray[*].property').

Ejemplos de field countField count examples

Ejemplo 1: Comprobar si una matriz está vacíaExample 1: Check if an array is empty

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

Ejemplo 2: Comprobar si solo un miembro de la matriz cumple la expresión de condiciónExample 2: Check for only one array member to meet the condition expression

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

Ejemplo 3: Comprobar si por lo menos un miembro de la matriz cumple la expresión de condiciónExample 3: Check for at least one array member to meet the condition expression

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

Ejemplo 4: Comprobar si todos los miembros de la matriz del objeto cumplen la expresión de condiciónExample 4: Check that all object array members meet the condition expression

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

Ejemplo 5: Comprobar si al menos un miembro de la matriz coincide con varias propiedades de la expresión de condiciónExample 5: Check that at least one array member matches multiple properties in the condition expression

{
    "count": {
        "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
        "where": {
            "allOf": [
                {
                    "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].direction",
                    "equals": "Inbound"
                },
                {
                    "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].access",
                    "equals": "Allow"
                },
                {
                    "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].destinationPortRange",
                    "equals": "3389"
                }
            ]
        }
    },
    "greater": 0
}

Ejemplo 6: Use la función current() dentro de las condiciones where para acceder al valor del miembro de la matriz actualmente enumerado en una función de plantilla.Example 6: Use current() function inside the where conditions to access the value of the currently enumerated array member in a template function. Esta condición comprueba si una red virtual contiene un prefijo de dirección que no está en el intervalo de CIDR 10.0.0.0/24.This condition checks whether a virtual network contains an address prefix that isn't under the 10.0.0.0/24 CIDR range.

{
    "count": {
        "field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]",
        "where": {
          "value": "[ipRangeContains('10.0.0.0/24', current('Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]'))]",
          "equals": false
        }
    },
    "greater": 0
}

Ejemplo 7: Use la función field() dentro de las condiciones where para acceder al valor del miembro de la matriz actualmente enumerado.Example 7: Use field() function inside the where conditions to access the value of the currently enumerated array member. Esta condición comprueba si una red virtual contiene un prefijo de dirección que no está en el intervalo de CIDR 10.0.0.0/24.This condition checks whether a virtual network contains an address prefix that isn't under the 10.0.0.0/24 CIDR range.

{
    "count": {
        "field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]",
        "where": {
          "value": "[ipRangeContains('10.0.0.0/24', first(field(('Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]')))]",
          "equals": false
        }
    },
    "greater": 0
}

Ejemplos de value countValue count examples

Ejemplo 1: Compruebe si el nombre de un recurso coincide con alguno de los patrones de nombre especificados.Example 1: Check if resource name matches any of the given name patterns.

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

Ejemplo 2: Compruebe si el nombre de un recurso coincide con alguno de los patrones de nombre especificados.Example 2: Check if resource name matches any of the given name patterns. La función current() no especifica un nombre de índice.The current() function doesn't specify an index name. El resultado es el mismo que el del ejemplo anterior.The outcome is the same as the previous example.

{
    "count": {
        "value": [ "prefix1_*", "prefix2_*" ],
        "where": {
            "field": "name",
            "like": "[current()]"
        }
    },
    "greater": 0
}

Ejemplo 3: Compruebe si el nombre de un recurso coincide con alguno de los patrones de nombre proporcionados por un parámetro de matriz.Example 3: Check if resource name matches any of the given name patterns provided by an array parameter.

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

Ejemplo 4: Compruebe si alguno de los prefijos de dirección de red virtual no está en la lista de prefijos aprobados.Example 4: Check if any of the virtual network address prefixes isn't under the list of approved prefixes.

{
    "count": {
        "field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]",
        "where": {
            "count": {
                "value": "[parameters('approvedPrefixes')]",
                "name": "approvedPrefix",
                "where": {
                    "value": "[ipRangeContains(current('approvedPrefix'), current('Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]'))]",
                    "equals": true
                },
            },
            "equals": 0
        }
    },
    "greater": 0
}

Ejemplo 5: Compruebe que todas las reglas del grupo de seguridad de red reservadas están definidas en un grupo de seguridad de red.Example 5: Check that all the reserved NSG rules are defined in an NSG. Las propiedades de las reglas de grupo de seguridad de red reservadas se definen en un parámetro de matriz que contiene objetos.The properties of the reserved NSG rules are defined in an array parameter containing objects.

Valor del parámetro:Parameter value:

[
    {
        "priority": 101,
        "access": "deny",
        "direction": "inbound",
        "destinationPortRange": 22
    },
    {
        "priority": 102,
        "access": "deny",
        "direction": "inbound",
        "destinationPortRange": 3389
    }
]

Directiva:Policy:

{
    "count": {
        "value": "[parameters('reservedNsgRules')]",
        "name": "reservedNsgRule",
        "where": {
            "count": {
                "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
                "where": {
                    "allOf": [
                        {
                            "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].priority",
                            "equals": "[current('reservedNsgRule').priority]"
                        },
                        {
                            "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].access",
                            "equals": "[current('reservedNsgRule').access]"
                        },
                        {
                            "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].direction",
                            "equals": "[current('reservedNsgRule').direction]"
                        },
                        {
                            "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].destinationPortRange",
                            "equals": "[current('reservedNsgRule').destinationPortRange]"
                        }
                    ]
                }
            },
            "equals": 1
        }
    },
    "equals": "[length(parameters('reservedNsgRules'))]"
}

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
  • Modify: agrega, actualiza o quita las etiquetas definidas de un recurso o suscripción.Modify: adds, updates, or removes the defined tags from a resource or subscription
  • EnforceOPAConstraint (en desuso): configura el controlador de admisiones Open Policy Agent con Gatekeeper v3 para clústeres de Kubernetes autoadministrados en Azure.EnforceOPAConstraint (deprecated): configures the Open Policy Agent admissions controller with Gatekeeper v3 for self-managed Kubernetes clusters on Azure
  • EnforceRegoPolicy (en desuso): configura el controlador de admisiones Open Policy Agent con Gatekeeper v2 en Azure Kubernetes Service.EnforceRegoPolicy (deprecated): configures the Open Policy Agent admissions controller with Gatekeeper v2 in Azure Kubernetes Service

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()

Nota

Estas funciones siguen estando disponibles en la parte details.deployment.properties.template de la implementación de la plantilla en una definición de directiva deployIfNotExists.These functions are still available within the details.deployment.properties.template portion of the template deployment in a deployIfNotExists policy definition.

La siguiente función está disponible para su uso en una regla de directivas, pero difieren del uso en una plantilla de Azure Resource Manager (Plantilla de ARM):The following function is available to use in a policy rule, but differs from use in an Azure Resource Manager template (ARM template):

  • utcNow(): a diferencia de una plantilla de ARM, esta propiedad se puede usar con un valor distinto a defaultValue.utcNow() - Unlike an ARM template, this property can be used outside defaultValue.
    • Devuelve una cadena que se establece en la fecha y hora actuales en formato DateTime 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.

Las siguientes funciones solo están disponibles en las reglas de directiva:The following functions are only available in policy rules:

  • 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
  • field(fieldName)

    • fieldName: [obligatorio] cadena. Es el nombre del campo que se va a recuperar.fieldName: [Required] string - Name of the field to retrieve
    • Devuelve el valor de ese campo del recurso que se va a evaluar con la condición If.Returns the value of that field from the resource that is being evaluated by the If condition.
    • 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.
  • requestContext().apiVersion

    • Devuelve la versión de la API de la solicitud que desencadenó la evaluación de la directiva (por ejemplo: 2019-09-01).Returns the API version of the request that triggered policy evaluation (example: 2019-09-01). Este valor es la versión de API que se usó en la solicitud PUT/PATCH para las evaluaciones de la creación o actualización de recursos.This value is the API version that was used in the PUT/PATCH request for evaluations on resource creation/update. La versión más reciente de la API siempre se usa durante la evaluación del cumplimiento de los recursos existentes.The latest API version is always used during compliance evaluation on existing resources.
  • policy()

    • Devuelve la siguiente información acerca de la directiva que se está evaluando.Returns the following information about the policy that is being evaluated. Es posible acceder a las propiedades desde el objeto devuelto (ejemplo: [policy().assignmentId]).Properties can be accessed from the returned object (example: [policy().assignmentId]).
    {
      "assignmentId": "/subscriptions/ad404ddd-36a5-4ea8-b3e3-681e77487a63/providers/Microsoft.Authorization/policyAssignments/myAssignment",
      "definitionId": "/providers/Microsoft.Authorization/policyDefinitions/34c877ad-507e-4c82-993e-3452a6e0ad3c",
      "setDefinitionId": "/providers/Microsoft.Authorization/policySetDefinitions/42a694ed-f65e-42b2-aa9e-8052e9740a92",
      "definitionReferenceId": "StorageAccountNetworkACLs"
    }
    
  • ipRangeContains(range, targetRange)

    • range: cadena [obligatoria]. Cadena que especifica un intervalo de direcciones IP.range: [Required] string - String specifying a range of IP addresses.
    • targetRange: cadena [obligatoria]. Cadena que especifica un intervalo de direcciones IP.targetRange: [Required] string - String specifying a range of IP addresses.

    Devuelve si el intervalo de direcciones IP especificado contiene el intervalo de direcciones IP de destino.Returns whether the given IP address range contains the target IP address range. No se permiten rangos vacíos ni mezclas entre familias de direcciones IP, lo que genera un error en la evaluación.Empty ranges, or mixing between IP families isn't allowed and results in evaluation failure.

    Formatos compatibles:Supported formats:

    • Dirección IP única (ejemplos: 10.0.0.0, 2001:0DB8::3:FFFE)Single IP address (examples: 10.0.0.0, 2001:0DB8::3:FFFE)
    • Intervalo de CIDR (ejemplos: 10.0.0.0/24, 2001:0DB8::/110)CIDR range (examples: 10.0.0.0/24, 2001:0DB8::/110)
    • Intervalo definido por direcciones IP de inicio y final (ejemplos: 192.168.0.1-192.168.0.9, 2001:0DB8::-2001:0DB8::3:FFFF)Range defined by start and end IP addresses (examples: 192.168.0.1-192.168.0.9, 2001:0DB8::-2001:0DB8::3:FFFF)
  • current(indexName)

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:

  • Extensión de Azure Policy para Visual Studio Code (recomendado)Azure Policy extension for Visual Studio Code (recommended)

    Use la extensión de Azure Policy para Visual Studio Code a fin de ver y detectar alias para las propiedades de recursos.Use the Azure Policy extension for Visual Studio Code to view and discover aliases for resource properties.

    Captura de pantalla de la extensión Azure Policy para Visual Studio Code al mantener el puntero sobre una propiedad para mostrar los nombres de alias.

  • 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
    

    Nota

    Para buscar alias que se puedan usar con el efecto modificar, use el siguiente comando en Azure PowerShell 4.6.0 o superior:To find aliases that can be used with the modify effect, use the following command in Azure PowerShell 4.6.0 or higher:

    Get-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' }
    
  • 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"
    
  • API de REST/ARMClientREST API / ARMClient

    GET https://management.azure.com/providers/?api-version=2019-10-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 [*] representa una colección de valores seleccionados de los elementos de una propiedad de recurso de matriz.The [*] alias represents a collection of values selected from the elements of an array resource property. Por ejemplo:For example:

AliasAlias Valores seleccionadosSelected values
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] Los elementos de la matriz ipRules.The elements of the ipRules array.
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action Los valores de la propiedad action de cada elemento de la matriz ipRules.The values of the action property from each element of the ipRules array.

Cuando se usan en una condición de campo, los alias de matriz permiten comparar cada elemento individual de la matriz con un valor de destino.When used in a field condition, array aliases make it possible to compare each individual array element to a target value. Cuando se usan con la expresión count, se pueden realizar las siguientes comprobaciones:When used with count expression, it's possible to:

  • Comprobar el tamaño de una matrizCheck the size of an array
  • Comprobar si todos, alguno o ninguno de los elementos de la matriz cumple una condición complejaCheck if all\any\none of the array elements meet a complex condition
  • Comprobar si exactamente n elementos de la matriz cumplen una condición complejaCheck if exactly n array elements meet a complex condition

Para obtener más información y acceder a ejemplos, consulte Referencia a las propiedades de recursos de matriz.For more information and examples, see Referencing array resource properties.

Pasos siguientesNext steps