Sintaxis y formato de las condiciones de asignación de roles de Azure

Una condición es una comprobación adicional que puede agregar opcionalmente a la asignación de roles para proporcionar un control de acceso más preciso. Por ejemplo, puede agregar una condición que requiera que un objeto tenga una etiqueta específica para leer el objeto. En este artículo se describen el formato y la sintaxis de las condiciones de asignación de roles.

Formato de condición

Para comprender mejor las condiciones de asignación de roles, examine el formato.

Condición simple

La condición más básica consta de una acción de destino y una expresión. Una acción es una operación que un usuario puede realizar en un tipo de recurso. Una expresión es una instrucción que se evalúa como verdadera o falsa, que determina si se permite realizar la acción.

A continuación, se muestra el formato de una condición simple.

Formato de una condición simple con una sola acción y una sola expresión.

(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
    )
)

La siguiente condición tiene una acción de "Leer un blob". La expresión comprueba si el nombre del contenedor es blobs-example-container.

(
    (
        !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
    )
    OR 
    (
        @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name]
        StringEquals 'blobs-example-container'
    )
)

Diagrama que muestra el acceso de lectura a blobs con un nombre de contenedor determinado.

Cómo se evalúa una condición

Si un usuario intenta realizar una acción en la asignación de roles que no es <action>, !(ActionMatches) se evalúa como verdadera y la condición general se evalúa como verdadera para permitir que se realice la acción.

Si un usuario intenta realizar <action> en la asignación de roles, !(ActionMatches) se evalúa como falsa, por lo que se evalúa la expresión. Si la expresión se evalúa como verdadera, la condición general se evalúa como verdadera para permitir que se realice <action>. De lo contrario, no se permite realizar <action>.

El pseudocódigo siguiente muestra otra manera de leer esta condición.

if a user tries to perform an action in the role assignment that does not match <action>
{
    Allow action to be performed
}
else
{
    if <attribute> <operator> <value> is true
    {
        Allow <action> to be performed
    }
    else
    {
        Do not allow <action> to be performed
    }
}

Suboperaciones

Algunas acciones tienen suboperaciones. Por ejemplo, la acción de datos Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read tiene la suboperación "Mostrar blobs". Las condiciones con suboperaciones tienen el formato siguiente.

Formato de una acción con una suboperación.

(
    (
        !(ActionMatches{'<action>'}
        AND
        SubOperationMatches{'<subOperation>'})

    )
    OR
    (
        <attribute> <operator> <value>
    )
)

Varias acciones

Una condición puede incluir varias acciones que quiere permitir si la condición es verdadera. Si selecciona varias acciones para una sola condición, puede que haya menos atributos para elegir para la condición, ya que los atributos deben estar disponibles en las acciones seleccionadas.

Formato de varias acciones que se pueden permitir si la condición es verdadera.

(
    (
        !(ActionMatches{'<action>'})
        AND
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
    )
)

Varias expresiones

Una condición puede incluir varias expresiones. Según el operador, los atributos se pueden comprobar con varios valores.

Formato para varias expresiones mediante operadores booleanos y varios valores.

(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
        AND | OR
        <attribute> <operator> {<value>, <value>, <value>}
        AND | OR
        <attribute> <operator> <value>
    )
)

Varias condiciones

También puede combinar condiciones para dirigirse a varias acciones.

Formato para varias condiciones mediante operadores booleanos.

(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
        AND | OR
        <attribute> <operator> {<value>, <value>, <value>}
        AND | OR
        <attribute> <operator> <value>
    )
)
AND
(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
        AND | OR
        <attribute> <operator> <value>
    )
)

Sintaxis de condición

A continuación, se muestra la sintaxis de una condición de asignación de roles.

(
    (
        !(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
        AND
        !(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
        AND
        ...
    )
    OR
    (
        <attribute> <operator> {<value, <value>, ...}
        AND | OR
        <attribute> <operator> {<value>, <value>, ...}
        AND | OR
        ...
    )
)
AND
(
    (
        !(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
        AND
        !(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
        AND
        ...
    )
    OR
    (
        <attribute> <operator> {<value, <value>, ...}
        AND | OR
        <attribute> <operator> {<value>, <value>, ...}
        AND | OR
        ...
    )
)
AND
...

Acciones

Actualmente, se pueden agregar condiciones a asignaciones de roles integradas o personalizadas que tienen acciones de datos de Blob Storage o Queue Storage. Entre estas se incluyen los siguientes roles integrados:

Para obtener una lista de las acciones de almacenamiento que puede usar en condiciones, consulte:

Atributos

En función de las acciones seleccionadas, el atributo puede encontrarse en distintos lugares. Si selecciona varias acciones para una sola condición, puede que haya menos atributos por elegir para la condición, ya que los atributos deben estar disponibles en todas las acciones seleccionadas. Para especificar un atributo, debe incluir el origen como prefijo.

Origen del atributo Descripción Código
Entorno El atributo está asociado al entorno de la solicitud, como el origen de red de la solicitud o la fecha y hora actuales.
@Environment
Principal El atributo es un atributo de seguridad personalizado asignado a la entidad de seguridad, como un usuario o una aplicación empresarial (entidad de servicio). @Principal
Solicitar El atributo forma parte de la solicitud de acción, como establecer la etiqueta de índice de blobs. @Request
Recurso El atributo es una propiedad del recurso, como un nombre de contenedor. @Resource

Para obtener una lista completa de los atributos de almacenamiento que puede usar en condiciones, consulte:

Atributos de entorno

Los atributos de entorno están asociados a las circunstancias en las que se realiza la solicitud de acceso, como la fecha y hora del día o el entorno de red. El entorno de red puede ser si el acceso se realiza a través de un punto de conexión privado específico o una subred de red virtual, o quizás a través de cualquier vínculo privado.

En la tabla siguiente se enumeran los atributos de entorno admitidos para las condiciones.

Nombre para mostrar Descripción Attribute Tipo
Es un vínculo privado1 Use este atributo en condiciones para requerir acceso a través de cualquier vínculo privado. isPrivateLink Boolean
Punto de conexión privado1,2 Use este atributo en condiciones para restringir el acceso a través de un punto de conexión privado específico. Microsoft.Network/privateEndpoints String
Subred1,3 Use este atributo en condiciones para restringir el acceso desde una subred específica. Microsoft.Network/virtualNetworks/subnets String
UTC ahora Use este atributo en condiciones para restringir el acceso a objetos durante períodos de tiempo específicos. UtcNow DateTime

1 Para las operaciones de copia, los atributos Is private link, Private endpointy Subnet solo se aplican al destino, como una cuenta de almacenamiento, no al origen. Para obtener más información sobre las operaciones de copia a las que se aplica, seleccione cada atributo de la tabla para ver más detalles.
2 Solo puede usar el atributo Private endpoint si actualmente tiene al menos un punto de conexión privado configurado en la suscripción.
3 Solo puede usar el atributo Subnet si actualmente tiene al menos una subred de red virtual mediante puntos de conexión de servicio configurados en la suscripción.

Atributos de entidad de seguridad

Los atributos de entidad de seguridad son atributos de seguridad personalizados asignados a la entidad de seguridad que solicita acceso a un recurso. La entidad de seguridad puede ser un usuario o una aplicación empresarial (entidad de servicio).

Para usar atributos principales, debe tener lo siguiente:

  • Permisos de Microsoft Entra para el usuario que ha iniciado sesión, como el rol Administrador de asignación de atributos
  • Atributos de seguridad personalizados definidos en el identificador de Entra de Microsoft

Para obtener más información sobre atributos de seguridad personalizados, consulte:

Atributos de solicitud

Los atributos de solicitud están asociados a los criterios especificados en una solicitud de acceso, como el prefijo especificado de blobs que se van a enumerar.

Atributos del recurso

Los atributos de recurso están asociados con el objeto al que se solicita acceso, como el nombre de la cuenta de almacenamiento, el nombre del contenedor o si el espacio de nombres jerárquico está habilitado para la cuenta de almacenamiento.

Operadores de función

La sección siguiente se enumeran las funciones de los operadores que están disponibles para construir condiciones.

ActionMatches

Propiedad Valor
Operador ActionMatches
Descripción Comprueba si la acción actual coincide con el patrón de acción especificado.
Ejemplos ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
Si la acción que se comprueba es igual a «Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read», entonces es verdadera

ActionMatches{'Microsoft.Authorization/roleAssignments/*'}
Si la acción que se comprueba es igual a "Microsoft.Authorization/roleAssignments/write", entonces es verdadera

ActionMatches{'Microsoft.Authorization/roleDefinitions/*'}
Si la acción que se comprueba es igual a "Microsoft.Authorization/roleAssignments/write", entonces es verdadera

SubOperationMatches

Propiedad Valor
Operador SubOperationMatches
Descripción Comprueba si la suboperación actual coincide con el patrón de suboperación especificado.
Ejemplos SubOperationMatches{'Blob.List'}

Exists

Propiedad Valor
Operador Exists
Descripción Comprueba si existe el atributo especificado.
Ejemplos Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:snapshot]
Compatibilidad con atributos1 Nombre del ámbito de cifrado
Instantánea
Id. de la versión

1 El operador Exists solo se admite para estos atributos en el generador de condiciones de ABAC visual en Azure Portal. Puede agregar el Exists operador a cualquier atributo mediante otras herramientas, como PowerShell, la CLI de Azure, la API RESTy el editor de código de condiciones en Azure Portal.

Operadores logicos

La sección siguiente se enumeran los operadores lógicos que están disponibles para construir condiciones.

Y

Propiedad Valor
Operadores AND
&&
Descripción Operador AND
Ejemplos !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})

Or

Propiedad Valor
Operadores OR
||
Descripción Operador OR
Ejemplos @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z' OR NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId

Not

Propiedad Valor
Operadores NOT
!
Descripción Operador NOT o de negación
Ejemplos NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId]

Operadores de comparación booleanos

La sección siguiente se enumeran los operador de comparación booleanos que están disponibles para construir condiciones.

Propiedad Valor
Operadores BoolEquals
BoolNotEquals
Descripción Comparación de valores booleanos.
Ejemplos @Resource[Microsoft.Storage/storageAccounts:isHnsEnabled] BoolEquals true

Operadores de comparación de cadena

La sección siguiente se enumeran los operador de comparación de cadena que están disponibles para construir condiciones.

StringEquals

Propiedad Valor
Operadores StringEquals
StringEqualsIgnoreCase
Descripción Coincidencia que distingue mayúsculas de minúsculas (o no distingue mayúsculas de minúsculas) Los valores deben coincidir exactamente con la cadena.
Ejemplos @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'

StringNotEquals

Propiedad Valor
Operadores StringNotEquals
StringNotEqualsIgnoreCase
Descripción Operador de negación de StringEquals (o StringEqualsIgnoreCase).

StringStartsWith

Propiedad Valor
Operadores StringStartsWith
StringStartsWithIgnoreCase
Descripción Coincidencia que distingue mayúsculas de minúsculas (o no distingue mayúsculas de minúsculas) Los valores comienzan con la cadena.

StringNotStartsWith

Propiedad Valor
Operadores StringNotStartsWith
StringNotStartsWithIgnoreCase
Descripción Operador de negación de StringStartsWith (o StringStartsWithIgnoreCase).

StringLike

Propiedad Valor
Operadores StringLike
StringLikeIgnoreCase
Descripción Coincidencia que distingue mayúsculas de minúsculas (o no distingue mayúsculas de minúsculas) Los valores pueden incluir un carácter comodín de coincidencia con varios caracteres (*) o un carácter comodín de coincidencia con un solo carácter (?) en cualquier parte de la cadena. Si es necesario, estos caracteres se pueden escapar agregando una barra diagonal inversa \* y \?.
Ejemplos @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'readonly/*'

Resource[name1] StringLike 'a*c?'
Si Resource[name1] es igual a "abcd", entonces es verdadero.

Resource[name1] StringLike 'A*C?'
Si Resource[name1] es igual a "abcd", entonces es falso.

Resource[name1] StringLike 'a*c'
Si Resource[name1] es igual a "abcd", entonces es falso.

StringNotLike

Propiedad Valor
Operadores StringNotLike
StringNotLikeIgnoreCase
Descripción Operador de negación de StringLike (o StringLikeIgnoreCase).

Operadores de comparación numéricos

La sección siguiente se enumeran los operador de comparación numéricos que están disponibles para construir condiciones.

Propiedad Valor
Operadores NumericEquals
NumericNotEquals
NumericGreaterThan
NumericGreaterThanEquals
NumericLessThan
NumericLessThanEquals
Descripción Coincidencia de números. Solo se admiten números enteros.

Operadores de comparación datetime

La sección siguiente se enumeran los operadores de comparación datetime que están disponibles para construir condiciones.

Propiedad Valor
Operadores DateTimeEquals
DateTimeNotEquals
DateTimeGreaterThan
DateTimeGreaterThanEquals
DateTimeLessThan
DateTimeLessThanEquals
Descripción Comprobación de precisión completa con el formato : yyyy-mm-ddThh:mm:ss.mmmmmmmZ. Se usa para el identificador de versión del blob, la instantánea de blobs y la hora UTC ahora.
Ejemplos @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z'

Operadores de comparación GUID

En esta sección se enumeran los operadores de comparación de identificador único global (GUID) que están disponibles para construir condiciones.

Propiedad Valor
Operadores GuidEquals
GuidNotEquals
Descripción Coincidencia sin distinción entre mayúsculas y minúsculas con el formato: 00000000-0000-0000-0000-000000000000. Se usa para identificar un recurso, como el identificador de entidad de seguridad o el identificador de definición de roles.
Ejemplos

Operadores de comparación de productos

La sección siguiente se enumeran los operadores de comparación de productos que están disponibles para construir condiciones.

ForAnyOfAnyValues

Propiedad Valor
Operadores ForAnyOfAnyValues:StringEquals
ForAnyOfAnyValues:StringEqualsIgnoreCase
ForAnyOfAnyValues:StringNotEquals
ForAnyOfAnyValues:StringNotEqualsIgnoreCase
ForAnyOfAnyValues:StringLike
ForAnyOfAnyValues:StringLikeIgnoreCase
ForAnyOfAnyValues:StringNotLike
ForAnyOfAnyValues:StringNotLikeIgnoreCase
ForAnyOfAnyValues:NumericEquals
ForAnyOfAnyValues:NumericNotEquals
ForAnyOfAnyValues:NumericGreaterThan
ForAnyOfAnyValues:NumericGreaterThanEquals
ForAnyOfAnyValues:NumericLessThan
ForAnyOfAnyValues:NumericLessThanEquals
ForAnyOfAnyValues:GuidEquals
ForAnyOfAnyValues:GuidNotEquals
Descripción Si al menos un valor del lado izquierdo satisface la comparación con al menos un valor del lado derecho, la expresión se evalúa como verdadera. Tiene el formato ForAnyOfAnyValues:<BooleanFunction>. Admite varias cadenas y números.
Ejemplos @Resource[Microsoft.Storage/storageAccounts/encryptionScopes:name] ForAnyOfAnyValues:StringEquals {'validScope1', 'validScope2'}
Si el nombre del ámbito de cifrado es validScope1 o validScope2, entonces es verdadera.

{'red', 'blue'} ForAnyOfAnyValues:StringEquals {'blue', 'green'}
true

{'red', 'blue'} ForAnyOfAnyValues:StringEquals {'orange', 'green'}
false

ForAllOfAnyValues

Propiedad Valor
Operadores ForAllOfAnyValues:StringEquals
ForAllOfAnyValues:StringEqualsIgnoreCase
ForAllOfAnyValues:StringNotEquals
ForAllOfAnyValues:StringNotEqualsIgnoreCase
ForAllOfAnyValues:StringLike
ForAllOfAnyValues:StringLikeIgnoreCase
ForAllOfAnyValues:StringNotLike
ForAllOfAnyValues:StringNotLikeIgnoreCase
ForAllOfAnyValues:NumericEquals
ForAllOfAnyValues:NumericNotEquals
ForAllOfAnyValues:NumericGreaterThan
ForAllOfAnyValues:NumericGreaterThanEquals
ForAllOfAnyValues:NumericLessThan
ForAllOfAnyValues:NumericLessThanEquals
ForAllOfAnyValues:GuidEquals
ForAllOfAnyValues:GuidNotEquals
Descripción Si cada valor del lado izquierdo satisface la comparación con al menos un valor del lado derecho, la expresión se evalúa como verdadera. Tiene el formato ForAllOfAnyValues:<BooleanFunction>. Admite varias cadenas y números.
Ejemplos @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] ForAllOfAnyValues:StringEquals {'Cascade', 'Baker', 'Skagit'}

{'red', 'blue'} ForAllOfAnyValues:StringEquals {'orange', 'red', 'blue'}
true

{'red', 'blue'} ForAllOfAnyValues:StringEquals {'red', 'green'}
false

ForAnyOfAllValues

Propiedad Valor
Operadores ForAnyOfAllValues:StringEquals
ForAnyOfAllValues:StringEqualsIgnoreCase
ForAnyOfAllValues:StringNotEquals
ForAnyOfAllValues:StringNotEqualsIgnoreCase
ForAnyOfAllValues:StringLike
ForAnyOfAllValues:StringLikeIgnoreCase
ForAnyOfAllValues:StringNotLike
ForAnyOfAllValues:StringNotLikeIgnoreCase
ForAnyOfAllValues:NumericEquals
ForAnyOfAllValues:NumericNotEquals
ForAnyOfAllValues:NumericGreaterThan
ForAnyOfAllValues:NumericGreaterThanEquals
ForAnyOfAllValues:NumericLessThan
ForAnyOfAllValues:NumericLessThanEquals
ForAnyOfAllValues:GuidEquals
ForAnyOfAllValues:GuidNotEquals
Descripción Si al menos un valor del lado izquierdo satisface la comparación con cada valor del lado derecho, la expresión se evalúa como verdadera. Tiene el formato ForAnyOfAllValues:<BooleanFunction>. Admite varias cadenas y números.
Ejemplos {10, 20} ForAnyOfAllValues:NumericLessThan {15, 18}
true

ForAllOfAllValues

Propiedad Valor
Operadores ForAllOfAllValues:StringEquals
ForAllOfAllValues:StringEqualsIgnoreCase
ForAllOfAllValues:StringNotEquals
ForAllOfAllValues:StringNotEqualsIgnoreCase
ForAllOfAllValues:StringLike
ForAllOfAllValues:StringLikeIgnoreCase
ForAllOfAllValues:StringNotLike
ForAllOfAllValues:StringNotLikeIgnoreCase
ForAllOfAllValues:NumericEquals
ForAllOfAllValues:NumericNotEquals
ForAllOfAllValues:NumericGreaterThan
ForAllOfAllValues:NumericGreaterThanEquals
ForAllOfAllValues:NumericLessThan
ForAllOfAllValues:NumericLessThanEquals
ForAllOfAllValues:GuidEquals
ForAllOfAllValues:GuidNotEquals
Descripción Si cada valor del lado izquierdo satisface la comparación con cada valor del lado derecho, la expresión se evalúa como verdadera. Tiene el formato ForAllOfAllValues:<BooleanFunction>. Admite varias cadenas y números.
Ejemplos {10, 20} ForAllOfAllValues:NumericLessThan {5, 15, 18}
false

{10, 20} ForAllOfAllValues:NumericLessThan {25, 30}
true

{10, 20} ForAllOfAllValues:NumericLessThan {15, 25, 30}
false

Caracteres especiales

Carácter Descripción
* Un asterisco (*) representa una coincidencia de carácter comodín con varios caracteres que se pueden usar con operadores Like. Si es necesario, puede escapar un asterisco agregando una barra diagonal inversa \*.
? Un signo de interrogación (*) representa una coincidencia de carácter comodín con un solo carácter que se puede usar con operadores Like. Si es necesario, puede escapar un signo de interrogación agregando una barra diagonal inversa \?.
$ Se usa un signo de dólar ($) para ayudar a delinear las claves de etiqueta. En Azure PowerShell, si una cadena entre comillas dobles (") incluye un signo de dólar, debe ir precedido por una comilla simple (`). Por ejemplo: tags:Project<`$key_case_sensitive`$>.

Agrupación y precedencia

Si tiene tres o más expresiones para una acción de destino con operadores diferentes entre las expresiones, el orden de evaluación es ambiguo. Los paréntesis () se usan para agrupar expresiones y especificar el orden en que se evalúan las expresiones. Las expresiones entre paréntesis tienen mayor precedencia. Por ejemplo, si tiene la siguiente expresión:

a AND b OR c

Debe agregar paréntesis de una de las maneras siguientes:

(a AND b) OR c
a AND (b OR c)

Pasos siguientes