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-lhe definir funções que satisfazem as necessidades específicas da sua organização. Pode atribuir as funções personalizadas do Azure que criar a utilizadores, grupos e principais de serviço no âmbito de subscrição, grupo de recursos ou recurso.

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

Funções do Microsoft Entra e do Azure

As funções do Microsoft Entra e as funções do Azure são frequentemente 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 uma grande quantidade de capacidades para gerir recursos do Azure como máquinas virtuais (VMs) a nível granular.

Diagrama que mostra a relação entre as funções do Azure e as funções do Microsoft Entra.

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
Gerir o acesso a recursos do Azure como VMs, armazenamento, redes e muito mais Gerencie o acesso aos recursos do Microsoft Entra, como contas de usuário e senhas
Vários níveis de âmbito (grupo de gestão, subscrição, grupo de recursos, recurso) Âmbito apenas a nível de inquilino
Informações de funções acessíveis através do portal do Azure, CLI do Azure, Azure PowerShell, modelos do Azure Resource Manager, API REST Informações de função acessíveis no portal de administração do Azure, centro de administração do Microsoft 365, Microsoft Graph, Microsoft Graph PowerShell

Para nosso cenário, precisamos de uma função personalizada para gerenciar VMs do Azure no escopo da assinatura, portanto, precisamos usar funções personalizadas no RBAC do Azure.

Atribuição e âmbito de funções personalizadas

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

Você pode atribuir funções personalizadas a:

Principal de segurança Resumo
Utilizador Um indivíduo que tem um perfil no Microsoft Entra ID
Grupo Um conjunto de usuários criados no Microsoft Entra ID
Principais de serviço Uma identidade de segurança utilizada por aplicações ou serviços para aceder a recursos específicos do Azure
Identidade gerida Uma identidade no Microsoft Entra ID que é gerenciada automaticamente pelo Azure

Pode aplicar o âmbito da atribuição e permissões relacionadas a diferentes níveis no Azure. Os diferentes âmbitos são:

  • Subscrição
  • Grupo de recursos
  • Recurso individual

Diagrama que mostra os âmbitos de atribuição de função e a respetiva relação entre si.

Definição de função e estrutura

A definição de uma função personalizada divide-se numa coleção de diferentes permissões. Cada definição detalha as operações que são permitidas, como de leitura, escrita e eliminação. A definição é formada com estas estruturas:

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

O exemplo a seguir mostra a definição de função para a função de 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 com o seguinte formato:

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

A parte das ações normalmente consiste numa das seguintes ações:

  • *
  • lido
  • escrita
  • action
  • delete

Definir uma função personalizada para gerir VMs

Para ajudá-lo a identificar as permissões a incluir numa definição de função, utilize a lista de operações do fornecedor de recursos do Azure Resource Manager e analise as funções incorporadas do Azure que têm permissões semelhantes às que necessita.

Rever funções incorporadas

Para o nosso cenário, a função interna de Colaborador de Máquina Virtual tem mais permissões do que o funcionário precisa e o Login de Administrador de Máquina Virtual não tem o suficiente.

O seguinte comando da CLI do Azure retorna as permissões para a função interna de Colaborador de 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 para a função interna de Colaborador de 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

Para o nosso cenário, queremos uma função personalizada que permita monitorar e reiniciar máquinas virtuais para uma assinatura específica, portanto, queremos incluir as seguintes ações com escopo no nível da assinatura:

  • Acesso de leitura ao computador, rede e recursos de armazenamento
  • Capacidade de iniciar e reiniciar máquinas virtuais
  • Acesso aos grupos de recurso na subscrição
  • Acesso a recursos de monitorização

Há algumas operações na definição de função de 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 fornecedor de recursos

Podemos encontrar a ação de reinicialização da 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 para VMs:

Get-AzProviderOperation */virtualMachines/*

A seguinte operação para reiniciar é 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

Você pode usar o cmdlet do Azure PowerShell Get-AzProviderOperation para obter a lista mais atual de operações do provedor de recursos. Na CLI do Azure, utilize o comando az provider operation show. Você pode encontrar uma lista publicada de provedores de recursos e operações no conteúdo do Azure RBAC no Docs.

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

Vamos supor que escolhemos o que necessitamos ao analisar as definições de funções incorporadas relacionadas e a lista de operações do fornecedor de recursos. Acabamos com a seguinte definição de função para a nossa função personalizada. Vamos utilizar esta 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}" 
   ]
   }

Verifique o seu conhecimento

1.

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

2.

Que comandos o ajudam a determinar as operações a adicionar a uma definição de função personalizada?