Compreender as definições de função do Azure
Se você estiver tentando entender como uma função do Azure funciona ou se estiver criando sua própria função personalizada do Azure, é útil entender como as funções são definidas. Este artigo descreve os detalhes das definições de função e fornece alguns exemplos.
Definição da função
Uma definição de função é uma coleção de permissões. Por vezes é denominada apenas função. Uma definição de função lista as ações que podem ser executadas, como leitura, gravação e exclusão. Ele também pode listar as ações que são excluídas das ações permitidas ou relacionadas aos dados subjacentes.
A seguir mostra um exemplo das propriedades em uma definição de função quando exibidas usando o Azure PowerShell:
Name
Id
IsCustom
Description
Actions []
NotActions []
DataActions []
NotDataActions []
AssignableScopes []
Condition
ConditionVersion
A seguir mostra um exemplo das propriedades em uma definição de função quando exibidas usando a CLI do Azure ou a API REST:
roleName
name
id
roleType
type
description
actions []
notActions []
dataActions []
notDataActions []
assignableScopes []
condition
conditionVersion
createdOn
updatedOn
createdBy
updatedBy
A tabela a seguir descreve o significado das propriedades da função.
Property | Description |
---|---|
Name roleName |
Nome de exibição da função. |
Id name |
ID exclusivo da função. As funções incorporadas têm o mesmo ID de função nas nuvens. |
id |
ID exclusivo totalmente qualificado da função. Mesmo que a função seja renomeada, a ID da função não é alterada. É uma prática recomendada usar o ID da função em seus scripts. |
IsCustom roleType |
Indica se essa função é uma função personalizada. Defina como true ou CustomRole para funções personalizadas. Defina como false ou BuiltInRole para funções internas. |
type |
Tipo de objeto. Definido como Microsoft.Authorization/roleDefinitions . |
Description description |
Descrição da função. |
Actions actions |
Matriz de cadeias de caracteres que especifica as ações do plano de controle que a função permite que sejam executadas. |
NotActions notActions |
Matriz de cadeias de caracteres que especifica as ações do plano de controle que são excluídas do permitido Actions . |
DataActions dataActions |
Matriz de cadeias de caracteres que especifica as ações do plano de dados que a função permite que sejam executadas em seus dados dentro desse objeto. |
NotDataActions notDataActions |
Matriz de cadeias de caracteres que especifica as ações do plano de dados que são excluídas do permitido DataActions . |
AssignableScopes assignableScopes |
Matriz de cadeias de caracteres que especifica os escopos que a função está disponível para atribuição. |
Condition condition |
Para funções internas, declaração de condição baseada em uma ou mais ações na definição de função. |
ConditionVersion conditionVersion |
Número da versão da condição. O padrão é 2.0 e é a única versão suportada. |
createdOn |
A função de data e hora foi criada. |
updatedOn |
A função de data e hora foi atualizada pela última vez. |
createdBy |
Para funções personalizadas, principal que criou a função. |
updatedBy |
Para funções personalizadas, principal que atualizou a função. |
Formato das ações
As ações são especificadas com cadeias de caracteres que têm o seguinte formato:
{Company}.{ProviderName}/{resourceType}/{action}
A {action}
parte de uma cadeia de caracteres de ação especifica o tipo de ações que você pode executar em um tipo de recurso. Por exemplo, você verá as seguintes substrings em {action}
:
Substring de ação | Description |
---|---|
* |
O caractere curinga concede acesso a todas as ações que correspondem à cadeia de caracteres. |
read |
Habilita ações de leitura (GET). |
write |
Permite ações de gravação (PUT ou PATCH). |
action |
Permite ações personalizadas, como reiniciar máquinas virtuais (POST). |
delete |
Habilita ações de exclusão (DELETE). |
Exemplo de definição de função
Aqui está a definição de função de Colaborador conforme exibido no Azure PowerShell e na CLI do Azure. As ações curinga (*
) em Actions
indica que o principal atribuído a essa função pode executar todas as ações, ou em outras palavras, pode gerenciar tudo. Isto inclui ações definidas no futuro, uma vez que o Azure adiciona novos tipos de recursos. As ações em questão NotActions
são subtraídas de Actions
. No caso da função de Colaborador , NotActions
remove a capacidade dessa função de gerenciar o acesso a recursos e também gerenciar atribuições do Azure Blueprints.
Função de colaborador conforme exibido no Azure PowerShell:
{
"Name": "Contributor",
"Id": "b24988ac-6180-42a0-ab88-20f7382dd24c",
"IsCustom": false,
"Description": "Grants full access to manage all resources, but does not allow you to assign roles in Azure RBAC, manage assignments in Azure Blueprints, or share image galleries.",
"Actions": [
"*"
],
"NotActions": [
"Microsoft.Authorization/*/Delete",
"Microsoft.Authorization/*/Write",
"Microsoft.Authorization/elevateAccess/Action",
"Microsoft.Blueprint/blueprintAssignments/write",
"Microsoft.Blueprint/blueprintAssignments/delete",
"Microsoft.Compute/galleries/share/action",
"Microsoft.Purview/consents/write",
"Microsoft.Purview/consents/delete"
],
"DataActions": [],
"NotDataActions": [],
"AssignableScopes": [
"/"
],
"Condition": null,
"ConditionVersion": null
}
Função de colaborador conforme exibida na CLI do Azure:
[
{
"assignableScopes": [
"/"
],
"createdBy": null,
"createdOn": "2015-02-02T21:55:09.880642+00:00",
"description": "Grants full access to manage all resources, but does not allow you to assign roles in Azure RBAC, manage assignments in Azure Blueprints, or share image galleries.",
"id": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c",
"name": "b24988ac-6180-42a0-ab88-20f7382dd24c",
"permissions": [
{
"actions": [
"*"
],
"condition": null,
"conditionVersion": null,
"dataActions": [],
"notActions": [
"Microsoft.Authorization/*/Delete",
"Microsoft.Authorization/*/Write",
"Microsoft.Authorization/elevateAccess/Action",
"Microsoft.Blueprint/blueprintAssignments/write",
"Microsoft.Blueprint/blueprintAssignments/delete",
"Microsoft.Compute/galleries/share/action",
"Microsoft.Purview/consents/write",
"Microsoft.Purview/consents/delete"
],
"notDataActions": []
}
],
"roleName": "Contributor",
"roleType": "BuiltInRole",
"type": "Microsoft.Authorization/roleDefinitions",
"updatedBy": null,
"updatedOn": "2023-07-10T15:10:53.947865+00:00"
}
]
Ações de controle e dados
O controle de acesso baseado em função para ações do plano de controle é especificado nas Actions
propriedades e NotActions
de uma definição de função. Aqui estão alguns exemplos de ações do plano de controle no Azure:
- Gerenciar o acesso a uma conta de armazenamento
- Criar, atualizar ou excluir um contêiner de blob
- Excluir um grupo de recursos e todos os seus recursos
O acesso ao plano de controle não é herdado do seu plano de dados, desde que o método de autenticação de contêiner esteja definido como Conta de Usuário do Microsoft Entra e não como Chave de Acesso. Essa separação impede que funções com curingas (*
) tenham acesso irrestrito aos seus dados. Por exemplo, se um usuário tiver uma função de Leitor em uma assinatura, ele poderá exibir a conta de armazenamento, mas, por padrão, não poderá exibir os dados subjacentes.
Anteriormente, o controle de acesso baseado em função não era usado para ações de dados. A autorização para ações de dados variou entre os provedores de recursos. O mesmo modelo de autorização de controle de acesso baseado em função usado para ações do plano de controle foi estendido para ações do plano de dados.
Para dar suporte a ações de plano de dados, novas propriedades de dados foram adicionadas à definição de função. As ações do DataActions
plano de dados são especificadas nas propriedades e NotDataActions
. Ao adicionar essas propriedades de dados, a separação entre o plano de controle e o plano de dados é mantida. Tal impede que as atribuições de função atuais com carateres universais (*
) tenham, de repente, acesso aos dados. Aqui estão algumas ações do plano de dados que podem ser especificadas em DataActions
e NotDataActions
:
- Ler uma lista de blobs num contentor
- Escrever um blob de armazenamento num contentor
- Eliminar uma mensagem numa fila
Aqui está a definição da função Leitor de Dados de Blob de Armazenamento , que inclui ações nas Actions
propriedades e DataActions
. Essa função permite que você leia o contêiner de blob e também os dados de blob subjacentes.
Função de Leitor de Dados de Blob de Armazenamento conforme exibido no Azure PowerShell:
{
"Name": "Storage Blob Data Reader",
"Id": "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
"IsCustom": false,
"Description": "Allows for read access to Azure Storage blob containers and data",
"Actions": [
"Microsoft.Storage/storageAccounts/blobServices/containers/read",
"Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey/action"
],
"NotActions": [],
"DataActions": [
"Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read"
],
"NotDataActions": [],
"AssignableScopes": [
"/"
],
"Condition": null,
"ConditionVersion": null
}
Função Leitor de Dados de Blob de Armazenamento conforme exibido na CLI do Azure:
[
{
"assignableScopes": [
"/"
],
"createdBy": null,
"createdOn": "2017-12-21T00:01:24.797231+00:00",
"description": "Allows for read access to Azure Storage blob containers and data",
"id": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
"name": "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
"permissions": [
{
"actions": [
"Microsoft.Storage/storageAccounts/blobServices/containers/read",
"Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey/action"
],
"condition": null,
"conditionVersion": null,
"dataActions": [
"Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read"
],
"notActions": [],
"notDataActions": []
}
],
"roleName": "Storage Blob Data Reader",
"roleType": "BuiltInRole",
"type": "Microsoft.Authorization/roleDefinitions",
"updatedBy": null,
"updatedOn": "2021-11-11T20:13:55.297507+00:00"
}
]
Somente ações do plano de dados podem ser adicionadas DataActions
às propriedades e NotDataActions
. Os provedores de recursos identificam quais ações são ações de dados, definindo a isDataAction
propriedade como true
. Para ver uma lista das ações onde isDataAction
está true
, consulte Operações do provedor de recursos. As funções que não têm ações de dados não precisam ter DataActions
e NotDataActions
propriedades dentro da definição de função.
A autorização para todas as chamadas de API do plano de controle é tratada pelo Gerenciador de Recursos do Azure. A autorização para chamadas de API de plano de dados é tratada por um provedor de recursos ou pelo Gerenciador de Recursos do Azure.
Exemplo de ações de dados
Para entender melhor como funcionam as ações do plano de controle e do plano de dados, vamos considerar um exemplo específico. Alice recebeu a função de Proprietária no escopo da assinatura. Bob recebeu a função de Colaborador de Dados de Blob de Armazenamento em um escopo de conta de armazenamento. O diagrama a seguir mostra este exemplo.
A função Proprietário para Alice e a função de Colaborador de Dados de Blob de Armazenamento para Bob têm as seguintes ações:
Proprietário
Ações
*
Contribuidor de Dados de Blobs de Armazenamento
Ações
Microsoft.Storage/storageAccounts/blobServices/containers/delete
Microsoft.Storage/storageAccounts/blobServices/containers/read
Microsoft.Storage/storageAccounts/blobServices/containers/write
Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey/action
DataActions
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/move/action
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action
Como Alice tem uma ação curinga (*
) em um escopo de assinatura, suas permissões herdam para permitir que eles executem todas as ações do plano de controle. Alice pode ler, escrever e excluir contêineres. No entanto, Alice não pode executar ações do plano de dados sem executar etapas adicionais. Por exemplo, por padrão, Alice não pode ler os blobs dentro de um contêiner. Para ler os blobs, Alice teria que recuperar as chaves de acesso de armazenamento e usá-las para acessar os blobs.
As permissões de Bob são restritas apenas às Actions
e DataActions
especificadas na função Colaborador de Dados de Blob de Armazenamento . Com base na função, Bob pode executar ações do plano de controle e do plano de dados. Por exemplo, Bob pode ler, gravar e excluir contêineres na conta de armazenamento especificada e também pode ler, gravar e excluir os blobs.
Para obter mais informações sobre controle e segurança do plano de dados para armazenamento, consulte o guia de segurança do Armazenamento do Azure.
Quais ferramentas dão suporte ao uso de funções do Azure para ações de dados?
Para exibir e trabalhar com ações de dados, você deve ter as versões corretas das ferramentas ou SDKs:
Ferramenta | Versão |
---|---|
Azure PowerShell | 1.1.0 ou posterior |
CLI do Azure | 2.0.30 ou posterior |
Azure para .NET | 2.8.0-preview ou posterior |
SDK do Azure para Go | 15.0.0 ou posterior |
Azure para Java | 1.9.0 ou posterior |
Azure para Python | 0.40.0 ou posterior |
Azure SDK for Ruby (Azure SDK para Ruby) | 0.17.1 ou posterior |
Para exibir e usar as ações de dados na API REST, você deve definir o parâmetro api-version para a seguinte versão ou posterior:
- 2018-07-01
Ações
A Actions
permissão especifica as ações do plano de controle que a função permite que sejam executadas. É uma coleção de cadeias de caracteres que identificam ações protegíveis de provedores de recursos do Azure. Aqui estão alguns exemplos de ações do plano de controle que podem ser usadas no Actions
.
Cadeia de ação | Description |
---|---|
*/read |
Concede acesso a ações de leitura para todos os tipos de recursos de todos os provedores de recursos do Azure. |
Microsoft.Compute/* |
Concede acesso a todas as ações para todos os tipos de recursos no provedor de recursos Microsoft.Compute. |
Microsoft.Network/*/read |
Concede acesso a ações de leitura para todos os tipos de recursos no provedor de recursos Microsoft.Network. |
Microsoft.Compute/virtualMachines/* |
Concede acesso a todas as ações de máquinas virtuais e seus tipos de recursos filho. |
microsoft.web/sites/restart/Action |
Concede acesso para reiniciar um aplicativo Web. |
NotActions
A NotActions
permissão especifica as ações do plano de controle que são subtraídas ou excluídas do permitido Actions
que têm um curinga (*
). Use a permissão se o conjunto de ações que você deseja permitir for mais facilmente definido subtraindo do Actions
que tem um curinga NotActions
(*
). O acesso concedido por uma função (permissões efetivas) é calculado subtraindo as NotActions
Actions
ações das ações.
Actions - NotActions = Effective control plane permissions
A tabela a seguir mostra dois exemplos das permissões efetivas do plano de controle para uma ação curinga Microsoft.CostManagement :
Ações | NotActions | Permissões efetivas do plano de controle |
---|---|---|
Microsoft.CostManagement/exports/* |
nenhum | Microsoft.CostManagement/exports/action Microsoft.CostManagement/exports/read Microsoft.CostManagement/exports/write Microsoft.CostManagement/exports/delete Microsoft.CostManagement/exports/run/action |
Microsoft.CostManagement/exports/* |
Microsoft.CostManagement/exports/delete |
Microsoft.CostManagement/exports/action Microsoft.CostManagement/exports/read Microsoft.CostManagement/exports/write Microsoft.CostManagement/exports/run/action |
Nota
Se for atribuída a um usuário uma função que exclui uma ação no NotActions
, e for atribuída uma segunda função que conceda acesso à mesma ação, o usuário terá permissão para executar essa ação. NotActions
não é uma regra de negação – é simplesmente uma maneira conveniente de criar um conjunto de ações permitidas quando ações específicas precisam ser excluídas.
Diferenças entre NotActions e negar atribuições
NotActions
e negar atribuições não são as mesmas e servem propósitos diferentes. NotActions
são uma maneira conveniente de subtrair ações específicas de uma ação curinga (*
).
Negar atribuições impede que os usuários executem ações específicas, mesmo que uma atribuição de função lhes conceda acesso. Para obter mais informações, consulte Compreender atribuições de negação do Azure.
DataActions
A DataActions
permissão especifica as ações do plano de dados que a função permite que sejam executadas em seus dados dentro desse objeto. Por exemplo, se um usuário leu o acesso de dados de blob a uma conta de armazenamento, ele poderá ler os blobs dentro dessa conta de armazenamento. Aqui estão alguns exemplos de ações de dados que podem ser usadas no DataActions
.
Cadeia de caracteres de ação de dados | Description |
---|---|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
Retorna um blob ou uma lista de blobs. |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write |
Retorna o resultado da gravação de um blob. |
Microsoft.Storage/storageAccounts/queueServices/queues/messages/read |
Retorna uma mensagem. |
Microsoft.Storage/storageAccounts/queueServices/queues/messages/* |
Retorna uma mensagem ou o resultado de escrever ou excluir uma mensagem. |
NotDataActions
A NotDataActions
permissão especifica as ações do plano de dados que são subtraídas ou excluídas das permitidas DataActions
que têm um curinga (*
). Use a permissão se o conjunto de ações que você deseja permitir for mais facilmente definido subtraindo do DataActions
que tem um curinga NotDataActions
(*
). O acesso concedido por uma função (permissões efetivas) é calculado subtraindo as NotDataActions
DataActions
ações das ações. Cada provedor de recursos fornece seu respetivo conjunto de APIs para cumprir ações de dados.
DataActions - NotDataActions = Effective data plane permissions
A tabela a seguir mostra dois exemplos das permissões efetivas do plano de data para uma ação curinga Microsoft.Storage :
DataActions | NotDataActions | Permissões efetivas do plano de dados |
---|---|---|
Microsoft.Storage/storageAccounts/queueServices/queues/messages/* |
nenhum | Microsoft.Storage/storageAccounts/queueServices/queues/messages/read Microsoft.Storage/storageAccounts/queueServices/queues/messages/write Microsoft.Storage/storageAccounts/queueServices/queues/messages/delete Microsoft.Storage/storageAccounts/queueServices/queues/messages/add/action Microsoft.Storage/storageAccounts/queueServices/queues/messages/process/action |
Microsoft.Storage/storageAccounts/queueServices/queues/messages/* |
Microsoft.Storage/storageAccounts/queueServices/queues/messages/delete |
Microsoft.Storage/storageAccounts/queueServices/queues/messages/read Microsoft.Storage/storageAccounts/queueServices/queues/messages/write Microsoft.Storage/storageAccounts/queueServices/queues/messages/add/action Microsoft.Storage/storageAccounts/queueServices/queues/messages/process/action |
Nota
Se for atribuída a um usuário uma função que exclui uma ação de dados no NotDataActions
, e for atribuída uma segunda função que conceda acesso à mesma ação de dados, o usuário terá permissão para executar essa ação de dados. NotDataActions
não é uma regra de negação – é simplesmente uma maneira conveniente de criar um conjunto de ações de dados permitidas quando ações de dados específicas precisam ser excluídas.
AssignableScopes
A AssignableScopes
propriedade especifica os escopos (raiz, grupo de gerenciamento, assinaturas ou grupos de recursos) nos quais uma definição de função pode ser atribuída. Você pode disponibilizar uma função personalizada para atribuição somente no grupo de gerenciamento, assinaturas ou grupos de recursos que a exigem. Você deve usar pelo menos um grupo de gerenciamento, assinatura ou grupo de recursos.
Por exemplo, se AssignableScopes
estiver definido como uma assinatura, isso significa que a função personalizada está disponível para atribuição no escopo da assinatura especificada, no escopo do grupo de recursos para qualquer grupo de recursos na assinatura ou no escopo do recurso para qualquer recurso na assinatura.
As funções internas foram AssignableScopes
definidas para o escopo raiz ("/"
). O escopo raiz indica que a função está disponível para atribuição em todos os escopos.
Exemplos de escopos atribuíveis válidos incluem:
A função está disponível para atribuição | Exemplo |
---|---|
Uma subscrição | "/subscriptions/{subscriptionId1}" |
Duas subscrições | "/subscriptions/{subscriptionId1}", "/subscriptions/{subscriptionId2}" |
Grupo de recursos de rede | "/subscriptions/{subscriptionId1}/resourceGroups/Network" |
Um grupo de gestão | "/providers/Microsoft.Management/managementGroups/{groupId1}" |
Grupo de gestão e uma subscrição | "/providers/Microsoft.Management/managementGroups/{groupId1}", "/subscriptions/{subscriptionId1}", |
Todos os escopos (aplica-se somente a funções internas) | "/" |
Só pode definir um grupo de gestão em AssignableScopes
de uma função personalizada.
Embora seja possível criar uma função personalizada com uma instância de recurso usando AssignableScopes
a linha de comando, isso não é recomendado. Cada locatário oferece suporte a um máximo de 5.000 funções personalizadas. O uso dessa estratégia pode potencialmente esgotar suas funções personalizadas disponíveis. Em última análise, o nível de acesso é determinado pela atribuição de função personalizada (escopo + permissões de função + entidade de segurança) e não pela AssignableScopes
listada na função personalizada. Portanto, crie suas funções personalizadas com AssignableScopes
o grupo de gerenciamento, a assinatura ou o grupo de recursos, mas atribua as funções personalizadas com escopo restrito, como recurso ou grupo de recursos.
Para obter mais informações sobre AssignableScopes
funções personalizadas, consulte Funções personalizadas do Azure.
Definição de função de administrador privilegiado
Funções de administrador privilegiado são funções que concedem acesso de administrador privilegiado, como a capacidade de gerenciar recursos do Azure ou atribuir funções a outros usuários. Se uma função interna ou personalizada incluir qualquer uma das seguintes ações, ela será considerada privilegiada. Para obter mais informações, consulte Listar ou gerenciar atribuições de função de administrador privilegiado.
Cadeia de ação | Description |
---|---|
* |
Criar e gerir recursos de todos os tipos. |
*/delete |
Exclua recursos de todos os tipos. |
*/write |
Escreva recursos de todos os tipos. |
Microsoft.Authorization/denyAssignments/delete |
Exclua uma atribuição de negação no escopo especificado. |
Microsoft.Authorization/denyAssignments/write |
Crie uma atribuição de negação no escopo especificado. |
Microsoft.Authorization/roleAssignments/delete |
Exclua uma atribuição de função no escopo especificado. |
Microsoft.Authorization/roleAssignments/write |
Crie uma atribuição de função no escopo especificado. |
Microsoft.Authorization/roleDefinitions/delete |
Exclua a definição de função personalizada especificada. |
Microsoft.Authorization/roleDefinitions/write |
Crie ou atualize uma definição de função personalizada com permissões especificadas e escopos atribuíveis. |