Formato e sintaxe das condições de atribuição de funções do Azure

Uma condição é uma verificação adicional que pode, opcionalmente, adicionar à atribuição de funções para indicar um controlo de acesso mais detalhado. Por exemplo, você pode adicionar uma condição que exija que um objeto tenha uma tag específica para ler o objeto. Este artigo descreve o formato e a sintaxe das condições de atribuição de função.

Formato da condição

Para entender melhor as condições de atribuição de funções, é útil examinar o formato.

Condição simples

A condição mais básica consiste numa ação orientada e numa expressão. Uma ação é uma operação que um usuário pode executar em um tipo de recurso. Uma expressão é uma instrução que é avaliada como verdadeira ou falsa, que determina se a ação pode ser executada.

A seguir mostra o formato de uma condição simples.

Formato de uma condição simples com uma única ação e uma única expressão.

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

A condição a seguir tem uma ação de "Ler um blob". A expressão verifica se o nome do contêiner é blobs-example-container.

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

Diagrama mostrando acesso de leitura a blobs com nome de contêiner específico.

Como uma condição é avaliada

Se um usuário tentar executar uma ação na atribuição de função que não <action>seja , !(ActionMatches) será avaliada como true e a condição geral será avaliada como true para permitir que a ação seja executada.

Se um usuário tentar executar <action> na atribuição de função, !(ActionMatches) avaliará como false, para que a expressão seja avaliada. Se a expressão for avaliada como true, a condição geral será avaliada como true para permitir que <action> seja executada. Caso contrário, <action> não é permitido ser realizado.

O pseudocódigo a seguir mostra outra maneira de ler essa condição.

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
    }
}

Suboperações

Algumas ações têm suboperações. Por exemplo, a Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read ação de dados tem a suboperação "Listar blobs". As condições com suboperações têm o seguinte formato.

Formato para uma ação com uma suboperação.

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

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

Ações múltiplas

Uma condição pode incluir várias ações que você deseja permitir se a condição for verdadeira. Se você selecionar várias ações para uma única condição, pode haver menos atributos para escolher para sua condição, porque os atributos devem estar disponíveis nas ações selecionadas.

Formatar para várias ações para permitir se a condição for verdadeira.

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

Múltiplas expressões

Uma condição pode incluir várias expressões. Dependendo do operador, os atributos podem ser verificados em relação a vários valores.

Formatar para várias expressões usando operadores booleanos e vários valores.

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

Múltiplas condições

Você também pode combinar condições para direcionar várias ações.

Formato para várias condições usando o operador booleano.

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

Sintaxe da condição

A seguir mostra a sintaxe de uma condição de atribuição de função.

(
    (
        !(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
...

Ações

Atualmente, as condições podem ser adicionadas a atribuições de função internas ou personalizadas que tenham ações de dados de armazenamento de blob ou de armazenamento em fila. Estes incluem as seguintes funções incorporadas:

Para obter uma lista das ações de armazenamento que você pode usar em condições, consulte:

Atributos

Dependendo das ações selecionadas, o atributo pode ser encontrado em locais diferentes. Se você selecionar várias ações para uma única condição, talvez haja menos atributos para escolher para sua condição, porque os atributos devem estar disponíveis em todas as ações selecionadas. Para especificar um atributo, você deve incluir a origem como um prefixo.

Origem do atributo Description Código
Ambiente O atributo está associado ao ambiente da solicitação, como a origem da rede da solicitação ou a data e hora atuais.
@Environment
Mandante Atributo é um atributo de segurança personalizado atribuído à entidade de segurança, como um usuário ou aplicativo empresarial (entidade de serviço). @Principal
Pedir O atributo faz parte da solicitação de ação, como definir a marca de índice de blob. @Request
Recurso Atributo é uma propriedade do recurso, como um nome de contêiner. @Resource

Para obter uma lista completa dos atributos de armazenamento que você pode usar em condições, consulte:

Atributos do ambiente

Os atributos de ambiente estão associados às circunstâncias em que a solicitação de acesso é feita, como a data e a hora do dia ou o ambiente de rede. O ambiente de rede pode ser se o acesso é através de um ponto de extremidade privado específico ou uma sub-rede de rede virtual, ou talvez sobre qualquer link privado.

A tabela a seguir lista os atributos de ambiente suportados para condições.

Display name Descrição Atributo Type
É linkprivado 1 Use esse atributo em condições para exigir acesso por qualquer link privado. isPrivateLink Booleano
Ponto finalprivado 1,2 Use esse atributo em condições para restringir o acesso em um ponto de extremidade privado específico. Microsoft.Network/privateEndpoints Cadeia
Sub-rede1,3 Use esse atributo em condições para restringir o acesso de uma sub-rede específica. Microsoft.Network/virtualNetworks/subnets Cadeia
UTC agora Use esse atributo em condições para restringir o acesso a objetos durante períodos de tempo específicos. UtcNow DateTime

1 Para operações de cópia, os Is private linkatributos , Private endpointe Subnet só se aplicam ao destino, tal conta de armazenamento, não à origem. Para obter mais informações sobre as operações de cópia às quais isso se aplica, selecione cada atributo na tabela para ver mais detalhes.
2 Você só pode usar o Private endpoint atributo se tiver atualmente pelo menos um ponto de extremidade privado configurado em sua assinatura.
3 Você só poderá usar o Subnet atributo se tiver atualmente pelo menos uma sub-rede de rede virtual usando pontos de extremidade de serviço configurados em sua assinatura.

Principais atributos

Os atributos principais são atributos de segurança personalizados atribuídos à entidade de segurança que solicita acesso a um recurso. A entidade de segurança pode ser um usuário ou um aplicativo empresarial (entidade de serviço).

Para usar atributos principais, você deve ter o seguinte:

  • Permissões do Microsoft Entra para o usuário conectado, como a função Administrador de Atribuição de Atributo
  • Atributos de segurança personalizados definidos no Microsoft Entra ID

Para obter mais informações sobre atributos de segurança personalizados, consulte:

Atributos de solicitação

Os atributos de solicitação são associados aos critérios especificados em uma solicitação de acesso, como o prefixo especificado de blobs a serem listados.

Atributos de recurso

Os atributos de recurso estão associados ao objeto ao qual o acesso está sendo solicitado, como o nome da conta de armazenamento, o nome do contêiner ou se o namespace hierárquico está habilitado para a conta de armazenamento.

Operadores de função

Esta seção lista os operadores de função que estão disponíveis para construir condições.

ActionMatches

Property valor
Operator ActionMatches
Descrição Verifica se a ação atual corresponde ao padrão de ação especificado.
Exemplos ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
Se a ação que está sendo verificada for igual a "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read", true

ActionMatches{'Microsoft.Authorization/roleAssignments/*'}
Se a ação que está sendo verificada for igual a "Microsoft.Authorization/roleAssignments/write", true

ActionMatches{'Microsoft.Authorization/roleDefinitions/*'}
Se a ação que está sendo verificada for igual a "Microsoft.Authorization/roleAssignments/write", false

SubOperationMatches

Property valor
Operator SubOperationMatches
Descrição Verifica se a suboperação atual corresponde ao padrão de suboperação especificado.
Exemplos SubOperationMatches{'Blob.List'}

Exists

Property valor
Operator Exists
Descrição Verifica se o atributo especificado existe.
Exemplos Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:snapshot]
Suporte deatributos 1 Nome do escopo de criptografia
Instantâneo
ID da versão

1 O Exists operador tem suporte apenas para esses atributos no construtor de condições ABAC visual no portal do Azure. Você pode adicionar o Exists operador a qualquer atributo usando outras ferramentas, como o PowerShell, a CLI do Azure, a API REST e o editor de código de condição no portal do Azure.

Operadores lógicos

Esta seção lista os operadores lógicos que estão disponíveis para construir condições.

And

Property valor
Operadores AND
&&
Descrição E operador.
Exemplos !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})

Ou

Property valor
Operadores OR
||
Descrição Ou operador.
Exemplos @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

Property valor
Operadores NOT
!
Descrição Não ou operador de negação.
Exemplos NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId]

Operadores de comparação booleana

Esta seção lista os operadores de comparação booleanos que estão disponíveis para construir condições.

Property valor
Operadores BoolEquals
BoolNotEquals
Descrição Comparação booleana.
Exemplos @Resource[Microsoft.Storage/storageAccounts:isHnsEnabled] BoolEquals true

Operadores de comparação de cadeia de caracteres

Esta seção lista os operadores de comparação de cadeia de caracteres que estão disponíveis para construir condições.

StringEquals

Property valor
Operadores StringEquals
StringEqualsIgnoreCase
Descrição Correspondência que diferencia maiúsculas de minúsculas (ou que não diferencia maiúsculas de minúsculas). Os valores devem corresponder exatamente à cadeia de caracteres.
Exemplos @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'

StringNotEquals

Property valor
Operadores StringNotEquals
StringNotEqualsIgnoreCase
Descrição Negação do StringEquals (ou StringEqualsIgnoreCase) operador.

StringStartsCom

Property valor
Operadores StringStartsWith
StringStartsWithIgnoreCase
Descrição Correspondência que diferencia maiúsculas de minúsculas (ou que não diferencia maiúsculas de minúsculas). Os valores começam com a cadeia de caracteres.

StringNotStartsWith

Property valor
Operadores StringNotStartsWith
StringNotStartsWithIgnoreCase
Descrição Negação do StringStartsWith (ou StringStartsWithIgnoreCase) operador.

StringLike

Property valor
Operadores StringLike
StringLikeIgnoreCase
Descrição Correspondência que diferencia maiúsculas de minúsculas (ou que não diferencia maiúsculas de minúsculas). Os valores podem incluir um curinga de correspondência de vários caracteres (*) ou um curinga de correspondência de caractere único (?) em qualquer lugar da cadeia de caracteres. Se necessário, esses caracteres podem ser escapados adicionando uma barra \* invertida e \?.
Exemplos @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'readonly/*'

Resource[name1] StringLike 'a*c?'
Se Resource[name1] for igual a "abcd", então true

Resource[name1] StringLike 'A*C?'
Se Resource[name1] for igual a "abcd", então false

Resource[name1] StringLike 'a*c'
Se Resource[name1] for igual a "abcd", então false

StringNotLike

Property valor
Operadores StringNotLike
StringNotLikeIgnoreCase
Descrição Negação do StringLike (ou StringLikeIgnoreCase) operador.

Operadores de comparação numérica

Esta seção lista os operadores de comparação numérica que estão disponíveis para construir condições.

Property valor
Operadores NumericEquals
NumericNotEquals
NumericGreaterThan
NumericGreaterThanEquals
NumericLessThan
NumericLessThanEquals
Descrição Correspondência de números. Apenas números inteiros são suportados.

Operadores de comparação DateTime

Esta seção lista os operadores de comparação de data/hora que estão disponíveis para construir condições.

Property valor
Operadores DateTimeEquals
DateTimeNotEquals
DateTimeGreaterThan
DateTimeGreaterThanEquals
DateTimeLessThan
DateTimeLessThanEquals
Descrição Verificação de precisão total com o formato: yyyy-mm-ddThh:mm:ss.mmmmmmmZ. Usado para ID de versão de blob, instantâneo de blob e UTC agora.
Exemplos @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z'

Operadores de comparação GUID

Esta seção lista os operadores de comparação de identificador global exclusivo (GUID) que estão disponíveis para construir condições.

Property valor
Operadores GuidEquals
GuidNotEquals
Descrição Correspondência que não diferencia maiúsculas de minúsculas com o formato: 00000000-0000-0000-0000-000000000000. Usado para identificar um recurso, como ID principal ou ID de definição de função.
Exemplos

Operadores de comparação entre produtos

Esta seção lista os operadores de comparação entre produtos que estão disponíveis para construir condições.

ForAnyOfAnyValues

Property 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
Descrição Se pelo menos um valor no lado esquerdo satisfizer a comparação com pelo menos um valor no lado direito, então a expressão será avaliada como verdadeira. Tem o formato: ForAnyOfAnyValues:<BooleanFunction>. Suporta várias cadeias de caracteres e números.
Exemplos @Resource[Microsoft.Storage/storageAccounts/encryptionScopes:name] ForAnyOfAnyValues:StringEquals {'validScope1', 'validScope2'}
Se o nome do escopo de criptografia for validScope1 igual ou validScope2, então true.

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

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

ForAllOfAnyValues

Property 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
Descrição Se cada valor no lado esquerdo satisfizer a comparação com pelo menos um valor no lado direito, então a expressão será avaliada como verdadeira. Tem o formato: ForAllOfAnyValues:<BooleanFunction>. Suporta várias cadeias de caracteres e números.
Exemplos @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] ForAllOfAnyValues:StringEquals {'Cascade', 'Baker', 'Skagit'}

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

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

ForAnyOfAllValues

Property 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
Descrição Se pelo menos um valor no lado esquerdo satisfizer a comparação com todos os valores do lado direito, então a expressão será avaliada como verdadeira. Tem o formato: ForAnyOfAllValues:<BooleanFunction>. Suporta várias cadeias de caracteres e números.
Exemplos {10, 20} ForAnyOfAllValues:NumericLessThan {15, 18}
verdadeiro

ForAllOfAllValues

Property 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
Descrição Se cada valor do lado esquerdo satisfizer a comparação com todos os valores do lado direito, então a expressão será avaliada como verdadeira. Tem o formato: ForAllOfAllValues:<BooleanFunction>. Suporta várias cadeias de caracteres e números.
Exemplos {10, 20} ForAllOfAllValues:NumericLessThan {5, 15, 18}
false

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

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

Carateres especiais

Caráter Description
* Um asterisco (*) representa uma correspondência curinga de vários caracteres que pode ser usada com Like operadores. Se necessário, você pode escapar de um asterisco adicionando uma barra invertida \*.
? Um ponto de interrogação (?) representa uma correspondência curinga de caractere único que pode ser usada com Like operadores. Se necessário, você pode escapar de um ponto de interrogação adicionando uma barra invertida \?.
$ Um cifrão ($) é usado para ajudar a delinear chaves de tag. No Azure PowerShell, se uma cadeia de caracteres entre aspas duplas (") incluir um cifrão, você deverá prefixá-la com um backtick ('). Por exemplo: tags:Project<`$key_case_sensitive`$>.

Agrupamento e precedência

Se você tiver três ou mais expressões para uma ação direcionada com operadores diferentes entre as expressões, a ordem de avaliação será ambígua. Use parênteses () para agrupar expressões e especificar a ordem em que as expressões são avaliadas. As expressões entre parênteses têm maior precedência. Por exemplo, se você tiver a seguinte expressão:

a AND b OR c

Você deve adicionar parênteses de uma das seguintes maneiras:

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

Próximos passos