A entidade de serviço usada pelo Horizon Cloud para realizar operações tanto na assinatura quanto nos grupos de recursos do Microsoft Azure precisa de uma função atribuída que especifique quais operações são permitidas à entidade de serviço realizar nessa assinatura e em seus grupos de recursos. Mesmo que o uso da função integrada Colaborador do Microsoft Azure forneça todas as operações necessárias ao Horizon Cloud, ele faz isso concedendo o maior número possível de permissões. Em vez de usar essa função interna Colaborador do Microsoft Azure no nível da assinatura, você pode criar uma função personalizada com o conjunto mínimo de permissões, com escopo para o conjunto mínimo de operações que o Horizon Cloud exige na assinatura associada, e atribuir essa função personalizada à entidade de serviço no nível da assinatura. Se você adotar essa abordagem com o objetivo de ter uma assinatura separada para a configuração externa do Unified Access Gateway do pod e selecionar a implantação dos recursos de gateway em um grupo de recursos que você criar e manter, terá a opção de atribuir à entidade de serviço mais permissões detalhadas e de escopo estreito nessa assinatura separada.

O conceito abrangente é o de que o Horizon Cloud precisa realizar determinadas operações em sua assinatura e nos grupos de recursos dele para criar e manter com êxito os recursos necessários para ter um pod e suas configurações de gateway. Como um exemplo simples, como o pod e a arquitetura de gateway exigem máquinas virtuais com NICs, o Horizon Cloud precisa da capacidade de criar máquinas virtuais e NICs na sua assinatura e anexar esses NICs a sub-redes na VNet da assinatura. Algumas das opções que você escolher para as implantações do pod e do gateway determinarão o conjunto específico de operações que o Horizon Cloud precisará realizar. É possível restringir as habilidades do Horizon Cloud em sua assinatura às operações mínimas necessárias, seguindo as regras descritas abaixo, de acordo com as opções que você estiver adotando para implantar um pod e para sua configuração externa de gateway.

Para obter detalhes sobre as funções personalizadas no Microsoft Azure e as etapas necessárias para a criação de uma função personalizada, consulte o tópico de documentação do Microsoft Azure Funções personalizadas para recursos do Azure. Para obter detalhes sobre como uma função funciona, sua estrutura e a estrutura das operações de gerenciamento, consulte Compreender as definições de função dos recursos do Azure na documentação do Microsoft Azure. Conforme descrito no tópico da documentação, uma definição de função é um conjunto de permissões. Essa definição de função é chamada de função. A função lista as operações de gerenciamento que podem ser realizadas, bem como as operações que não podem ser realizadas, pela entidade de serviço à qual essa função está atribuída. Uma operação de gerenciamento é uma combinação do recurso e da ação executada nesse recurso.

Este tópico inclui as seguintes seções.

Visão geral dos casos de uso disponíveis

Ao discutir as operações necessárias para o Horizon Cloud em suas assinaturas e grupos de recursos do Microsoft Azure, existem esses casos de uso.

Observação: A função da entidade de serviço criada para a assinatura especificada relativa ao restante dos recursos de pod no caso de uso de duas assinaturas deve seguir as mesmas regras necessárias para o caso de uso de assinatura única.
Caso de uso Descrição
Uma única assinatura usada pelo Horizon Cloud relativa aos pods e suas configurações externas do Unified Access Gateway.

Nesse caso, o acesso deve ser concedido à entidade de serviço no nível da assinatura. A função atribuída à entidade de serviço nesse nível deve permitir as ações que o Horizon Cloud precisa realizar na sua assinatura para criar, com êxito, nessa assinatura, os recursos necessários e trabalhar com esses recursos ao longo do tempo. Por exemplo, nesse caso, a função deve fornecer a capacidade de criar os grupos de recursos padrão, os grupos de segurança de rede, as máquinas virtuais e assim por diante.

Duas assinaturas, e você deseja que o Horizon Cloud crie automaticamente os grupos de recursos e os recursos necessários ao gateway na assinatura especificada do gateway externo, tal qual se passa com a assinatura para o restante dos recursos de pod.
  • Uma assinatura especificada para uso com os recursos de configuração externa do Unified Access Gateway
  • Uma assinatura para o restante dos recursos do pod

Ao usar essa opção, a entidade de serviço de cada assinatura deve receber acesso no nível da assinatura, com permissões que viabilizem as ações iguais às do caso de uso de assinatura única descrito acima.

Duas assinaturas conforme descrito acima, mas em vez de o Horizon Cloud criar automaticamente os grupos de recursos e os recursos necessários do gateway externo, você cria um grupo de recursos com antecedência na assinatura especificada do gateway externo e deseja que o Horizon Cloud implante os recursos do gateway nesse grupo de recursos existente.

Duas opções para conceder acesso à entidade de serviço usada para implantar o gateway externo:

  • Conceda acesso no nível da assinatura, como no caso acima.
  • Use a seguinte combinação:
    • No nível da assinatura, conceda acesso usando a função de Leitor integrada.
    • No nível do grupo de recursos nomeados, conceda acesso usando as permissões definidas em uma função personalizada. As permissões concedidas no nível do grupo de recursos devem ser fornecidas às operações que o Horizon Cloud precisa realizar no grupo de recursos para implantar e configurar os recursos do gateway externo ali.

      Além das permissões no grupo de recursos, o Horizon Cloud precisa das permissões para realizar as seguintes ações, dependendo dos seus planos de implantação:

      • Se esta implantação usar sub-redes criadas com antecedência na VNet dessa assinatura, o Horizon Cloud precisará da capacidade de criar NICs e grupos de segurança de rede (NSGs) nessas sub-redes. As permissões necessárias para a VNet às quais a sub-rede pertence são Microsoft.Network/virtualNetworks/subnets/* e Microsoft.Network/networkSecurityGroups/*
      • Se essa implantação fizer com que o Horizon Cloud gere as sub-redes, além das permissões Microsoft.Network/virtualNetworks/subnets/* e Microsoft.Network/networkSecurityGroups/* acima, o Horizon Cloud precisará da capacidade de criar as sub-redes. A permissão necessária para a VNet é Microsoft.Network/virtualNetworks/write
      • Se a implantação do seu gateway externo especificar o uso de um endereço IP público, o Horizon Cloud precisará da capacidade de criar endereços IP públicos no grupo de recursos nomeado. A permissão necessária no grupo de recursos nomeado é Microsoft.Network/publicIPAddresses

Ao usar uma única assinatura para o pod e suas configurações de gateway ou usar uma assinatura separada para a configuração externo do Unified Access Gateway com permissões definidas no nível da assinatura

Para esses casos de uso, as permissões são atribuídas no nível da assinatura. Para a função personalizada definida na entidade de serviço que você especificar na etapa de assinatura dos fluxos de trabalho do Horizon Cloud, as seguintes ações são necessárias para a definição de função personalizada. O * (caractere curinga) concede acesso a todas as operações que correspondem à string na operação do provedor de recursos listada. Para obter as descrições das operações, consulte a documentação do Microsoft Azure nos links listados abaixo.

Tabela 1. As operações de recursos do Microsoft Azure que devem ser permitidas na função personalizada ao atribuir permissões no nível da assinatura
Operação Descrição na documentação do Microsoft Azure
Microsoft.Authorization/*/read https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftauthorization
Microsoft.Compute/*/read https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftcompute
Microsoft.Compute/availabilitySets/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftcompute
Microsoft.Compute/disks/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftcompute
Microsoft.Compute/images/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftcompute
Microsoft.Compute/locations/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftcompute
Microsoft.Compute/snapshots/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftcompute
Microsoft.Compute/virtualMachines/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftcompute
Microsoft.Compute/virtualMachineScaleSets/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftcompute
Microsoft.DBforPostgreSQL/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftdbforpostgresql
Microsoft.KeyVault/*/read https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftkeyvault
Microsoft.KeyVault/vaults/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftkeyvault
Microsoft.KeyVault/vaults/secrets/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftkeyvault
Microsoft.Network/loadBalancers/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork
Microsoft.Network/networkInterfaces/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork
Microsoft.Network/networkSecurityGroups/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork
Microsoft.Network/publicIPAddresses/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork
Microsoft.Network/virtualNetworks/read https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork
Microsoft.Network/virtualNetworks/write https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork
Microsoft.Network/virtualNetworks/checkIpAddressAvailability/read https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork
Microsoft.Network/virtualNetworks/subnets/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork
Microsoft.Network/virtualNetworks/virtualNetworkPeerings/read https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork
Microsoft.ResourceHealth/availabilityStatuses/read https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftresourcehealth
Microsoft.Resources/subscriptions/resourceGroups/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftresources
Microsoft.Resources/deployments/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftresources
Microsoft.Storage/*/read https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftstorage
Microsoft.Storage/storageAccounts/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftstorage

O seguinte bloco de códigos JSON é um exemplo que ilustra a possível aparência de uma definição de função personalizada chamada Pod do Horizon Cloud quando tem o conjunto de operações exigidas pelo implantador do pod. Para ver uma descrição das propriedades e das informações de uso, consulte a seção Propriedades da função personalizada no tópico de documentação do Microsoft Azure intitulado Funções personalizadas para recursos do Azure. A ID é a ID exclusiva da função personalizada. Quando você cria a função personalizada usando o Azure PowerShell ou a interface de linha de comando do Azure, essa ID é gerada automaticamente quando você cria uma nova função. Conforme descrito no tutorial: Criar uma função personalizada para os recursos do Azure usando a interface de linha de comando do Azure, mysubscriptionId1 é a ID da sua própria assinatura.

Tabela 2. Exemplo de JSON para uma função que possibilita ao Horizon Cloud realizar as operações necessárias ao atribuir permissões no nível da assinatura
{
"Name": "Horizon Cloud Pod",
"Id": "uuid",
"IsCustom": true,
"Description": "Minimum set of Horizon Cloud pod required operations",
"Actions": [
  "Microsoft.Authorization/*/read"
  "Microsoft.Compute/*/read"
  "Microsoft.Compute/availabilitySets/*"
  "Microsoft.Compute/disks/*"
  "Microsoft.Compute/images/*"
  "Microsoft.Compute/locations/*"
  "Microsoft.Compute/virtualMachines/*"
  "Microsoft.Compute/virtualMachineScaleSets/*"
  "Microsoft.Compute/snapshots/*"
  "Microsoft.DBforPostgreSQL/*"
  "Microsoft.KeyVault/*/read"
  "Microsoft.KeyVault/vaults/*"
  "Microsoft.KeyVault/vaults/secrets/*"
  "Microsoft.Network/loadBalancers/*"
  "Microsoft.Network/networkInterfaces/*"
  "Microsoft.Network/networkSecurityGroups/*"
  "Microsoft.Network/publicIPAddresses/*"
  "Microsoft.Network/virtualNetworks/read"
  "Microsoft.Network/virtualNetworks/write"
  "Microsoft.Network/virtualNetworks/checkIpAddressAvailability/read"
  "Microsoft.Network/virtualNetworks/subnets/*"
  "Microsoft.Network/virtualNetworks/virtualNetworkPeerings/read"
  "Microsoft.Resources/subscriptions/resourceGroups/*"
  "Microsoft.ResourceHealth/availabilityStatuses/read"
  "Microsoft.Resources/deployments/*"
  "Microsoft.Storage/*/read"
  "Microsoft.Storage/storageAccounts/*"
  ],
"NotActions": [],
"DataActions": [],
"NotDataActions": [],
"AssignableScopes": [
  "/subscriptions/mysubscriptionId1"
  ]
}

Ao usar uma assinatura separada para a configuração externa do Unified Access Gateway, implantá-la em um grupo de recursos personalizado, com a função de leitor no nível da assinatura e permissões adicionais necessárias atribuídas em níveis granulares

Para esse caso de uso, você pode atribuir a função Leitor integrada à entidade de serviço no nível da assinatura e, em seguida, conceder acesso no nível do grupo de recursos nomeado usando uma função personalizada que especifica as permissões na tabela a seguir. Algumas permissões adicionais em sub-redes e na VNet serão necessárias, dependendo das suas opções de implantação planejadas:

  • Se essa implantação externa de gateway usar sub-redes que você cria com antecedência, o Horizon Cloud precisará da capacidade de criar NICs e grupos de segurança de rede (NSGs) nessas sub-redes. As permissões necessárias para a VNet às quais a sub-rede pertence são Microsoft.Network/virtualNetworks/subnets/* e Microsoft.Network/networkSecurityGroups/*
  • Se essa implantação externa de gateway fizer com que o Horizon Cloud gere as sub-redes, além das permissões Microsoft.Network/virtualNetworks/subnets/* e Microsoft.Network/networkSecurityGroups/* acima, o Horizon Cloud precisará da capacidade de criar as sub-redes. A permissão necessária para a VNet da assinatura é Microsoft.Network/virtualNetworks/write
  • Se a sua implantação especificar o uso de um endereço IP público para a configuração externa de gateway, o Horizon Cloud precisará da capacidade de criar endereços IP públicos no grupo de recursos nomeado. A permissão necessária no grupo de recursos nomeado é Microsoft.Network/publicIPAddresses

As seguintes operações permitidas são necessárias para o grupo de recursos nomeado. O * (caractere curinga) concede acesso a todas as operações que correspondem à string na operação do provedor de recursos listada. Para obter as descrições das operações, consulte a documentação do Microsoft Azure nos links listados abaixo.

Tabela 3. Operações de recurso do Microsoft Azure que devem ser permitidas no grupo de recursos especificado
Operação Descrição na documentação do Microsoft Azure
Microsoft.Authorization/*/read https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftauthorization
Microsoft.Compute/*/read https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftcompute
Microsoft.Compute/availabilitySets/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftcompute
Microsoft.Compute/disks/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftcompute
Microsoft.Compute/images/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftcompute
Microsoft.Compute/locations/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftcompute
Microsoft.Compute/snapshots/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftcompute
Microsoft.Compute/virtualMachines/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftcompute
Microsoft.Compute/virtualMachineScaleSets/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftcompute
Microsoft.DBforPostgreSQL/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftdbforpostgresql
Microsoft.KeyVault/*/read https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftkeyvault
Microsoft.KeyVault/vaults/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftkeyvault
Microsoft.KeyVault/vaults/secrets/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftkeyvault
Microsoft.Network/loadBalancers/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork
Microsoft.Network/networkInterfaces/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork
Microsoft.Network/publicIPAddresses/*, se a sua implantação especificar o uso de um endereço IP público para a implantação externa de gateway. https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork
Microsoft.Network/virtualNetworks/read https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork
Microsoft.Network/virtualNetworks/checkIpAddressAvailability/read https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork
Microsoft.Network/virtualNetworks/virtualNetworkPeerings/read https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork
Microsoft.ResourceHealth/availabilityStatuses/read https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftresourcehealth
Microsoft.Resources/subscriptions/resourceGroups/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftresources
Microsoft.Resources/deployments/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftresources
Microsoft.Storage/*/read https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftstorage
Microsoft.Storage/storageAccounts/* https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftstorage