Entender 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 de função

Uma definição de função é um conjunto de permissões. Às vezes, é chamada apenas de 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 ações relacionadas aos dados subjacentes.

A seguir, temos um exemplo das propriedades em uma definição de função quando exibida usando o Azure PowerShell:

Name
Id
IsCustom
Description
Actions []
NotActions []
DataActions []
NotDataActions []
AssignableScopes []

A seguir, temos um exemplo das propriedades em uma definição de função quando exibida usando o portal do Azure, a CLI do Azure ou a API REST:

roleName
name
type
description
actions []
notActions []
dataActions []
notDataActions []
assignableScopes []

A tabela a seguir descreve o que significam as propriedades de função.

Propriedade Descrição
Name
roleName
O nome para exibição da função.
Id
name
A ID exclusiva da função. As funções internas têm a mesma ID de função entre nuvens.
IsCustom
roleType
Indica se esta é uma função personalizada. Defina como true ou CustomRole para funções personalizadas. Defina como false ou BuiltInRole para funções internas.
Description
description
A descrição da função.
Actions
actions
Uma matriz de cadeias de caracteres que especifica as ações do painel de controle permitidas pela função.
NotActions
notActions
Uma matriz de cadeias de caracteres que especifica as ações do painel de controle excluídas do Actions permitido.
DataActions
dataActions
Uma 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
Uma matriz de cadeias de caracteres que especifica as ações do plano de dados excluídas do DataActions permitido.
AssignableScopes
assignableScopes
Uma matriz de cadeias de caracteres que especifica os escopos para os quais a função está disponível para atribuiçã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 parte {action} 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 subcadeias de caracteres em {action}:

Subcadeia de caracteres de ação Descrição
* O caractere curinga concede acesso a todas as ações que correspondem à cadeia de caracteres.
read Habilita ações de leitura (GET).
write Habilita ações de gravação (PUT ou PATCH).
action Habilita ações personalizadas como reiniciar máquinas virtuais (POST).
delete Habilita a exclusão de ações (DELETE).

Exemplo de definição de função

Aqui está a definição da função colaborador, conforme exibido em Azure PowerShell e CLI do Azure. A ação curinga (*) em Actions indica que a entidade de segurança atribuída a essa função pode executar todas as ações ou, em outras palavras, pode gerenciar tudo. Isso inclui ações definidas no futuro, conforme o Azure adiciona novos tipos de recurso. As ações em NotActions são subtraídas de Actions. No caso da função colaborador, o NotActions remove a capacidade de essa função gerenciar o acesso a recursos e também gerenciar atribuições de Azure Blueprints.

Função de colaborador, conforme exibido no Azure PowerShell:

{
  "Name": "Contributor",
  "Id": "b24988ac-6180-42a0-ab88-20f7382dd24c",
  "IsCustom": false,
  "Description": "Lets you manage everything except access to resources.",
  "Actions": [
    "*"
  ],
  "NotActions": [
    "Microsoft.Authorization/*/Delete",
    "Microsoft.Authorization/*/Write",
    "Microsoft.Authorization/elevateAccess/Action",
    "Microsoft.Blueprint/blueprintAssignments/write",
    "Microsoft.Blueprint/blueprintAssignments/delete"
  ],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/"
  ]
}

Função de colaborador, conforme exibido na CLI do Azure:

{
  "assignableScopes": [
    "/"
  ],
  "description": "Lets you manage everything except access to resources.",
  "id": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c",
  "name": "b24988ac-6180-42a0-ab88-20f7382dd24c",
  "permissions": [
    {
      "actions": [
        "*"
      ],
      "notActions": [
        "Microsoft.Authorization/*/Delete",
        "Microsoft.Authorization/*/Write",
        "Microsoft.Authorization/elevateAccess/Action",
        "Microsoft.Blueprint/blueprintAssignments/write",
        "Microsoft.Blueprint/blueprintAssignments/delete"
      ],
      "dataActions": [],
      "notDataActions": []
    }
  ],
  "roleName": "Contributor",
  "roleType": "BuiltInRole",
  "type": "Microsoft.Authorization/roleDefinitions"
}

Ações de controle e dados

O controle de acesso baseado em função para as ações do painel de controle é especificado nas propriedades Actions e NotActions de uma definição de função. Aqui estão alguns exemplos de ações do painel 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 painel 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 Azure AD" e não "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 leitor função em uma assinatura, em seguida, eles podem exibir a conta de armazenamento, mas não podem exibir os dados subjacentes por padrão.

Anteriormente, o controle de acesso baseado em função não foi usado para ações de dados. Autorização para ações de dados variadas em provedores de recursos. O mesmo modelo de autorização de controle de acesso baseado em função usado para ações de painel de controle foi estendido para ações de 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 plano de dados são especificadas nas propriedades DataActions e NotDataActions. Adicionando essas propriedades de dados, a separação entre o painel de controle e o plano de dados é mantida. Isso impede que as atribuições de função atuais com curingas (*) tenham acesso a dados repentinamente. Aqui estão algumas ações do plano de dados que podem ser especificadas em DataActions e NotDataActions:

  • Ler uma lista de blobs em um contêiner
  • Gravar um blob de armazenamento em um contêiner
  • Excluir uma mensagem em uma fila

Aqui está a definição da função de leitor de dados de blob de armazenamento, que inclui ações nas propriedades Actions e DataActions. Essa função permite que você leia o contêiner de blob e também os dados 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": [
    "/"
  ]
}

Função de leitor de dados de blob de armazenamento, conforme exibido no CLI do Azure:

{
  "assignableScopes": [
    "/"
  ],
  "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"
      ],
      "notActions": [],
      "dataActions": [
        "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read"
      ],
      "notDataActions": []
    }
  ],
  "roleName": "Storage Blob Data Reader",
  "roleType": "BuiltInRole",
  "type": "Microsoft.Authorization/roleDefinitions"
}

Apenas ações do plano de dados podem ser adicionadas para as propriedades DataActions e NotDataActions. Provedores de recursos identificam quais ações são ações de dados, definindo a propriedadeisDataAction comotrue. Para ver uma lista das ações em que isDataAction é true, consulte Operações do provedor de recursos . Funções que não têm as ações de dados não precisam ter DataActions e propriedades NotDataActions dentro da definição de função.

Autorização para todas as chamadas de API do Painel de controle é tratada pelo Azure Resource Manager. A autorização para chamadas de API de ação do plano de dados é tratada por um provedor de recursos ou o Azure Resource Manager.

Exemplo de ações de dados

Para entender melhor como funcionam as ações do painel de controle e do plano de dados, vamos considerar um exemplo específico. Alice foi atribuída a proprietário função no escopo da assinatura. Bob foi atribuído a função colaborador de dados de blob de armazenamento em um escopo de conta de armazenamento. O diagrama a seguir mostra este exemplo.

Controle de acesso baseado em função foi estendido para dar suporte as ações do painel de controle e do plano de dados

A função de Proprietário de Alice e a função de Colaborador de dados do blob de armazenamento de Roberto têm as seguintes ações:

Proprietário

    Ações
    *

Colaborador de dados de blob 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/move/action
    Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write

Como Alice tem uma ação curinga (*) em um escopo de assinatura, suas permissões são herdadas para permitir que executem todas as ações do painel de controle. Alice pode ler, gravar e excluir os contêineres. No entanto, Alice não pode executar ações do plano de dados sem realizar 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.

Permissões de Bob são restritas a apenas o Actions e DataActions especificadas na funçãocolaborador de dados de blob de armazenamento. Com base na função, Bob pode executar ações do painel de controle e do plano de dados. Por exemplo, Bob pode ler, gravar e excluir contêineres na conta de armazenamento especificado e ele também pode ler, gravar e excluir os blobs.

Para saber mais sobre a segurança de plano de dados e o controle, confira o Guia de segurança do Armazenamento do Microsoft Azure.

Quais ferramentas dão suporte ao uso de funções do Azure para ações de dados?

Para visualizar e trabalhar com ações de dados, você deve ter as versões corretas das ferramentas ou SDKs:

Ferramenta Versão
PowerShell do Azure 1.1.0 ou posterior
CLI do Azure 2.0.30 ou posterior
Azure para .NET 2.8.0-versão prévia ou posterior
SDK do Azure para ir 15.0.0 ou posterior
Azure para Java 1.9.0 ou posterior
Azure para Python 0.40.0 ou posterior
SDK do Azure para Ruby 0.17.1 ou posterior

Para exibir e usar as ações de dados na API REST, você precisa definir o parâmetro api-version para a seguinte versão ou outra posterior:

  • 2018-07-01

Ações

A permissão Actions especifica as ações do painel de controle permitidas pela função a ser realizada. É uma coleção de cadeias que identificam as ações protegíveis dos provedores de recursos do Azure. Aqui estão alguns exemplos de ações do painel de controle que podem ser usadas em Actions.

Cadeia de caracteres de ação Descrição
*/read Concede acesso a ações de leitura a todos os tipos de recursos de todos os provedores de recursos do Azure.
Microsoft.Compute/* Concede acesso a todas as ações a todos os tipos de recursos no provedor de recursos Microsoft.Compute.
Microsoft.Network/*/read Concede acesso a ações de leitura a todos os tipos de recursos no provedor de recursos Microsoft.Network do Azure.
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 reinicialização de um aplicativo Web.

NotActions

A permissão NotActions especifica as ações do painel de controle que são subtraídas ou excluídas do permitido Actions que têm um curinga (*). Use a permissão NotActions se o conjunto de ações que você deseja permitir for definido mais facilmente com a subtração de Actions que tenha um curinga (*). O acesso concedido por uma função (permissões efetivas) é calculado subtraindo as ações NotActions das ações Actions.

Actions - NotActions = Effective control plane permissions

A tabela a seguir mostra dois exemplos de permissões efetivas do painel de controle para uma ação curinga Microsoft. CostManagement:

Actions NotActions Permissões do painel de controle efetivas
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

Observação

Se um usuário for atribuído a uma função que exclui uma ação em NotActions e for atribuído a uma segunda função que concede acesso à mesma ação, ele 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 for necessário excluir ações específicas.

Diferenças entre NotActions e atribuições de negação

As NotActions e as atribuições de negação não são as mesmas e servem para fins diferentes. As NotActions são uma maneira conveniente de subtrair ações específicas de uma ação curinga (*).

As designações de negação impedem que os usuários executem ações específicas, mesmo que uma atribuição de função conceda a eles acesso. Para obter mais informações, confira Compreender atribuições de negação do Azure.

DataActions

Uma permissão DataActions que especifica as ações do plano de dados permitidas pela função em seus dados dentro desse objeto. Por exemplo, se um usuário tem acesso de leitura blob dados para uma conta de armazenamento, eles podem ler blobs dentro dessa conta de armazenamento. Aqui estão alguns exemplos de ações de dados que podem ser usados em DataActions.

Cadeia de caracteres de ação de dados Descrição
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 de escrever 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 gravar ou excluir uma mensagem.

NotDataActions

A permissão NotDataActions especifica as ações do plano de dados que são subtraídas ou excluídas do DataActions permitido que têm um curinga (*). Use a permissão NotDataActions se o conjunto de ações que você deseja permitir for definido mais facilmente com a subtração de DataActions que tenha um curinga (*). O acesso concedido por uma função (permissões efetivas) é calculado subtraindo as ações NotDataActions das ações DataActions. Cada provedor de recursos fornece seu respectivo conjunto de APIs para atender as ações de dados.

DataActions - NotDataActions = Effective data plane permissions

A tabela a seguir mostra dois exemplos de permissões de plano de data efetiva para uma ação curinga do 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

Observação

Se um usuário é atribuído a uma função que exclui uma ação de dados em NotDataActions e é atribuído a uma segunda função que concede acesso à mesma ação de dados, o usuário tem permissão para executar essa ação de dados. NotDataActions não é uma negação de regra – é simplesmente uma maneira conveniente de criar um conjunto de ações de dados permitidos quando precisam de ações de dados específicos a serem excluídos.

AssignableScopes

A propriedade AssignableScopes especifica os escopos (raiz, grupo de gerenciamento, assinaturas ou grupos de recursos) onde uma definição de função pode ser atribuída. Você pode tornar uma função personalizada disponível para atribuição somente nos grupos de gerenciamento, assinaturas ou grupos de recursos que a exigem. Você deve usar pelo menos um grupo de gerenciamento, uma assinatura ou um grupo de recursos.

Por exemplo, se AssignableScopes for definida como uma assinatura, isso significa que a função personalizada está disponível para atribuição no escopo da assinatura especificada, escopo do grupo de recursos para qualquer grupo de recursos na assinatura ou escopo de recurso para qualquer recurso na assinatura.

As funções internas têm AssignableScopes definido como o escopo raiz ("/"). O escopo raiz indica que a função está disponível para atribuição em todos os escopos.

Exemplos de escopos válidos que podem ser atribuídos incluem:

A função está disponível para atribuição Exemplo
Uma assinatura "/subscriptions/{subscriptionId1}"
Duas assinaturas "/subscriptions/{subscriptionId1}", "/subscriptions/{subscriptionId2}"
Grupo de recursos de rede "/subscriptions/{subscriptionId1}/resourceGroups/Network"
Um grupo de gerenciamento "/providers/Microsoft.Management/managementGroups/{groupId1}"
Grupo de gerenciamento e uma assinatura "/providers/Microsoft.Management/managementGroups/{groupId1}", "/subscriptions/{subscriptionId1}",
Todos os escopos (aplica-se somente a funções internas) "/"

Você só pode definir um grupo de gerenciamento em AssignableScopes de uma função personalizada. A adição de um grupo de gerenciamento a AssignableScopes está em versão prévia no momento.

Embora seja possível criar uma função personalizada com uma instância de recurso usando AssignableScopes a linha de comando, não é recomendável. Cada locatário dá suporte a no máximo 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 pelo AssignableScopes listado na função personalizada. Portanto, crie suas funções personalizadas com AssignableScopes do grupo de gerenciamento, assinatura ou grupo de recursos, mas atribua as funções personalizadas com escopo estreito, como recurso ou grupo de recursos.

Para obter mais informações sobre AssignableScopes para as funções personalizadas, veja Funções personalizadas do Azure.

Próximas etapas