Die Rolle Contributor wird üblicherweise verwendet, um den Registrierungsvorgang der Horizon Cloud-App für API-Aufrufe im Microsoft Azure-Abonnement zu ermöglichen. Wenn Sie die Verwendung der Contributor-Rolle vermeiden möchten, können Sie eine benutzerdefinierte Rolle für diesen Zweck erstellen. Die benutzerdefinierte Rolle verfügt über bestimmte erforderliche und optionale Berechtigungen, die Sie beim Erstellen eines Dienstprinzipals beachten müssen.

Um eine benutzerdefinierte Rolle zu erstellen, verwenden Sie ein Tool wie Azure PowerShell oder Azure CLI und erstellen eine benutzerdefinierte Rollendefinition, die mindestens die in diesem Thema aufgeführten obligatorischen Berechtigungen enthält. Siehe das folgende JSON-Beispiel. Weitere Informationen zu den spezifischen Microsoft Azure-Berechtigungen, die auf dieser Seite aufgeführt sind, finden Sie unter Azure-Ressourcenanbietervorgänge.

Obligatorische Berechtigungen

Tabelle 1. Microsoft Azure-Ressourcenvorgänge, die in der benutzerdefinierten Rolle bei der Zuweisung von Berechtigungen auf Abonnementebene zulässig sein müssen
Vorgang
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/*

Wenn Sie App Volumes verwenden möchten, stellen Sie sicher, dass Sie die in der Tabelle aufgeführten Berechtigungen auf Abonnementebene konfiguriert haben. Weitere Informationen zu diesen Berechtigungen finden Sie unter Privater Azure-Endpoint für ein App Volumes-Anwendungsspeicherkonto.

Vorgang
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

Optionale Berechtigungen

Die folgenden Berechtigungen sind für die Bereitstellung von Horizon Edge in Microsoft Azure nicht obligatorisch. Funktionen in der Horizon Universal Console, die sich auf diese optionalen Berechtigungen stützen, funktionieren jedoch nicht, wenn Sie sie nicht angeben.

Tabelle 2. Microsoft Azure-Ressourcenvorgänge, die in der benutzerdefinierten Rolle beim Zuweisen von Berechtigungen auf Abonnementebene optional sind
Vorgang
Microsoft.KeyVault/*/read
Microsoft.KeyVault/vaults/*
Microsoft.KeyVault/vaults/secrets/*
Schlüsseltresor-Berechtigungen sind für die Festplattenverschlüsselung von Pool-VMs erforderlich.
Microsoft.Network/natGateways/join/action
Diese Berechtigung ist erforderlich, wenn zum Zeitpunkt der Erstellung von Horizon Edge der Konnektivitätstyp Privater Azure-Link ausgewählt wird und dem Verwaltungssubnetz ein NAT-Gateway zugeordnet ist. Die Berechtigung ist erforderlich, um die privaten Endpoint-Ressourcen zu erstellen.
Microsoft.Network/natGateways/read
Diese Berechtigung ist erforderlich, um zu überprüfen, ob das NAT-Gateway des Management-Subnetzes, falls vorhanden, richtig konfiguriert ist, wenn der ausgehende Clustertyp als NAT-Gateway für Horizon Edge ausgewählt ist.
Microsoft.Network/privateEndpoints/write
Microsoft.Network/privateEndpoints/read
Berechtigungen für private Endpoints sind für die Bereitstellung von Horizon Edge mit Azure Private Link erforderlich.
Microsoft.Network/publicIPAddresses/* Die Berechtigung „Öffentliche IP“ ist für die Bereitstellung einer Horizon Edge-Instanz mit Unified Access Gateway-Instanzen hinter einem Lastausgleichsdienst mit einer öffentlichen IP-Adresse erforderlich. Außerdem ist diese Berechtigung für die Bereitstellung und das Hinzufügen einer öffentlichen IP-Adresse zu einem Image erforderlich.
Microsoft.Network/routeTables/join/action
Diese Berechtigung ist erforderlich, wenn der Konnektivitätstyp Privater Azure-Link zum Zeitpunkt der Erstellung von Horizon Edge ausgewählt wird und dem Verwaltungssubnetz eine Routentabelle angehängt ist. Die Berechtigung ist erforderlich, um die privaten Endpoint-Ressourcen zu erstellen.
Microsoft.Network/routeTables/read
Diese Berechtigung ist erforderlich, wenn der für Horizon Edge ausgewählte ausgehende Clustertyp „Benutzerdefinierte Routen“ ist. Sie ist erforderlich, um die zugehörige Routentabelle des Management-Subnetzes zu überprüfen, um sicherzustellen, dass die Standardroute korrekt konfiguriert ist.
Hinweis: Beim Löschen eines Microsoft Entra ID-verbundenen Pools oder einer VM sollte der Dienstprinzipal über die Berechtigung verfügen, den Geräteeintrag aus Microsoft Entra ID zu löschen.

Die Berechtigungen lauten wie folgt:

Bereich: https://graph.microsoft.com/

Berechtigung: Device.ReadWrite.All Read and write devices

Administratorzustimmung: Yes

Die Berechtigung kann erteilt werden, indem Sie zum folgenden Speicherort navigieren:

Abonnement > Azure Active Directory > App-Registrierungen > Wählen Sie die App aus, für die eine Berechtigung erteilt werden soll > API-Berechtigung > Microsoft GRAPH auswählen > Device.ReadWriteAll auswählen

JSON-Beispiel für eine benutzerdefinierte Microsoft Azure-Rolle

Der folgende JSON-Codeblock ist ein Beispiel zur Veranschaulichung, wie eine benutzerdefinierte Rollendefinition mit dem Namen Benutzerdefinierte Horizon Cloud-Rolle – Titan aussehen könnte, wenn sie die oben genannten obligatorischen und optionalen Vorgänge enthält. Die ID ist die eindeutige ID der benutzerdefinierten Rolle. Wenn Sie Azure PowerShell oder Azure CLI zum Erstellen einer benutzerdefinierten Rolle verwenden, generiert der Prozess automatisch diese ID. Ersetzen Sie für die Variable my_subscription_ID die IDs der Abonnements, in denen die benutzerdefinierte Rolle verwendet wird.

Im Abschnitt assignableScopes können Sie mehrere Abonnement-IDs verwenden, „/subscriptions/my_subscription_ID“, damit die benutzerdefinierte Rolle für mehrere Abonnements verwendet werden kann.

Tabelle 3. JSON-Beispiel für eine Rolle, die die für Horizon Cloud erforderlichen Vorgänge bei der Zuweisung von Berechtigungen auf Abonnementebene zulässt
{
    “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”: []
            }
        ]
    }
}