Le rôle Contributor est généralement utilisé pour activer le processus d'enregistrement d'applications Horizon Cloud afin d'effectuer des appels d'API dans l'abonnement Microsoft Azure. Si vous préférez éviter l'utilisation du rôle Contributor, vous pouvez créer un rôle personnalisé à cette fin. Le rôle personnalisé dispose de certaines autorisations requises et facultatives que vous devez connaître lorsque vous créez un principal de service.

Pour créer un rôle personnalisé, utilisez un outil, tel qu'Azure PowerShell ou Azure CLI, et créez une définition de rôle personnalisé qui, au minimum, inclut les autorisations obligatoires répertoriées dans cette rubrique. Reportez-vous à l'exemple JSON ci-après. Pour plus d'informations sur les autorisations Microsoft Azure spécifiques répertoriées sur cette page, reportez-vous à la section Opérations du fournisseur de ressources Azure.

Autorisations obligatoires

Tableau 1. Opérations sur les ressources Microsoft Azure qui doivent être autorisées dans le rôle personnalisé lors de l'attribution d'autorisations au niveau de l'abonnement
Opération
Microsoft.Authorization/*/read
Microsoft.Compute/*/read
Microsoft.Compute/availabilitySets/*
Microsoft.Compute/disks/*
Microsoft.Compute/galleries/read
Microsoft.Compute/galleries/write
Microsoft.Compute/galleries/delete
Microsoft.Compute/galleries/images/*
Microsoft.Compute/galleries/images/versions/*
Microsoft.Compute/images/*
Microsoft.Compute/locations/*
Microsoft.Compute/snapshots/*
Microsoft.Compute/virtualMachines/*
Microsoft.Compute/virtualMachineScaleSets/*
Microsoft.ContainerService/managedClusters/delete
Microsoft.ContainerService/managedClusters/read
Microsoft.ContainerService/managedClusters/write
Microsoft.ContainerService/managedClusters/commandResults/read
Microsoft.ContainerService/managedClusters/runcommand/action
Microsoft.ContainerService/managedClusters/upgradeProfiles/read
Microsoft.ManagedIdentity/userAssignedIdentities/*/assign/action
Microsoft.ManagedIdentity/userAssignedIdentities/*/read
Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/read
Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/write
Microsoft.Network/loadBalancers/*
Microsoft.Network/networkInterfaces/*
Microsoft.Network/networkSecurityGroups/*
Microsoft.Network/virtualNetworks/read
Microsoft.Network/virtualNetworks/write
Microsoft.Network/virtualNetworks/checkIpAddressAvailability/read
Microsoft.Network/virtualNetworks/subnets/*
Microsoft.Network/virtualNetworks/virtualNetworkPeerings/read
Microsoft.ResourceGraph/*
Microsoft.Resources/deployments/*
Microsoft.Resources/subscriptions/read
Microsoft.Resources/subscriptions/resourceGroups/*
Microsoft.ResourceHealth/availabilityStatuses/read
Microsoft.Storage/*/read
Microsoft.Storage/storageAccounts/*

Si vous prévoyez d'utiliser App Volumes, assurez-vous d'avoir configuré les autorisations répertoriées dans le tableau au niveau de l'abonnement. Pour plus d'informations sur ces autorisations, reportez-vous à la section Point de terminaison privé Azure pour un compte de stockage d'applications App Volumes.

Opération
Microsoft.Network/locations/availablePrivateEndpointTypes/read
Microsoft.Network/privateEndpoints/read
Microsoft.Network/privateEndpoints/write
Microsoft.Network/privateEndpoints/delete
Microsoft.Network/virtualNetworks/read
Microsoft.Network/virtualNetworks/subnets/read
Microsoft.Network/virtualNetworks/subnets/write
Microsoft.Network/virtualNetworks/subnets/join/action
Microsoft.Resources/deployments/*
Microsoft.Resources/subscriptions/read
Microsoft.Resources/subscriptions/resourceGroups/read

Autorisations facultatives

Les autorisations suivantes ne sont pas obligatoires pour le déploiement d'Horizon Edge dans Microsoft Azure. Cependant, les fonctionnalités d'Horizon Universal Console qui reposent sur ces autorisations facultatives ne fonctionnent pas si vous ne les incluez pas.

Tableau 2. Opérations sur les ressources Microsoft Azure qui sont facultatives dans le rôle personnalisé lors de l'attribution d'autorisations au niveau de l'abonnement
Opération
Microsoft.KeyVault/*/read
Microsoft.KeyVault/vaults/*
Microsoft.KeyVault/vaults/secrets/*
Des autorisations du coffre de clés sont requises pour le chiffrement du disque des VM de pool.
Microsoft.Network/natGateways/join/action
Cette autorisation est requise lorsque le type de connectivité Azure Private Link est sélectionné lors de la création d'Horizon Edge et qu'une passerelle NAT est associée au sous-réseau de gestion. L'autorisation est requise pour créer les ressources de point de terminaison privé.
Microsoft.Network/natGateways/read
Cette autorisation est requise pour confirmer que la passerelle NAT du sous-réseau de gestion est, le cas échéant, correctement configurée, lorsque le type de cluster sortant est sélectionné comme passerelle NAT pour Horizon Edge.
Microsoft.Network/privateEndpoints/write
Microsoft.Network/privateEndpoints/read
Des autorisations de point de terminaison privé sont requises pour déployer Horizon Edge avec Azure Private Link.
Microsoft.Network/publicIPAddresses/* Une autorisation d'adresse IP publique est requise pour déployer une instance d'Horizon Edge avec des instances d'Unified Access Gateway derrière un équilibrage de charge avec une adresse IP publique. En outre, cette autorisation est requise. pour déployer et pour ajouter une adresse IP publique à une image.
Microsoft.Network/routeTables/join/action
Cette autorisation est requise lorsque le type de connectivité Azure Private Link est sélectionné lors de la création d'Horizon Edge et qu'une table de routage est associée au sous-réseau de gestion. L'autorisation est requise pour créer les ressources de point de terminaison privé.
Microsoft.Network/routeTables/read
Cette autorisation est requise si le type de cluster sortant sélectionné pour Horizon Edge correspond aux routes définies par l'utilisateur. Il est nécessaire de valider la table de routage associée du sous-réseau de gestion pour s'assurer que la route par défaut est configurée correctement.
Note : Lors de la suppression d'un pool joint à Microsoft Entra ID ou d'une VM, le principal de service doit disposer des autorisations de suppression de l'entrée de périphérique à partir de Microsoft Entra ID.

Les autorisations sont les suivantes :

Portée : https://graph.microsoft.com/

Autorisation : Device.ReadWrite.All Read and write devices

Consentement administrateur : Yes

L'autorisation peut être accordée en accédant à l'emplacement suivant :

Abonnement > Azure Active Directory > Enregistrements d'applications > Sélectionner l'application à laquelle l'autorisation doit être accordée > Autorisation d'API > Sélectionner Microsoft Graph > Sélectionner Device.ReadWriteAll

Exemple JSON de rôle personnalisé Microsoft Azure

Le bloc de code JSON suivant est un exemple permettant d'illustrer l'apparence éventuelle d'une définition de rôle personnalisé nommée Rôle Horizon Cloud personnalisé - Titan lorsqu'elle dispose de l'ensemble des opérations obligatoires et facultatives précédentes. L'ID est l'ID unique du rôle personnalisé. Lorsque vous utilisez Azure PowerShell ou Azure CLI pour créer un rôle personnalisé, le processus génère automatiquement cet ID. Pour la variable my_subscription_ID, remplacez les ID des abonnements dans lesquels le rôle personnalisé sera utilisé.

Dans la section assignableScopes, vous pouvez utiliser plusieurs ID d'abonnements « /subscriptions/my_subscription_ID » pour permettre l'utilisation du rôle personnalisé dans plusieurs abonnements.

Tableau 3. Exemple de JSON pour un rôle autorisant les opérations requises d'Horizon Cloud lors de l'attribution d'autorisations au niveau de l'abonnement
{
    “id”: “uuid”,
    “properties”: {
        “roleName”: “Horizon Cloud Custom Role - Titan”,
        “description”: “All permissions required for deployment and operation of a Horizon Edge in Azure”,
        “assignableScopes”: [
              “/subscriptions/my_subscription_ID”
        ],
        “permissions”: [
            {
                “actions”: [
                    “Microsoft.Authorization/*/read”,
                    “Microsoft.Compute/*/read”,
                    “Microsoft.Compute/availabilitySets/*“,
                    “Microsoft.Compute/disks/*“,
                    “Microsoft.Compute/galleries/read”,
                    “Microsoft.Compute/galleries/write”,
                    “Microsoft.Compute/galleries/delete”,
                    “Microsoft.Compute/galleries/images/*”,
                    “Microsoft.Compute/galleries/images/versions/*”,
                    “Microsoft.Compute/images/*”,
                    “Microsoft.Compute/locations/*”,
                    “Microsoft.Compute/snapshots/*”,
                    “Microsoft.ContainerService/managedClusters/delete”,
                    “Microsoft.ContainerService/managedClusters/read”,
                    “Microsoft.ContainerService/managedClusters/write”,        
                    “Microsoft.ContainerService/managedClusters/commandResults/read”,
                    “Microsoft.ContainerService/managedClusters/runcommand/action”,
                    “Microsoft.ContainerService/managedClusters/upgradeProfiles/read”,
                    “Microsoft.ManagedIdentity/userAssignedIdentities/*/assign/action”,
                    “Microsoft.ManagedIdentity/userAssignedIdentities/*/read”,
                    “Microsoft.Compute/virtualMachines/*”,
                    “Microsoft.Compute/virtualMachineScaleSets/*”,
                    “Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/read”,
                    “Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/write”,
                    “Microsoft.Network/loadBalancers/*”,           
                    “Microsoft.Network/networkInterfaces/*”,
                    “Microsoft.Network/networkSecurityGroups/*”,
                    “Microsoft.Network/virtualNetworks/read”,
                    “Microsoft.Network/virtualNetworks/write”,
                    “Microsoft.Network/virtualNetworks/checkIpAddressAvailability/read”,
                    “Microsoft.Network/virtualNetworks/subnets/*”,
                    “Microsoft.Network/virtualNetworks/virtualNetworkPeerings/read”,
                    “Microsoft.ResourceGraph/*”,
                    “Microsoft.Resources/deployments/*”,
                    “Microsoft.Resources/subscriptions/read”,
                    “Microsoft.Resources/subscriptions/resourceGroups/*”,
                    “Microsoft.ResourceHealth/availabilityStatuses/read”,
                    “Microsoft.Storage/*/read”,
                    “Microsoft.Storage/storageAccounts/*”,
                    “Microsoft.KeyVault/*/read”,
                    “Microsoft.KeyVault/vaults/*”,
                    “Microsoft.KeyVault/vaults/secrets/*”,
                    “Microsoft.Network/natGateways/join/action”,
                    “Microsoft.Network/natGateways/read”,
                    “Microsoft.Network/privateEndpoints/write”,
                    “Microsoft.Network/privateEndpoints/read”,
                    “Microsoft.Network/publicIPAddresses/*”,
                    “Microsoft.Network/routeTables/join/action",
                    "Microsoft.Network/routeTables/read"
                ],
                “notActions”: [],
                “dataActions”: [],
                “notDataActions”: []
            }
        ]
    }
}