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.

O controle de acesso baseado em função foi estendido para suportar ações do plano de controle e do plano de dados

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.

Próximos passos