Utilizar funções para controlar o acesso aos recursos
Funções incorporadas para Recursos do Azure (utiliza o PowerShell)
O Azure fornece várias funções internas para cobrir os cenários de segurança mais comuns. Para compreender como funcionam as funções, vamos analisar três funções que se aplicam a todos os tipos de recursos:
- Proprietário: Tem acesso total a todos os recursos, incluindo o direito de delegar acesso a outros.
- Colaborador: pode criar e gerenciar todos os tipos de recursos do Azure, mas não pode conceder acesso a outros.
- Leitor: pode exibir recursos existentes do Azure.
Definições de função
Cada função é um conjunto de propriedades definido num ficheiro JSON (JavaScript Object Notation). Esta definição de função inclui um Nome, um ID e uma Descrição. Inclui também as permissões autorizadas (Actions), permissões recusadas (NotActions) e âmbito (por exemplo, acesso de leitura) para a função.
Para a função Proprietário, isso significa todas as ações, indicadas por um asterisco (*); nenhuma ação recusada; e todos os âmbitos, indicados por uma barra (/).
Pode obter estas informações com o cmdlet Get-AzRoleDefinition Owner
do PowerShell.
Get-AzRoleDefinition Owner
Este código deverá produzir o seguinte resultado:
Name : Owner
Id : 8e3af657-a8ff-443c-a75c-2fe8c4bcb635
IsCustom : False
Description : Lets you manage everything, including access to resources.
Actions : {*}
NotActions : {}
DataActions : {}
NotDataActions : {}
AssignableScopes : {/}
Experimente o mesmo para as funções Contribuidor e Leitor para ver as ações permitidas e recusadas.
Funções incorporadas
Para obter um exame aprofundado do RBAC e das funções de usuário no Microsoft Entra ID, consulte Examinar o RBAC e as funções de usuário no Microsoft Entra ID.
O que é uma definição de função?
Uma definição de função é uma coleção de permissões. Uma definição de função lista as operações que a função pode executar, como leitura, gravação e exclusão. Pode também listar as operações que não podem ser efetuadas ou operações relacionadas a dados subjacentes.
Como descrito anteriormente, uma definição de função tem a seguinte estrutura:
Nome | Descrição |
---|---|
Id |
Identificador exclusivo para a função, atribuído pelo Azure |
IsCustom |
True se uma função personalizada, False se uma função interna |
Description |
Uma descrição legível da função |
Actions [] |
Permissões permitidas; * indica tudo |
NotActions [] |
Permissões negadas |
DataActions [] |
Permissões autorizadas específicas conforme aplicadas aos dados, por exemplo Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
NotDataActions [] |
Permissões recusadas específicas, conforme aplicadas aos dados. |
AssignableScopes [] |
Âmbitos de aplicação desta função; / indica global, mas pode chegar a uma árvore hierárquica |
Esta estrutura é representada como JSON quando utilizada no controlo de acesso baseado em funções (RBAC) ou da API subjacente. Por exemplo, aqui está a definição de função Contribuidor no formato JSON.
{
"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"
],
"DataActions": [],
"NotDataActions": [],
"AssignableScopes": [
"/"
]
}
Actions e NotActions
Pode personalizar as propriedades Actions
e NotActions
para conceder e recusar as permissões exatas necessárias. Estas propriedades estão sempre no seguinte formato: {Company}.{ProviderName}/{resourceType}/{action}
.
Como exemplo, aqui estão as ações para as três funções que analisamos anteriormente:
Função Incorporada | Ações | NotActions |
---|---|---|
Proprietário (permitir todas as ações) | * |
- |
Contribuidor (permitir todas as ações, exceto escrever ou eliminar atribuições de função) | * |
Microsoft.Authorization/*/Delete, Microsoft.Authorization/*/Write, Microsoft.Authorization/elevateAccess/Action |
Leitor (permitir todas as ações de leitura) | */read |
- |
A operação curinga (*
) indica Actions
que a entidade atribuída a essa função pode executar todas as ações, ou seja, essa função pode gerenciar tudo, incluindo ações definidas no futuro à medida que novos tipos de recursos são adicionados ao Azure. No caso da função Leitor, apenas a ação read
é permitida.
As operações em NotActions
são subtraídas de Actions
. Com a função de Colaborador , NotActions
remove a capacidade dessa função de gerenciar o acesso a recursos e também remove a atribuição de acesso a recursos.
DataActions e NotDataActions
As operações de dados são especificadas nas propriedades DataActions
e NotDataActions
. Você pode especificar operações de dados separadamente das operações de gerenciamento. Tal impede que as atribuições de função atuais com carateres universais (*
) tenham, de repente, acesso aos dados. Aqui estão algumas operações de dados que você pode especificar em DataActions
e NotDataActions
:
- Ler uma lista de blobs num contentor
- Escrever um blob de armazenamento num contentor
- Eliminar uma mensagem numa fila
Você só pode adicionar operações de DataActions
dados às propriedades e NotDataActions
. Os fornecedores de recursos identificam que operações são operações de dados ao definirem a propriedade isDataAction
como true
. As funções que não têm operações de dados podem omitir essas propriedades da definição de função.
Estas ações funcionam exatamente como as operações de gestão. Você pode especificar as ações que deseja permitir (ou *
para todas) e, em seguida, fornecer uma lista de ações específicas a serem removidas na NotDataActions
coleção. Eis alguns exemplos; Você pode encontrar a lista completa de ações e ações de dados na documentação do Provedor de Recursos:
Operação de dados | Description |
---|---|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete |
Eliminar dados de blob |
Microsoft.Compute/virtualMachines/login/action |
Iniciar sessão numa VM como utilizador normal |
Microsoft.EventHub/namespaces/messages/send/action |
Enviar mensagens num hub de eventos |
Microsoft.Storage/storageAccounts/fileServices/fileshares/files/read |
Devolver um ficheiro/pasta ou lista de ficheiros/pastas |
Microsoft.Storage/storageAccounts/queueServices/queues/messages/read |
Ler uma mensagem de uma fila |
Âmbitos Atribuíveis
Definir as propriedades Actions e NotActions não é suficiente para implementar totalmente uma função. Também precisa de definir corretamente o âmbito da sua função.
A propriedade AssignableScopes da função especifica os âmbitos (subscrições, grupos de recursos ou recursos) dentro dos quais a função está disponível para atribuição. Pode tornar a função personalizada disponível para atribuição apenas nas subscrições ou grupos de recursos que precisam da mesma e, assim evitar sobrecarregar a experiência do utilizador para as restantes subscrições ou grupos de recursos.
Seguem-se alguns exemplos:
Para | Utilizar o Âmbito |
---|---|
Restringir a uma subscrição | "/subscriptions/{sub-id}" |
Restringir a um grupo de recursos específico em uma assinatura específica | "/subscriptions/{sub-id}/resourceGroups/{rg-name}" |
Restringir a um recurso específico | "/subscriptions/{sub-id}/resourceGroups/{rg-name}/{resource-name}" |
Disponibilizar uma função para atribuição em duas subscrições | "/subscriptions/{sub-id}", "/subscriptions/{sub-id}" |
Criar funções
O Microsoft Entra ID vem com funções internas que provavelmente cobrirão 99% do que você vai querer fazer. É preferível usar uma função interna, se possível. No entanto, pode criar funções personalizadas, se achar necessário.
Nota
A criação de funções personalizadas requer o Microsoft Entra ID P1 ou P2; Não é possível criar funções personalizadas no nível gratuito.
Você pode criar uma nova função através de vários mecanismos:
Centro de administração do Microsoft Entra: você pode usar o centro de administração do Microsoft Entra para criar uma função personalizada selecionando Funções & administradores em Funções & administradores no menu esquerdo e, em seguida, selecionando Nova função personalizada.
Portal do Azure: você pode usar o portal do Azure para criar uma função personalizada selecionando Funções de ID>do Microsoft Entra e administradores>Nova função personalizada.
Azure PowerShell: você pode usar o
New-AzRoleDefinition
cmdlet para definir uma nova função.Azure Graph API: Você pode usar uma chamada REST para a API do Graph para criar programaticamente uma nova função.
A seção Resumo deste módulo inclui um link para a documentação dessas abordagens.