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.
(
(
!(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
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.
(
(
!(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.
(
(
!(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.
(
(
!(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.
(
(
!(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:
- Contribuinte de Dados do Armazenamento de Blobs
- Proprietário dos Dados do Armazenamento de Blobs
- Leitor de Dados do Armazenamento de Blobs
- Contribuidor 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 você pode usar em condições, consulte:
- Ações e atributos para 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
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 link
atributos , Private endpoint
e 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:
- Adicionar ou desativar atributos de segurança personalizados no Microsoft Entra ID
- Permitir acesso de leitura a blobs com base em tags e atributos de segurança personalizados
- Principal não aparece em Origem 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 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 de atributos 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)