Sintaxe e formato da condição de atribuição de função do Azure

Uma condição é uma verificação adicional que você pode adicionar opcionalmente à sua atribuição de função para fornecer um controle de acesso mais refinado. Por exemplo, você pode adicionar uma condição que exige que um objeto tenha uma marca 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ção, é interessante observar o formato.

Condição simples

A condição mais básica consiste em uma ação direcionada e uma 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 e determina se a ação tem permissão para ser executada.

O exemplo 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 o acesso de leitura a blobs com um nome de contêiner específico.

Como uma condição é avaliada

Quando um usuário tenta executar uma ação na atribuição de função que não é <action>, !(ActionMatches) é avaliado como verdadeiro e a condição geral é avaliada como verdadeira para permitir que a ação seja executada.

Se um usuário tentar executar <action> na atribuição de função, !(ActionMatches) será avaliado como falso. Portanto, a expressão será avaliada. Se a expressão for avaliada como verdadeira, a condição geral será avaliada como verdadeira para permitir a execução de <action>. Caso contrário, <action> não terá permissão para ser executado.

O pseudocódigo a seguir mostra outra maneira em que você pode 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 ação de dados Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read tem a suboperação "Listar blobs". As condições com suboperações têm o formato a seguir.

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

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

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

Várias ações

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 opções de atributos para a sua condição, pois os atributos devem estar disponíveis nas ações selecionadas.

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

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

Várias 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.

Formato para várias expressões usando operadores boolianos e vários valores.

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

Condições múltiplas

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

Formato de várias condições usando um operador booliano.

(
    (
        !(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 de condição

O exemplo 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 personalizada ou internas que tenham ações de dados de armazenamento de fila ou de armazenamento de blobs. Elas incluem as seguintes funções internas:

Para obter uma lista das ações de armazenamento que podem ser usadas em condições, consulte:

Atributos

A depender das ações selecionadas, o atributo pode ser encontrado em locais diferentes. Se você selecionar várias ações para uma única condição, pode haver menos opções de atributos para a sua condição, pois 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 Descrição Código
Ambiente O atributo está associado ao ambiente da solicitação, como a origem da rede da solicitação ou a data e a hora atuais.
@Environment
Principal O 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
Solicitar O atributo faz parte da solicitação da ação, como definir a marca de índice do blob. @Request
Recurso O atributo é uma propriedade do recurso, como um nome de contêiner. @Resource

Para obter uma lista completa dos atributos de armazenamento que podem ser usados em condições, consulte:

Atributos de ambiente

Os atributos de ambiente sã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 o acesso em um ponto de extremidade privado específico ou em uma sub-rede de rede virtual ou talvez em qualquer link privado.

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

Nome de exibição Descrição Atributo Tipo
É um link privado1 Use esse atributo em condições para exigir acesso em qualquer link privado. isPrivateLink Booliano
Ponto de extremidade privado1,2 Use este atributo em condições para restringir o acesso em um ponto de extremidade privado específico. Microsoft.Network/privateEndpoints Cadeia de caracteres
Sub-rede1,3 Use esse atributo em condições para restringir o acesso de uma sub-rede específica. Microsoft.Network/virtualNetworks/subnets Cadeia de caracteres
UTC agora Use esse atributo em condições para restringir o acesso aos objetos durante períodos de tempo específicos. UtcNow DateTime

1 Para operações de cópia, os atributos Is private link, Private endpoint e Subnet somente se aplicam ao destino, como uma 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 visualizar mais detalhes.
2 Você só poderá usar o atributo Private endpoint se atualmente tiver pelo menos um ponto de extremidade privado configurado em sua assinatura.
3 Você só poderá usar o atributo Subnet se tiver pelo menos uma sub-rede de rede virtual usando pontos de extremidade de serviço configurados em sua assinatura.

Atributos principais

Os atributos de entidade de segurança 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 os atributos de entidade de segurança, é necessário ter o seguinte:

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

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 do recurso

Os atributos de recurso sã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 criar condições.

ActionMatches

Propriedade Valor
Operador 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 verificada for igual a “Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read”, então é true

ActionMatches{'Microsoft.Authorization/roleAssignments/*'}
Se a ação verificada for igual a "Microsoft.Authorization/roleAssignments/write", então é true

ActionMatches{'Microsoft.Authorization/roleDefinitions/*'}
Se a ação verificada for igual a "Microsoft.Authorization/roleAssignments/write", então é false

SubOperationMatches

Propriedade Valor
Operador SubOperationMatches
Descrição Verifica se a suboperação atual corresponde ao padrão de suboperação especificado.
Exemplos SubOperationMatches{'Blob.List'}

Existe

Propriedade Valor
Operador Exists
Descrição Verifica se o atributo especificado existe.
Exemplos Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:snapshot]
Suporte aos atributos 1 Nome do escopo de criptografia
Instantâneo
ID da Versão

1 O operador Exists tem suporte apenas para esses atributos no construtor de condições do ABAC visual no portal do Azure. É possível adicionar o operador Exists 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 criar condições.

And

Propriedade Valor
Operadores AND
&&
Descrição Operador And.
Exemplos !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})

Ou

Propriedade Valor
Operadores OR
||
Descrição Operador Or.
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

Propriedade Valor
Operadores NOT
!
Descrição Operador Not ou negação.
Exemplos NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId]

Operadores de comparação boolianos

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

Propriedade Valor
Operadores BoolEquals
BoolNotEquals
Descrição Comparação de boolianos.
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 criar condições.

StringEquals

Propriedade Valor
Operadores StringEquals
StringEqualsIgnoreCase
Descrição Correspondência entre maiúsculas e minúsculas (ou não diferenciação de maiúsculas e 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

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

StringStartsWith

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

StringNotStartsWith

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

StringLike

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

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

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

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

StringNotLike

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

Operadores de comparação numérica

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

Propriedade Valor
Operadores NumericEquals
NumericNotEquals
NumericGreaterThan
NumericGreaterThanEquals
NumericLessThan
NumericLessThanEquals
Descrição Correspondência de números. Somente há suporte para inteiros.

Operadores de comparação de datetime

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

Propriedade 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 da versão do blob, instantâneo de blob e agora para o UTC.
Exemplos @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z'

Operadores de comparação de GUID

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

Propriedade 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 de entidade de segurança 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 criar condições.

ForAnyOfAnyValues

Propriedade 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, a expressão será avaliada como verdadeira. Tem o formato: ForAnyOfAnyValues:<BooleanFunction>. Dá suporte a 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 igual a validScope1 ou validScope2, então é true.

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

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

ForAllOfAnyValues

Propriedade 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, a expressão será avaliada como verdadeira. Tem o formato: ForAllOfAnyValues:<BooleanFunction>. Dá suporte a 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'}
true

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

ForAnyOfAllValues

Propriedade 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 cada valor no lado esquerdo satisfizer a comparação com todos os valores no lado direito, a expressão será avaliada como verdadeira. Tem o formato: ForAnyOfAllValues:<BooleanFunction>. Dá suporte a várias cadeias de caracteres e números.
Exemplos {10, 20} ForAnyOfAllValues:NumericLessThan {15, 18}
true

ForAllOfAllValues

Propriedade 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 todos os valores no lado esquerdo satisfizerem a comparação com todos os valores no lado direito, a expressão será avaliada como verdadeira. Tem o formato: ForAllOfAllValues:<BooleanFunction>. Dá suporte a várias cadeias de caracteres e números.
Exemplos {10, 20} ForAllOfAllValues:NumericLessThan {5, 15, 18}
false

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

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

Caracteres especiais

Caractere Descrição
* Um asterisco (*) representa uma combinação curinga de vários caracteres que pode ser usada com operadores Like. Se necessário, você pode escapar de um asterisco adicionando uma barra invertida \*.
? Um ponto de interrogação (?) representa uma combinação curinga de vários caracteres que pode ser usada com operadores Like. 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 marca. No Azure PowerShell, se uma cadeia de caracteres entre aspas duplas (") incluir um sinal de cifrão, você deverá prefixá-la com um acento grave (`). Por exemplo: tags:Project<`$key_case_sensitive`$>.

Agrupamento e precedência

Se você tiver três ou mais expressões para uma ação de destino 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. Expressões incluídas em parênteses têm a precedência de avaliação mais alta. Por exemplo, se você tiver a seguinte expressão:

a AND b OR c

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

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

Próximas etapas