Es necesario asignar una función al registro de la aplicación de Horizon Cloud first-gen para que este pueda realizar llamadas de API en la suscripción del pod (o en la suscripción de puerta de enlace externa opcional) y realizar las operaciones correspondientes relativas a VDI. Por lo general, para este propósito se utiliza la función Contributor. Aquellas organizaciones que prefieran evitar el uso de la función Contributor pueden crear una función personalizada y designarla para cumplir el cometido de otorgar al registro de la aplicación Horizon Cloud la capacidad de realizar las llamadas de API requeridas.

Importante: Esta información se aplica únicamente cuando tenga acceso a un entorno de arrendatario de first-gen en el plano de control de first-gen. Como se describe en el artículo 92424 de la base de conocimientos, el plano de control de first-gen ha llegado a la fecha de fin de disponibilidad (EOA). Consulte el artículo para obtener información.

Aparte de una función personalizada para el registro de la aplicación de Horizon Cloud en la suscripción del pod, si la organización prefiere tener una suscripción independiente para la configuración de Unified Access Gateway externa del pod y, asimismo, seleccionar que los recursos de puerta de enlace se implementen en una instancia de grupo de recursos específico que la organización configure a tal fin, la función personalizada para la suscripción de esa puerta de enlace puede tener más permisos detallados y de ámbito restringido que la función personalizada para la suscripción del pod.

Breve introducción a las funciones personalizadas

El concepto general es que Horizon Cloud necesita realizar ciertas operaciones en la suscripción del pod y sus grupos de recursos para crear y mantener correctamente los recursos necesarios para tener un pod y sus configuraciones de puerta de enlace.

Como ejemplo sencillo, debido a que la arquitectura de la puerta de enlace y el pod requieren máquinas virtuales con NIC, Horizon Cloud necesita poder crear máquinas virtuales y NIC en la suscripción, y conectar dichas NIC a subredes en la red virtual de la suscripción.

En Microsoft Azure, una función proporciona el conjunto de operaciones de administración que la entidad de servicio de un registro de aplicaciones puede realizar. Una operación de administración es una combinación de los recursos y las acciones realizadas en ese recurso.

Las capacidades de registro de la aplicación de Horizon Cloud en la suscripción del pod y en la suscripción de la puerta de enlace (opcional) se pueden restringir a las operaciones mínimas requeridas, siguiendo para ello las reglas descritas a continuación.

Descripción general de los casos prácticos disponibles

Cuando se debaten las operaciones requeridas de Horizon Cloud en las suscripciones y los grupos de recursos, existen estos casos prácticos.

Nota: En el caso práctico de las dos suscripciones, la función para el registro de la aplicación en la suscripción del pod debe seguir las mismas reglas que se necesitan en el caso práctico de suscripción única.
Caso práctico Descripción
Una sola suscripción utilizada por Horizon Cloud para los pods y sus configuraciones de instancia de Unified Access Gateway externa.

En este caso, se debe conceder acceso a la entidad de servicio en el nivel de suscripción del pod. La función asignada a la entidad de servicio en ese nivel debe permitir que las acciones que Horizon Cloud deba realizar en su suscripción creen correctamente en esa suscripción los recursos necesarios y funcionen en dichos recursos a lo largo del tiempo. Por ejemplo, en este caso, la función debe proporcionar la capacidad de crear los grupos de recursos predeterminados, los grupos de seguridad de red, las máquinas virtuales, etc.

Dos suscripciones, y desea que Horizon Cloud cree automáticamente los recursos y los grupos de recursos necesarios de la puerta de enlace en la suscripción especificada de la puerta de enlace externa, igual que en la suscripción del pod.
  • Una suscripción especificada que se utilice para los recursos de la configuración de la instancia de Unified Access Gateway externa
  • Una suscripción para el resto de los recursos del pod

Cuando se utiliza esta opción, se debe conceder acceso a la entidad de servicio para cada suscripción en el nivel de suscripción, con permisos que permitan que las acciones sean las mismas que las del caso práctico de suscripción única descrito anteriormente.

Dos suscripciones como anteriormente, pero, en lugar de hacer que Horizon Cloud cree automáticamente los grupos de recursos y los recursos necesarios de la puerta de enlace externa, cree un grupo de recursos con anticipación en la suscripción especificada de la puerta de enlace externa y que Horizon Cloud implemente los recursos de la puerta de enlace externa a ese grupo de recursos existente.

Dos opciones para conceder acceso a la entidad de servicio utilizada para implementar la puerta de enlace externa:

  • Conceda acceso al nivel de suscripción, igual que en el caso anterior.
  • Utilice la combinación siguiente:
    • En el nivel de suscripción, conceda acceso con la función integrada de Lector.
    • En el nivel del grupo de recursos designado, conceda acceso con los permisos definidos en una función personalizada. Los permisos concedidos en el nivel de grupo de recursos deben proporcionar las operaciones que Horizon Cloud necesita realizar en el grupo de recursos para implementar y configurar los recursos de la puerta de enlace externa allí.

      Además de los permisos en el grupo de recursos, Horizon Cloud necesita los permisos para realizar las siguientes acciones, en función de los planes de implementación:

      • Si esta implementación va a utilizar subredes creadas previamente en la red virtual de esa suscripción, Horizon Cloud necesita la capacidad de crear NIC y grupos de seguridad de red (NSG) en las subredes. Los permisos necesarios en la red virtual a la que pertenece la subred son Microsoft.Network/virtualNetworks/subnets/* y Microsoft.Network/networkSecurityGroups/*
      • Si esta implementación va a hacer que Horizon Cloud genere las subredes, además de los permisos Microsoft.Network/virtualNetworks/subnets/* y Microsoft.Network/networkSecurityGroups/* anteriores, Horizon Cloud necesita poder crear las subredes. El permiso requerido en la red virtual es Microsoft.Network/virtualNetworks/write
      • Si la implementación de la puerta de enlace externa va a especificar el uso de una dirección IP pública, Horizon Cloud debe poder crear direcciones IP públicas en el grupo de recursos designado. El permiso requerido en el grupo de recursos designado es Microsoft.Network/publicIPAddresses
Cuando la VNet tiene rutas personalizadas. La nube de Microsoft Azure tiene una función llamada rutas personalizadas. Si la VNet tiene rutas personalizadas, se necesita un permiso (además de todos los necesarios en los casos prácticos anteriores): Microsoft.Network/routeTables/join/action.

Cuando se utiliza una sola suscripción para el pod y sus configuraciones de puerta de enlace, o mediante una suscripción independiente para la configuración de la instancia de Unified Access Gateway externa con los permisos establecidos en el nivel de suscripción

En estos casos prácticos, los permisos se asignan en el nivel de suscripción. La función personalizada debe permitir las operaciones incluidas en la siguiente tabla. El carácter * (carácter comodín) otorga acceso a todas las operaciones que coinciden con la cadena en la operación indicada.

Tabla 1. Operaciones de recursos de Microsoft Azure que se deben permitir en la función personalizada al asignar permisos en el nivel de suscripción
Operación Descripción en la documentación de 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

El siguiente bloque de código JSON es un ejemplo para ilustrar el aspecto que puede tener una definición de función personalizada denominada Horizon Cloud Pod cuando tiene el conjunto de operaciones precedentes. El ID es el identificador único del rol personalizado. Cuando se utiliza Azure PowerShell o la CLI de Azure para crear una función personalizada, este ID se genera automáticamente. En la variable mysubscriptionId1, sustituya el ID de la suscripción en la que se va a usar la función personalizada (esto es, la suscripción del pod o la suscripción de puerta de enlace opcional).

Tabla 2. JSON de ejemplo para una función que permite las operaciones requeridas de Horizon Cloud al asignar permisos en el nivel de suscripción
{
"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"
  ]
}

Cuando hay rutas personalizadas en la VNet y sus subredes

La nube de Microsoft Azure tiene una función llamada rutas personalizadas.

Si tiene estas rutas agregadas a la VNet y sus subredes, necesita este permiso adicional.

Tabla 3. Operación de recursos de Microsoft Azure que se debe permitir si la VNet tiene rutas personalizadas.
Operación Descripción en la documentación de Microsoft Azure
Microsoft.Network/routeTables/join/action https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork

Cuando se utiliza una suscripción independiente para la configuración de la instancia de Unified Access Gateway externa, con una implementación en un grupo de recursos personalizado, con la función de Lector en el nivel de suscripción y los permisos adicionales necesarios asignados en niveles detallados

Respecto a este caso práctico, en el nivel de suscripción de la suscripción de la puerta de enlace externa, la organización puede utilizar la función Reader integrada para el registro de la aplicación de Horizon Cloud, además de una función personalizada en el nivel del grupo de recursos con nombre.

La organización crearía una función personalizada con los permisos de la siguiente tabla. Esa función personalizada se asignaría a continuación al registro de la aplicación de Horizon Cloud para que funcione con el grupo de recursos con nombre designado a tal efecto en la suscripción de la puerta de enlace externa. Usted o su organización habría creado previamente ese grupo de recursos con nombre en la suscripción en la que se está implementando la puerta de enlace externa.

También se requieren algunos permisos específicos en las subredes y en la red virtual, dependiendo de las opciones de implementación planificadas:

  • Si esta implementación de puerta de enlace externa va a utilizar subredes creadas con anticipación, Horizon Cloud necesita la capacidad de crear NIC y grupos de seguridad de red (NSG) en dichas subredes. Los permisos necesarios en la red virtual a la que pertenece la subred son Microsoft.Network/virtualNetworks/subnets/* y Microsoft.Network/networkSecurityGroups/*.
  • Si esta implementación de puerta de enlace externa va a hacer que Horizon Cloud genere las subredes, además de los permisos Microsoft.Network/virtualNetworks/subnets/* y Microsoft.Network/networkSecurityGroups/* anteriores, Horizon Cloud necesita poder crear las subredes. El permiso requerido en la red virtual de la suscripción es Microsoft.Network/virtualNetworks/write
  • Si la implementación va a especificar el uso de una dirección IP pública para la configuración de la puerta de enlace externa, Horizon Cloud debe poder crear direcciones IP públicas en el grupo de recursos designado. El permiso requerido en el grupo de recursos designado es Microsoft.Network/publicIPAddresses

Se requieren las siguientes operaciones permitidas en el grupo de recursos designado. El * (carácter comodín) otorga acceso a todas las operaciones que coinciden con la cadena en la operación del proveedor de recursos indicado.

Tabla 4. Operaciones de recursos de Microsoft Azure que se deben permitir en el grupo de recursos especificado
Operación Descripción en la documentación de 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/*, si la implementación va a especificar el uso de una dirección IP pública para la implementación de la puerta de enlace externa. 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