O que são funções personalizadas no Azure?

Concluído

Às vezes, as funções internas não concedem o nível preciso de acesso de que você precisa. As funções personalizadas permitem que você defina funções que atendem às necessidades específicas da organização. Você pode atribuir as funções personalizadas do Azure que você cria a usuários, grupos e entidades de serviço no escopo da assinatura, do grupo de recursos ou dos recursos.

Nesta unidade, você aprenderá sobre as funções personalizadas no RBAC (controle de acesso baseado em função) do Azure.

Funções do Microsoft Entra e do Azure

AAs funções do Microsoft Entra e do Azure costumam ser confundidas quando você trabalha pela primeira vez com o Azure. As funções do Microsoft Entra fornecem o mecanismo para gerenciar permissões para recursos do Microsoft Entra, como contas de usuário e senhas. As funções do Azure fornecem diversas funcionalidades para gerenciar recursos do Azure, como as VMs (máquinas virtuais), em um nível granular.

Diagram that shows relationship of Azure roles and Microsoft Entra roles.

A tabela a seguir mostra as diferenças sutis entre como você pode configurar e gerenciar os dois:

Funções do Azure Funções do Microsoft Entra
Gerenciam o acesso a recursos do Azure, como VMs, armazenamento, redes e muito mais Gerenciar o acesso aos recursos do Microsoft Entra, como contas de usuário e senhas
Diversos níveis de escopo (grupo de gerenciamento, assinatura, grupo de recursos, recurso) Escopo somente no nível do locatário
Informações sobre a função acessíveis por meio do portal do Azure, da CLI do Azure, do Azure PowerShell, dos modelos do Azure Resource Manager, da API REST Informações sobre a função acessíveis no portal de administração do Azure, centro de administração do Microsoft 365, no Microsoft Graph e no Microsoft Graph PowerShell

No cenário atual, você precisa de uma função personalizada para gerenciar as VMs do Azure no escopo da assinatura, portanto, será necessário usar funções personalizadas no RBAC do Azure.

Atribuição e escopo das funções personalizadas

Usuários com as funções de Proprietário ou Administrador de Acesso do Usuário podem criar ou atribuir funções personalizadas no RBAC do Azure.

Você pode atribuir funções personalizadas a:

Entidade de segurança Resumo
Usuário Um indivíduo que tem um perfil no Microsoft Entra ID
Grupo Um conjunto de usuários criados no Microsoft Entra ID
Entidades de serviço Uma identidade de segurança usada por aplicativos ou serviços para acessar recursos específicos do Azure
Identidade gerenciada Uma identidade no Microsoft Entra ID que é gerenciada automaticamente pelo Azure

Você pode definir o escopo da atribuição e das permissões relacionadas a ela a diferentes níveis no Azure. Os escopos são:

  • Assinatura
  • Grupo de recursos
  • Recurso individual

Diagram that shows the scopes for role assignment and their relationship to each other.

Estrutura e definição de função

A definição de uma função personalizada é dividida em uma coleção de permissões diferentes. Cada definição detalha as operações que são permitidas, como leitura, gravação e exclusão. A definição é formada usando estas estruturas:

{
  "Name": "",
  "IsCustom": true,
  "Description": "",
  "Actions": [],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/{subscriptionId1}"
  ]
}

O exemplo a seguir mostra a definição da função Colaborador:

{
  "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": [
    "/"
  ]
}

Qualquer definição de função é declarada usando o seguinte formato:

{Company}.{ProviderName}/{resourceType}/{action}

A parte da ação normalmente é uma das seguintes ações:

  • *
  • ler
  • gravar
  • ação
  • excluir

Definir uma função personalizada para gerenciar VMs

Para ajudar você a identificar quais permissões incluir em uma definição de função, use a lista de operações do provedor de recursos do Azure Resource Manager e examine as funções internas do Azure com permissões semelhantes às necessárias.

Examinar as funções internas

No cenário atual, a função interna de Colaborador da Máquina Virtual tem mais permissões do que o necessário para o funcionário e a função de Logon de Administrador da Máquina Virtual tem permissões insuficientes.

O comando da CLI do Azure a seguir retorna as permissões da função interna Colaborador da Máquina Virtual:

az role definition list --name "Virtual Machine Contributor" --output json | jq '.[] | .permissions[0].actions'

A lista a seguir exibe as permissões da função interna Colaborador da Máquina Virtual:

[
  "Microsoft.Authorization/*/read",
  "Microsoft.Compute/availabilitySets/*",
  "Microsoft.Compute/locations/*",
  "Microsoft.Compute/virtualMachines/*",
  "Microsoft.Compute/virtualMachineScaleSets/*",
  "Microsoft.DevTestLab/schedules/*",
  "Microsoft.Insights/alertRules/*",
  "Microsoft.Network/applicationGateways/backendAddressPools/join/action",
  "Microsoft.Network/loadBalancers/backendAddressPools/join/action",
  "Microsoft.Network/loadBalancers/inboundNatPools/join/action",
  "Microsoft.Network/loadBalancers/inboundNatRules/join/action",
  "Microsoft.Network/loadBalancers/probes/join/action",
  "Microsoft.Network/loadBalancers/read",
  "Microsoft.Network/locations/*",
  "Microsoft.Network/networkInterfaces/*",
  "Microsoft.Network/networkSecurityGroups/join/action",
  "Microsoft.Network/networkSecurityGroups/read",
  "Microsoft.Network/publicIPAddresses/join/action",
  "Microsoft.Network/publicIPAddresses/read",
  "Microsoft.Network/virtualNetworks/read",
  "Microsoft.Network/virtualNetworks/subnets/join/action",
  "Microsoft.RecoveryServices/locations/*",
  "Microsoft.RecoveryServices/Vaults/backupFabrics/backupProtectionIntent/write",
  "Microsoft.RecoveryServices/Vaults/backupFabrics/protectionContainers/protectedItems/*/read",
  "Microsoft.RecoveryServices/Vaults/backupFabrics/protectionContainers/protectedItems/read",
  "Microsoft.RecoveryServices/Vaults/backupFabrics/protectionContainers/protectedItems/write",
  "Microsoft.RecoveryServices/Vaults/backupPolicies/read",
  "Microsoft.RecoveryServices/Vaults/backupPolicies/write",
  "Microsoft.RecoveryServices/Vaults/read",
  "Microsoft.RecoveryServices/Vaults/usages/read",
  "Microsoft.RecoveryServices/Vaults/write",
  "Microsoft.ResourceHealth/availabilityStatuses/read",
  "Microsoft.Resources/deployments/*",
  "Microsoft.Resources/subscriptions/resourceGroups/read",
  "Microsoft.SqlVirtualMachine/*",
  "Microsoft.Storage/storageAccounts/listKeys/action",
  "Microsoft.Storage/storageAccounts/read",
  "Microsoft.Support/*"
]

Para obter essa lista no PowerShell, execute o seguinte comando:

Get-AzRoleDefinition -Name "Virtual Machine Contributor" | Select Actions | ConvertTo-Json

No cenário atual, você deseja uma função personalizada que permita o monitoramento e a reinicialização de máquinas virtuais em uma assinatura específica, portanto, será preciso incluir as seguintes ações no nível da assinatura:

  • Acesso de leitura aos recursos de computação, rede e armazenamento
  • Capacidade de iniciar e reiniciar máquinas virtuais
  • Acesso aos grupos de recursos na assinatura
  • Acesso aos recursos de monitoramento

Há algumas operações na definição de função Colaborador de Máquina Virtual que podemos usar, como "Microsoft.Insights/alertRules/*" para monitoramento, mas reiniciar e algumas outras não estão listadas como ações nessa definição de função.

Localizar operações do provedor de recursos

Podemos encontrar a ação de reiniciar a VM na lista de operações do provedor de recursos do Azure Resource Manager ou executando o seguinte comando do PowerShell para retornar operações relacionadas a VMs:

Get-AzProviderOperation */virtualMachines/*

A seguinte operação de reinicialização é retornada na lista:

Operation         : Microsoft.Compute/virtualMachines/restart/action
OperationName     : Restart Virtual Machine
ProviderNamespace : Microsoft Compute
ResourceName      : Virtual Machines
Description       : Restarts the virtual machine
IsDataAction      : False

É possível usar o cmdlet Get-AzProviderOperation do Azure PowerShell para obter a lista mais atual de operações do provedor de recursos. Na CLI do Azure, use o comando az provider operation show. Há uma lista publicada de provedores de recursos e operações no conteúdo sobre o RBAC do Azure no Docs.

Criar a definição de função Operador de VM

Vamos supor que escolhemos tudo de que precisamos examinando as definições das funções internas relacionadas e a lista de operações do provedor de recursos. Terminamos com a definição de função a seguir para nossa função personalizada. Usaremos essa definição de função para a nossa função personalizada.

   {
   "Name": "Virtual Machine Operator",
   "Id": "88888888-8888-8888-8888-888888888888",
   "IsCustom": true,
   "Description": "Can monitor and restart virtual machines.",
   "Actions": [
     "Microsoft.Storage/*/read",
     "Microsoft.Network/*/read",
     "Microsoft.Compute/*/read",
     "Microsoft.Compute/virtualMachines/start/action",
     "Microsoft.Compute/virtualMachines/restart/action",
     "Microsoft.Authorization/*/read",
     "Microsoft.ResourceHealth/availabilityStatuses/read",
     "Microsoft.Resources/subscriptions/resourceGroups/read",
     "Microsoft.Insights/alertRules/*",
     "Microsoft.Support/*"
   ],
   "NotActions": [],
   "DataActions": [],
   "NotDataActions": [],
   "AssignableScopes": [
      "/subscriptions/{subscriptionId1}" 
   ]
   }

Verificar seu conhecimento

1.

O que está incluído em uma definição de função personalizada do Azure?

2.

Quais comandos ajudam você a determinar quais operações adicionar a uma definição de função personalizada?