Damit API-Aufrufe im Abonnement des Pods oder im optionalen Abonnement für externe Gateways durchgeführt und ihre VDI-bezogenen Vorgänge über die Horizon Cloud-App-Registrierung ausgeführt werden können, muss dieser eine Rolle zugewiesen werden. In der Regel wird zu diesem Zweck die Rolle Contributor verwendet. Organisationen, die die Verwendung der Contributor-Rolle vermeiden möchten, können eine benutzerdefinierte Rolle erstellen, die der Horizon Cloud-App-Registrierung die Fähigkeit verleiht, die erforderlichen API-Aufrufe auszuführen.

Zusätzlich zu einer benutzerdefinierten Rolle für die Horizon Cloud-App-Registrierung im Pod-Abonnement kann die benutzerdefinierte Rolle für das Gateway-Abonnement über präzisere, enger definierte Berechtigungen verfügen als die benutzerdefinierte Rolle für das Pod-Abonnement, wenn Ihre Organisation den Ansatz bevorzugt, ein separates Abonnement für die Konfiguration des externen Unified Access Gateway-Gateways zu haben und auch die Gateway-Ressourcen in einer spezifischen Ressourcengruppe bereitzustellen, die Ihre Organisation für diesen Zweck einrichtet.

Kurze Einführung in benutzerdefinierte Rollen

Das übergeordnete Konzept besteht darin, dass Horizon Cloud bestimmte Vorgänge im Abonnement des Pods und die zugehörigen Ressourcengruppen ausführen muss, um die Ressourcen erfolgreich zu erstellen und zu verwalten, die für einen Pod und die zugehörigen Gateway-Konfigurationen erforderlich sind.

Einfaches Beispiel: da die Architektur für Pod und Gateway virtuelle Maschinen mit Netzwerkkarten erfordert, muss Horizon Cloud virtuelle Maschinen und Netzwerkkarten in Ihrem Abonnement erstellen und diese Netzwerkkarten an Subnetze im VNet des Abonnements anhängen können.

In Microsoft Azure stellt eine Rolle eine Reihe von Verwaltungsvorgängen bereit, die vom Dienstprinzipal einer App-Registrierung durchgeführt werden können. Ein Verwaltungsvorgang ist eine Kombination aus der Ressource und der Aktion, die für diese Ressource durchgeführt wird.

Sie können die Funktionen der Horizon Cloud-App-Registrierung im Abonnement des Pods und im (optionalen) Gateway-Abonnement auf die erforderlichen Mindestvorgänge beschränken, indem Sie die unten beschriebenen Regeln befolgen.

Übersicht über die verfügbaren Anwendungsfälle

Bei der Erörterung der für Horizon Cloud erforderlichen Vorgänge in Abonnements und Ressourcengruppen gibt es folgende Anwendungsfälle.

Hinweis: Im Anwendungsfall mit zwei Abonnements muss die Rolle für die App-Registrierung im Abonnement des Pods denselben Regeln folgen wie im Anwendungsfall mit einem Abonnement.
Anwendungsfall Beschreibung
Ein einzelnes Abonnement, das von Horizon Cloud für Pods und deren externe Unified Access Gateway-Konfigurationen verwendet wird.

In diesem Fall muss dem Dienstprinzipal auf der Pod-Abonnementebene Zugriff gewährt werden. Die dem Dienstprinzipal auf dieser Ebene zugewiesene Rolle muss die Aktionen zulassen, die Horizon Cloud in Ihrem Abonnement ausführen muss, um darin die erforderlichen Ressourcen erfolgreich erstellen und im Laufe der Zeit mit diesen Ressourcen arbeiten zu können. Beispiel: in diesem Fall muss die Rolle die Möglichkeit bieten, die Standard-Ressourcengruppen, Netzwerksicherheitsgruppen, virtuellen Maschinen und so weiter zu erstellen.

Sie haben zwei Abonnements und möchten, dass Horizon Cloud die erforderlichen Ressourcengruppen und Ressourcen des Gateways im angegebenen Abonnement des externen Gateways automatisch erstellt, so wie es im Abonnement des Pods der Fall ist.
  • Ein angegebenes Abonnement zur Verwendung für die Ressourcen der externen Unified Access Gateway-Konfiguration
  • Ein Abonnement für die restlichen Pod-Ressourcen

Bei Verwendung dieser Option muss dem Dienstprinzipal für die einzelnen Abonnements der Zugriff auf Abonnementebene gewährt werden, wobei Berechtigungen erteilt werden, die dieselben Aktionen wie für das oben beschriebene Anwendungsbeispiel eines einzelnen Abonnements zulassen.

Zwei Abonnements wie oben. Anstatt jedoch Horizon Cloud die erforderlichen Ressourcengruppen und Ressourcen automatisch erstellen zu lassen, erstellen Sie vorab im angegebenen Abonnement dieses externen Gateways eine Ressourcengruppe. Zudem soll Horizon Cloud die Ressourcen des externen Gateways in dieser vorhandenen Ressourcengruppe bereitstellen.

Zwei Möglichkeiten zum Gewähren des Zugriffs auf den für die Bereitstellung des externen Gateways verwendeten Dienstprinzipals:

  • Gewähren Sie Zugriff auf Abonnementebene wie im obigen Anwendungsfall.
  • Verwenden Sie die folgende Kombination:
    • Gewähren Sie den Zugriff auf Abonnementebene mithilfe der integrierten Rolle Leser.
    • Gewähren Sie den Zugriff auf Ebene der benannten Ressourcengruppe mithilfe von Berechtigungen, die in einer benutzerdefinierten Rolle definiert sind. Die auf Ebene der Ressourcengruppe gewährten Berechtigungen müssen die Vorgänge bereitstellen, die Horizon Cloud in der Ressourcengruppe ausführen muss, um dort die Ressourcen des externen Gateways bereitzustellen und zu konfigurieren.

      Zusätzlich zu den Berechtigungen für die Ressourcengruppe benötigt Horizon Cloud je nach Ihren Bereitstellungsplänen die Berechtigungen zum Durchführen der folgenden Aktionen:

      • Wenn in dieser Bereitstellung Subnetze verwendet werden, die Sie vorab im VNet dieses Abonnements erstellen, muss Horizon Cloud in diesen Subnetzen Netzwerkkarten und Netzwerksicherheitsgruppen (NSGs) erstellen können. Die für das VNet erforderlichen Berechtigungen, zu dem das Subnetz gehört, lauten Microsoft.Network/virtualNetworks/subnets/* und Microsoft.Network/networkSecurityGroups/*
      • Wenn bei dieser Bereitstellung durch Horizon Cloud Subnetze generiert werden, benötigt Horizon Cloud neben den zuvor genannten Berechtigungen Microsoft.Network/virtualNetworks/subnets/* und Microsoft.Network/networkSecurityGroups/* die Möglichkeit, die Subnetze zu erstellen. Die im VNet erforderliche Berechtigung lautet Microsoft.Network/virtualNetworks/write
      • Wenn die externe Gateway-Bereitstellung unter Angabe einer öffentlichen IP-Adresse erfolgt, muss Horizon Cloud öffentliche IP-Adressen in der benannten Ressourcengruppe erstellen können. Die für die benannte Ressourcengruppe erforderliche Berechtigung lautet Microsoft.Network/publicIPAddresses
Wenn Ihr VNet über benutzerdefinierte Routen verfügt. Microsoft Azure Cloud verfügt über eine Funktion namens „Benutzerdefinierte Routen“. Wenn Ihr VNet über benutzerdefinierte Routen verfügt, ist zusätzlich zu allen für die obigen Anwendungsfälle eine Berechtigung erforderlich: Microsoft.Network/routeTables/join/action.

Bei Verwendung eines einzelnen Abonnements für den Pod und dessen Gateway-Konfigurationen oder eines separaten Abonnements für die externe Unified Access Gateway-Konfiguration mit auf Abonnementebene festgelegten Berechtigungen

Für diese Anwendungsfälle werden die Berechtigungen auf Ebene des Abonnements zugewiesen. Die benutzerdefinierte Rolle muss die in der folgenden Tabelle aufgeführten Vorgänge zulassen. * (Platzhalterzeichen) gewährt Zugriff auf alle Vorgänge, die mit der Zeichenfolge innerhalb des aufgeführten Vorgangs übereinstimmen.

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

Der folgende JSON-Codeblock ist ein Beispiel zur Veranschaulichung, wie eine benutzerdefinierte Rollendefinition mit der Bezeichnung Horizon Cloud-Pod aussehen kann, wenn sie den Satz mit vorstehenden Vorgängen enthält. Die ID ist die eindeutige ID der benutzerdefinierten Rolle. Wenn Azure PowerShell oder Azure CLI zum Erstellen einer benutzerdefinierten Rolle verwendet wird, wird diese ID automatisch generiert. Ersetzen Sie die Variable mysubscriptionId1 durch die ID des Abonnements, in dem die benutzerdefinierte Rolle verwendet werden soll: das Abonnement des Pods oder das optionale Gateway-Abonnement.

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

Wenn sich benutzerdefinierte Routen in Ihrem VNet und seinen Subnetzen befinden

Microsoft Azure Cloud verfügt über eine Funktion namens „Benutzerdefinierte Routen“.

Wenn Sie Ihrem VNet und seinen Subnetzen solche Routen hinzugefügt haben, ist diese zusätzliche Berechtigung erforderlich.

Tabelle 3. Microsoft Azure-Ressourcenvorgang, der zulässig sein muss, wenn Ihr VNet über benutzerdefinierte Routen verfügt
Vorgang Beschreibung in der Microsoft Azure-Dokumentation
Microsoft.Network/routeTables/join/action https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork

Bei Verwendung eines separaten Abonnements für die externe Unified Access Gateway-Konfiguration, bei Bereitstellung in einer benutzerdefinierten Ressourcengruppe mit der Rolle „Leser“ auf Abonnementebene und zusätzlichen erforderlichen Berechtigungen, die auf differenzierten Ebenen zugewiesen werden

Für diesen Anwendungsfall kann Ihre Organisation auf der Abonnementebene des Abonnements des externen Gateways die integrierte Rolle Reader für die Horizon Cloud-App-Registrierung sowie eine benutzerdefinierte Rolle auf der Ebene der benannten Ressourcengruppe verwenden.

Ihre Organisation würde eine benutzerdefinierte Rolle erstellen, die die Berechtigungen in der folgenden Tabelle angibt. Diese benutzerdefinierte Rolle wird dann der Horizon Cloud-App-Registrierung zugewiesen, um mit der speziell benannten Ressourcengruppe im Abonnement des externen Gateways zu arbeiten. Sie oder Ihre Organisation würden diese benannte Ressourcengruppe in dem Abonnement, in dem Sie das externe Gateway bereitstellen, vorab erstellen.

Je nach den geplanten Bereitstellungsoptionen sind auch einige spezifische Berechtigungen für Subnetze und das VNet erforderlich:

  • Wenn in der Bereitstellung dieses externen Gateways Subnetze verwendet werden, die vorab erstellt wurden, muss Horizon Cloud in diesen Subnetzen Netzwerkkarten und Netzwerksicherheitsgruppen (NSGs) erstellen können. Die für das VNet erforderlichen Berechtigungen, zu dem das Subnetz gehört, lauten Microsoft.Network/virtualNetworks/subnets/* und Microsoft.Network/networkSecurityGroups/*.
  • Wenn bei dieser externen Gateway-Bereitstellung durch Horizon Cloud Subnetze generiert werden, benötigt Horizon Cloud neben den zuvor genannten Berechtigungen Microsoft.Network/virtualNetworks/subnets/* und Microsoft.Network/networkSecurityGroups/* die Möglichkeit, die Subnetze zu erstellen. Die im VNet des Abonnements erforderliche Berechtigung lautet Microsoft.Network/virtualNetworks/write
  • Wenn die Bereitstellung unter Angabe einer öffentlichen IP-Adresse für die externe Gateway-Konfiguration erfolgt, muss Horizon Cloud öffentliche IP-Adressen in der benannten Ressourcengruppe erstellen können. Die für die benannte Ressourcengruppe erforderliche Berechtigung lautet Microsoft.Network/publicIPAddresses

Die folgenden zulässigen Vorgänge sind in der benannten Ressourcengruppe erforderlich. * (Platzhalterzeichen) gewährt Zugriff auf alle Vorgänge, die mit der Zeichenfolge innerhalb des aufgelisteten Ressourcenanbietervorgangs übereinstimmen.

Tabelle 4. Microsoft Azure-Ressourcenvorgänge, die in der angegebenen Ressourcengruppe zulässig sein müssen
Vorgang Beschreibung in der Microsoft Azure-Dokumentation
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/*, wenn die Bereitstellung unter Angabe einer öffentlichen IP-Adresse für die externe Gateway-Bereitstellung erfolgt. 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