Para que o registro do aplicativo do Horizon Cloud de primeira geração tenha a capacidade de fazer chamadas de API na assinatura do pod (ou na assinatura de gateway externo opcional) e realizar as operações relacionadas à VDI, uma função deve ser atribuída a ele. Normalmente, a função Contributor é usada para essa finalidade. Para organizações que preferem evitar o uso da função Contributor, elas podem criar uma função personalizada e fazer com que ela dê ao registro do aplicativo do Horizon Cloud a capacidade de realizar as chamadas de API necessárias.

Importante: Essas informações aplicam-se apenas quando você tem acesso a um ambiente de tenant de primeira geração na camada de controle de primeira geração. Conforme descrito em KB-92424, a camada de controle de primeira geração atingiu o fim da disponibilidade (EOA). Consulte esse artigo para obter detalhes.

Além de uma função personalizada para o registro do aplicativo do Horizon Cloud na assinatura do pod, se a sua organização preferir adotar a abordagem de ter uma assinatura separada para a configuração do Unified Access Gateway externa do pod e também optar por implantar os recursos de gateway em um grupo de recursos específico, que a organização configura para essa finalidade, a função personalizada para a assinatura desse gateway poderá ter permissões mais granulares e de escopo mais restrito do que a função personalizada para a assinatura do pod.

Breve introdução às funções personalizadas

O conceito abrangente é que o Horizon Cloud precisa realizar determinadas operações na assinatura do pod e nos grupos de recursos dele para criar e manter com êxito os recursos necessários a fim de 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.

No Microsoft Azure, uma função fornece um conjunto de operações de gerenciamento que podem ser realizadas por uma entidade de serviço de registro de aplicativo. Uma operação de gerenciamento é uma combinação do recurso e da ação executada nesse recurso.

Você pode restringir as capacidades do registro do aplicativo do Horizon Cloud na assinatura do pod e na assinatura do gateway (opcional) às operações mínimas necessárias, seguindo as regras descritas abaixo.

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, existem estes casos de uso.

Observação: No caso de uso de duas assinaturas, a função para o registro do aplicativo na assinatura do pod 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 de assinatura do pod. 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 do 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
Quando sua VNet tem rotas personalizadas. A Nuvem do Microsoft Azure tem um recurso chamado rotas personalizadas. Se sua VNet tiver rotas personalizadas, será necessária uma permissão além de todas as outras para os casos de uso acima: Microsoft.Network/routeTables/join/action.

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. A função personalizada deve permitir as operações da tabela a seguir. O * (caractere curinga) concede acesso a todas as operações que correspondem à string na operação listada.

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
Microsoft.Compute/galleries/read
Microsoft.Compute/galleries/write
Microsoft.Compute/galleries/delete
Microsoft.Compute/galleries/images/*
Microsoft.Compute/galleries/images/versions/*
https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftcompute
Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/read
Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/write
https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftmarketplaceordering

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. A ID é a ID exclusiva da função personalizada. Quando o Azure PowerShell ou a CLI do Azure são usados para criar uma função personalizada, esse ID é gerado automaticamente. Para a variável mysubscriptionId1, substitua o ID da assinatura em que a função personalizada será usada: a assinatura do pod ou a assinatura opcional do gateway.

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/*"
  "Microsoft.Compute/galleries/read"
  "Microsoft.Compute/galleries/write"
  "Microsoft.Compute/galleries/delete"
  "Microsoft.Compute/galleries/images/*"
  "Microsoft.Compute/galleries/images/versions/*"
  "Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/read"
  "Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/write"
  ],
"NotActions": [],
"DataActions": [],
"NotDataActions": [],
"AssignableScopes": [
  "/subscriptions/mysubscriptionId1"
  ]
}

Quando as rotas personalizadas estão em sua VNet e suas sub-redes

A nuvem do Microsoft Azure tem um recurso chamado rotas personalizadas.

Se você tiver essas rotas adicionadas à sua VNet e suas sub-redes, essa permissão adicional será necessária.

Tabela 3. Operação de recurso do Microsoft Azure que deve ser permitida quando sua VNet tem rotas personalizadas
Operação Descrição na documentação do Microsoft Azure
Microsoft.Network/routeTables/join/action https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork

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, no nível de assinatura do gateway externo, sua organização pode usar a função interna Reader para que o registro do aplicativo do Horizon Cloud a utilize, além de uma função personalizada no nível do grupo de recursos nomeado.

Sua organização criaria uma função personalizada que especificasse as permissões na tabela a seguir. Essa função personalizada seria então atribuída ao registro do aplicativo do Horizon Cloud para operar com o grupo de recursos especificamente nomeado na assinatura do gateway externo. Você ou sua organização criariam previamente esse grupo de recursos nomeado na assinatura na qual você está implantando o gateway externo.

Algumas permissões específicas em sub-redes e na VNet também são necessárias, dependendo das suas opções de implantação planejadas:

  • Se essa implantação externa de gateway usar sub-redes que você criou 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 à VNet à qual 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.

Tabela 4. 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
Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/read
Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/write
https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftmarketplaceordering