Usar funções para controlar o acesso aos recursos

Concluído

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.

Examinar as funções internas

Em seguida, vamos explorar algumas das outras funções internas.

  1. Abra o Portal do Azure.

  2. Na página inicial do Azure, selecione Grupos de recursos no menu do lado esquerdo.

  3. Selecione um grupo de recursos. O painel do Grupo de recursos é exibido.

  4. No painel do menu esquerdo, selecione Controle de acesso (IAM). O painel Controle de acesso (IAM) do grupo de recursos é exibido.

  5. Na barra de menus interior, selecione a guia Funções da maneira ilustrada a seguir para ver a lista de funções disponíveis.

    Screenshot showing the roles in the Azure portal.

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 o Azure adiciona novos tipos de recursos. 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:

  • 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 desse módulo inclui um link para a documentação nas três abordagens.

Verificar seu conhecimento

1.

Quais informações um Action fornece em uma definição de função?

2.

Qual das alternativas a seguir define o escopo de uma função como o grupo de recursos myResourceGroup?

3.

Como NotActions são usados em uma definição de função?