Usar funções para controlar o acesso aos recursos
Funções internas para recursos do Azure (com o uso do PowerShell)
O Azure fornece várias funções internas para tratar dos cenários de segurança mais comuns. Para entender como as funções funcionam, vamos examinar três funções que se aplicam a todos os tipos de recursos:
- Proprietário: Tem acesso completo a todos os recursos, incluindo o direito de delegar acesso a outros usuários.
- Colaborador: pode criar e gerenciar todos os tipos de recursos do Azure, mas não pode permitir acesso a outros usuários.
- Leitor: pode exibir os recursos existentes do Azure.
Definições de função
Cada função é um conjunto de propriedades definido em um arquivo JSON (JavaScript Object Notation). Essa definição de função inclui um Nome, uma ID e uma Descrição. Ela também inclui as permissões concedidas (Actions), as permissões negadas (NotActions) e o escopo (por exemplo, acesso de leitura) da função.
Para a função Proprietário, isso significa todas as ações, indicadas por um asterisco (*); nenhuma ação negada; e todos os escopos, indicado por uma barra (/).
Obtenha essas informações usando o cmdlet Get-AzRoleDefinition Owner
do PowerShell.
Get-AzRoleDefinition Owner
Esse código deverá produzir a seguinte saída:
Name : Owner
Id : 8e3af657-a8ff-443c-a75c-2fe8c4bcb635
IsCustom : False
Description : Lets you manage everything, including access to resources.
Actions : {*}
NotActions : {}
DataActions : {}
NotDataActions : {}
AssignableScopes : {/}
Tente o mesmo para as funções Colaborador e Leitor para ver as ações permitidas e negadas.
Funções internas
Para obter um exame aprofundado do RBAC e das funções de usuário na ID do Microsoft Entra, 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 permissões que a função pode executar, como ler, gravar e excluir. Ela também pode listar as operações que não podem ser executadas ou operações relacionadas a dados subjacentes.
Conforme descrito anteriormente, uma definição de função tem a seguinte estrutura:
Nome | Descrição |
---|---|
Id |
Identificador exclusivo da função, atribuído pelo Azure |
IsCustom |
Verdadeiro se uma função personalizada, falso se uma função interna |
Description |
Uma descrição legível da função |
Actions [] |
Permissões concedidas; * indica todas |
NotActions [] |
Permissões negadas |
DataActions [] |
Permissões concedidas específicas, conforme aplicadas aos dados, por exemplo, Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
NotDataActions [] |
Permissões negadas específicas, conforme aplicadas aos dados. |
AssignableScopes [] |
Escopos em que essa função se aplica; / indica global, mas pode alcançar uma árvore hierárquica |
Esta estrutura é representada como JSON quando usada no RBAC (controle de acesso baseado em função) ou na API subjacente. Por exemplo, esta é a definição da função Colaborador 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
Você pode personalizar as propriedades Actions
e NotActions
para conceder e negar as permissões exatas necessárias. Essas propriedades estão sempre no formato: {Company}.{ProviderName}/{resourceType}/{action}
.
Por exemplo, essas são as ações para as três funções que examinamos anteriormente:
Função interna | Actions | NotActions |
---|---|---|
Proprietário (permitir todas as ações) | * |
- |
Colaborador (permitir todas as ações, exceto gravar ou excluir 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 (*
) em Actions
indica que a entidade de segurança atribuída a essa função pode executar todas as ações. Em outras palavras, essa função pode gerenciar tudo, incluindo ações definidas no futuro, à medida que novos tipos de recursos são adicionados ao Azure. Com a função Leitor, somente a ação read
é permitida.
As operações em NotActions
são subtraídas de Actions
. Com a função Colaborador, NotActions
remove a capacidade da função de gerenciar o acesso a recursos e de atribuir acesso a eles.
DataActions e NotDataActions
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. Isso impede que as atuais atribuições de função com caracteres curinga (*
) tenham acesso aos dados de modo repentino. Estas são algumas operações 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
Você só pode adicionar operações de dados às propriedades DataActions
e NotDataActions
. Provedores de recursos identificam quais operações são operações de dados definindo a propriedade isDataAction
como true
. Funções que não têm operações de dados podem omitir essas propriedades na definição da função.
Essas ações funcionam exatamente como seus pares de gerenciamento. 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 coleção NotDataActions
. Aqui estão 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 | Descrição |
---|---|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete |
Excluir dados de blob |
Microsoft.Compute/virtualMachines/login/action |
Fazer logon em uma VM como um usuário normal |
Microsoft.EventHub/namespaces/messages/send/action |
Enviar mensagens em um hub de eventos |
Microsoft.Storage/storageAccounts/fileServices/fileshares/files/read |
Retornar um arquivo/pasta ou uma lista de arquivos/pastas |
Microsoft.Storage/storageAccounts/queueServices/queues/messages/read |
Ler uma mensagem de uma fila |
Escopos atribuíveis
Definir as propriedades Actions e NotActions não é suficiente para implementar totalmente uma função. Você também precisará definir o escopo correto da função.
A propriedade AssignableScopes da função especifica os escopos (assinaturas, grupos de recursos ou recursos) nos quais a função ficará disponível para a atribuição. Você pode disponibilizar a função personalizada para atribuição apenas nas assinaturas ou grupos de recursos que precisam dela, evitando sobrecarregar a experiência do usuário nas assinaturas ou grupos de recursos restantes.
Estes são alguns exemplos:
Para | Use o escopo |
---|---|
Restringir a uma assinatura | "/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 assinaturas | "/subscriptions/{sub-id}", "/subscriptions/{sub-id}" |
Criar Funções
O Microsoft Entra ID vem com funções internas que provavelmente abrangem 99% do que você vai querer fazer. É preferível usar uma função interna quando possível. No entanto, você poderá criar funções personalizadas se achar necessário.
Observação
A criação de uma função personalizada requer o Microsoft Entra ID P1 ou P2; você não pode criar funções personalizadas no nível gratuito.
Você pode criar uma nova função por meio 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 à esquerda e selecionando Nova função personalizada.
Portal do Azure: Você pode usar o portal do Azure para criar uma função personalizada selecionando Microsoft Entra ID>Funções e administradores>Nova função personalizada.
Azure PowerShell: você pode usar o cmdlet
New-AzRoleDefinition
para definir uma nova função.API do Graph do Azure: 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.