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.
(
(
!(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'
)
)
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.
(
(
!(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.
(
(
!(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.
(
(
!(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.
(
(
!(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:
- Colaborador de datos de blobs de almacenamiento
- Propietario de datos de blobs de almacenamiento
- Lector de datos de blobs de almacenamiento
- Colaborador de datos de la cola de Storage
- Procesador de mensajes de datos de la cola de Storage
- Emisor de mensajes de datos de la cola de Storage
- Lector de datos de la cola de Storage
Para obtener una lista de las acciones de almacenamiento que puede usar en condiciones, consulte:
- Acciones y atributos para las condiciones de asignación de roles de Azure para Azure Blob Storage
- Acciones y atributos para las condiciones de asignación de roles de Azure para Azure Queue Storage.
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 endpoint
y 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:
- Incorporación o desactivación de atributos de seguridad personalizados en Microsoft Entra ID
- Permitir el acceso de lectura a blobs en función de etiquetas y atributos de seguridad personalizados
- La entidad de seguridad no aparece en el origen del atributo
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 atributos 1 | 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)