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.
(
(
!(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'
)
)
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.
(
(
!(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.
(
(
!(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.
(
(
!(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.
(
(
!(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:
- Colaborador de dados de blob de armazenamento
- Proprietário de Dados do Blob de Armazenamento
- Leitor de Dados do Blob de Armazenamento
- Colaborador de dados da fila de armazenamento
- Processador de mensagens de dados da fila de armazenamento
- Remetente da mensagem de dados da fila de armazenamento
- Leitor de dados da fila de armazenamento
Para obter uma lista das ações de armazenamento que podem ser usadas em condições, consulte:
- Ações e atributos das condições de atribuição de função do Azure para o Armazenamento de Blobs do Azure
- Ações e atributos para condições de atribuição de função do Azure para o Armazenamento de Filas do Azure.
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:
- Permissões do Microsoft Entra para o usuário conectado, como a função de 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, confira:
- Adicionar ou desativar as definições dos atributos de segurança personalizados no Microsoft Entra ID
- Permitir acesso de leitura a blobs com base em marcas e atributos de segurança personalizados
- Principal não aparece na fonte do atributo
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 a 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)