Compreenda 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 é uma coleção 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 []
Condition
ConditionVersion
O exemplo a seguir mostra um exemplo das propriedades em uma definição de função quando exibidas usando a CLI do Azure ou 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 que significam as propriedades de função.
Propriedade | Descrição |
---|---|
Name roleName |
Nome de exibição da função. |
Id name |
ID exclusiva da função. As funções internas têm a mesma ID de função entre nuvens. |
id |
ID exclusiva totalmente qualificada da função. Mesmo que uma função seja renomeada, a ID da função não será alterada. É uma prática recomendada usar a 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. Definia para false ou BuiltInRole para funções internas. |
type |
Tipo de objeto. Defina 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 excluídas do Actions permitido. |
DataActions dataActions |
Matriz de cadeias de caracteres que especifica as ações do plano de dados que a função permite que sejam executadas nos seus dados nesse objeto. |
NotDataActions notDataActions |
Matriz de cadeias de caracteres que especifica as ações do plano de dados excluídas do DataActions permitido. |
AssignableScopes assignableScopes |
Matriz de cadeias de caracteres que especifica os escopos em que a função está disponível para ser atribuída. |
Condition condition |
Quanto às funções incorporadas, a declaração de condição se baseia em uma ou mais ações na definição da função. |
ConditionVersion conditionVersion |
Número da versão da condição. O padrão é 2.0 e é a única versão com suporte. |
createdOn |
Data e hora em que a função foi criada. |
updatedOn |
Data e hora em que a função foi atualizada pela última vez. |
createdBy |
Quanto às funções personalizadas, a principal que criou a função. |
updatedBy |
Quanto às funções personalizadas, a 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 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": "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 exibido 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 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 plano de controle não é herdado do seu plano de dados, desde que o método de autenticação do 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 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": [
"/"
],
"Condition": null,
"ConditionVersion": null
}
Função de leitor de dados de blob de armazenamento, conforme exibido no 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"
}
]
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.
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/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 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:
Ações | NotActions | Permissões do painel de controle efetivas |
---|---|---|
Microsoft.CostManagement/exports/* |
none | 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 (*
).
Negar designações 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/* |
none | 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.
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 suporta 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 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.
Definição da função de administrador privilegiado
As 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 incorporada ou personalizada incluir qualquer das seguintes ações, ela será considerada privilegiada. Para obter mais informações, consulte Listar ou gerenciar as atribuições das funções de administrador privilegiado.
Cadeia de caracteres de ação | Descrição |
---|---|
* |
Crie e gerencie recursos de todos os tipos. |
*/delete |
Excluir recursos de todos os tipos. |
*/write |
Gravar recursos de todos os tipos. |
Microsoft.Authorization/denyAssignments/delete |
Excluir uma atribuição de negação no escopo especificado. |
Microsoft.Authorization/denyAssignments/write |
Criar 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 |
Criar uma atribuição de função no escopo especificado. |
Microsoft.Authorization/roleDefinitions/delete |
Excluir a definição de função personalizada especificada. |
Microsoft.Authorization/roleDefinitions/write |
Criar ou atualizar uma definição de função personalizada com permissões especificadas e escopos atribuíveis. |