Microsoft Azure サブスクリプションおよびリソース グループで操作を実行するために Horizon Cloud によって使用されるサービス プリンシパルには、サービス プリンシパルがそのサブスクリプションとそのリソース グループで実行できる、許可された操作を指定するロールが割り当てられている必要があります。Microsoft Azure の組み込みの 共同作成者 ロールは、Horizon Cloud に必要なすべての操作に対して提供されますが、それは最も広範な権限を付与することによって実現されます。Microsoft Azure の組み込みの 共同作成者 ロールをサブスクリプション レベルで使用するのではなく、最小限の権限セット(関連付けられたサブスクリプションで Horizon Cloud が必要とする操作の最小のセットを範囲としたもの)を持つカスタム ロールを作成し、そのカスタム ロールをサブスクリプション レベルでのサービス プリンシパルに割り当てることができます。ポッドの外部 Unified Access Gateway 構成に別個のサブスクリプションを使用する方式を採用し、自分で作成して維持するリソース グループにゲートウェイ リソースをデプロイするように選択した場合は、その別個のサブスクリプションにおいてよりきめ細かく範囲を限定した権限をサービス プリンシパルに割り当てるオプションを利用できます。

包括的な概念として、Horizon Cloud は、ポッドおよびそのゲートウェイ構成を持つために必要なリソースを正常に作成および維持するために、サブスクリプションおよびそのリソース グループで特定の操作を実行する必要があります。単純な例として、ポッドとゲートウェイ アーキテクチャでは NIC を備えた仮想マシンが必要であるため、Horizon Cloud にはサブスクリプション内で仮想マシンと NIC を作成し、それらの NIC をサブスクリプションの VNet のサブネットに接続する機能が必要となります。ポッドおよびゲートウェイのデプロイのために選択する一部のオプションによって、Horizon Cloud が実行する必要のある操作のセットが決まります。ポッドのデプロイおよび外部ゲートウェイ構成のために採用されているオプションに応じて、以下で説明するルールに従い、サブスクリプション内の Horizon Cloud の機能を、必要最小限の操作に制限することができます。

Microsoft Azure のカスタム ロールとカスタム ロールを作成するための手順については、Microsoft Azure ドキュメントの「Azure リソースのカスタム ロール」トピックを参照してください。ロールの仕組み、その構造、および管理操作の構造の詳細については、Microsoft Azure ドキュメントの「Azure リソースのロール定義の理解」を参照してください。このドキュメントのトピックで説明するとおり、ロール定義は権限のコレクションです。このロール定義は、略してロールと呼ばれます。ロールには、そのロールが割り当てられているサービス プリンシパルによって実行できる管理操作と、実行できない管理操作がリストされます。管理操作は、リソースとそのリソースに対して実行されるアクションの組み合わせです。

使用可能な使用事例の概要

Microsoft Azure のサブスクリプションとリソース グループにおいて Horizon Cloud で必要とされる操作については、ここに記載された使用事例で説明できます。

注: 2 つのサブスクリプションの使用事例で、残りのポッド リソースに対して指定されているサブスクリプションに対して作成されたサービス プリンシパルのロールは、単一サブスクリプションの使用事例で必要なルールと同じルールに従う必要があります。
使用事例 説明
ポッドとその外部 Unified Access Gateway 構成の Horizon Cloud によって使用される単一サブスクリプション。

この場合、サブスクリプション レベルでサービス プリンシパルにアクセス権を付与する必要があります。そのレベルでサービス プリンシパルに割り当てられたロールは、サブスクリプション内で Horizon Cloud が実行する必要があるアクションによって、そのサブスクリプション内で必要なリソースが正常に作成され、時間の経過とともにそれらのリソースを操作できるようにする必要があります。たとえば、この場合、このロールはデフォルトのリソース グループ、ネットワーク セキュリティ グループ、仮想マシンなどを作成可能である必要があります。

2 つのサブスクリプションを使用していて、外部ゲートウェイの指定されたサブスクリプションで、ゲートウェイに必要なリソース グループとリソースを、残りのポッド リソースのサブスクリプションの場合と同様に Horizon Cloud が自動作成することを望んでいる場合。
  • 外部 Unified Access Gateway 構成のリソースに対して使用するよう指定されたサブスクリプションが 1 つ
  • 残りのポッド リソース用のサブスクリプションが 1 つ

このオプションを使用する場合、各サブスクリプションのサービス プリンシパルに、サブスクリプション レベルでのアクセス権を、上記で説明した単一サブスクリプションの使用事例と同じアクションを許可する権限とともに付与する必要があります。

上記と同様に 2 つのサブスクリプションを使用しているが、外部ゲートウェイの必要なリソース グループおよびリソースを Horizon Cloud が自動作成するのではなく、その外部ゲートウェイの指定されたサブスクリプションで事前にリソース グループを作成し、Horizon Cloud が外部ゲートウェイのリソースを既存のリソース グループにデプロイすることを望んでいる場合。

外部ゲートウェイのデプロイに使用されるサービス プリンシパルへのアクセス権を付与するためのオプションは次の 2 つです。

  • 上記の場合と同じように、サブスクリプション レベルでのアクセス権を付与します。
  • 次の組み合わせを使用します。
    • サブスクリプション レベルで、組み込みのリーダー ロールを使用してアクセス権を付与します。
    • 名前付きリソース グループ レベルで、カスタム ロールで定義されている権限を使用してアクセス権を付与します。リソース グループ レベルで付与される権限は、外部ゲートウェイのリソースをデプロイおよび構成するために Horizon Cloud がリソース グループで実行する必要のある操作のために用意する必要があるものです。

      Horizon Cloud は、リソース グループの権限に加えて、デプロイ プランに応じて次のアクションを実行するための権限を必要とします。

      • このデプロイにおいて、サブスクリプションの VNet で事前に作成したサブネットが使用される場合、Horizon Cloud はそれらのサブネットに NIC およびネットワーク セキュリティ グループ (NSG) を作成する機能を必要とします。サブネットが属する VNet で必要な権限は Microsoft.Network/virtualNetworks/subnets/*Microsoft.Network/networkSecurityGroups/* です
      • このデプロイによって Horizon Cloud がサブネットを生成する場合、Horizon Cloud は上記の Microsoft.Network/virtualNetworks/subnets/* および Microsoft.Network/networkSecurityGroups/* の権限に加えて、サブネットを作成する機能を必要とします。VNet で必要な権限は Microsoft.Network/virtualNetworks/write です
      • 外部ゲートウェイのデプロイでパブリック IP アドレスを使用するように指定されている場合、Horizon Cloud は名前付きリソース グループにパブリック IP アドレスを作成する機能を必要とします。名前付きリソース グループに必要な権限は Microsoft.Network/publicIPAddresses です

ポッドとそのゲートウェイ構成に対して単一のサブスクリプションを使用する場合、またはサブスクリプション レベルで設定された権限がある外部 Unified Access Gateway 構成に対して別個のサブスクリプションを使用する場合

これらの使用事例では、サブスクリプション レベルでの権限が割り当てられます。Horizon Cloud ワークフローのサブスクリプション手順で指定したサービス プリンシパルに対して設定されたカスタム ロールの場合、カスタム ロールの定義で次のアクションが必要となります。*(ワイルドカード文字)は、リストされているリソース プロバイダ操作内の文字列と一致するすべての操作へのアクセスを許可します。操作の説明については、下記のリンクにある Microsoft Azure のドキュメントを参照してください。

表 1. サブスクリプション レベルで権限を割り当てるときに、カスタム ロールで許可する必要がある Microsoft Azure リソースの操作
操作 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

次の JSON コード ブロックは、Horizon Cloud Pod という名前のカスタム ロール定義に、一連の事前の操作がある場合にどのような状態になるかを示す例です。プロパティと使用方法の説明については、Microsoft Azure ドキュメントの「Azure リソースのカスタム ロール」トピックで「カスタム ロールのプロパティ」セクションを参照してください。ID は、カスタム ロールの一意の ID です。Azure PowerShell または Azure CLI を使用してカスタム ロールを作成すると、この ID は新しいロールを作成したときに自動的に生成されます。「チュートリアル:Azure CLI を使用して Azure リソースのカスタム ロールを作成する」で説明するとおり、mysubscriptionId1 は独自のサブスクリプションの ID です。

表 2. サブスクリプション レベルで権限を割り当てるときに Horizon Cloud が必要とする操作を許可するロールの JSON の例
{
"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/*"
  ],
"NotActions": [],
"DataActions": [],
"NotDataActions": [],
"AssignableScopes": [
  "/subscriptions/mysubscriptionId1"
  ]
}

外部 Unified Access Gateway 構成に対して別個のサブスクリプションを使用し、カスタム リソース グループにデプロイし、サブスクリプション レベルでのリーダー ロールと、きめ細かいレベルでの追加の必要な権限が割り当てられている場合

この使用事例では、組み込みの リーダー ロールをサブスクリプション レベルでサービス プリンシパルに割り当ててから、次の表の権限を指定するカスタム ロールを使用して、名前付きリソース グループのレベルでアクセス権を付与することができます。計画したデプロイ オプションによっては、サブネットおよび VNet での追加の権限が必要になります。

  • この外部ゲートウェイのデプロイにおいて、事前に作成したサブネットが使用される場合、Horizon Cloud はそれらのサブネットに NIC およびネットワーク セキュリティ グループ (NSG) を作成する機能を必要とします。サブネットが属する VNet で必要な権限は Microsoft.Network/virtualNetworks/subnets/*Microsoft.Network/networkSecurityGroups/* です
  • この外部ゲートウェイのデプロイによって Horizon Cloud がサブネットを生成する場合、Horizon Cloud は上記の Microsoft.Network/virtualNetworks/subnets/* および Microsoft.Network/networkSecurityGroups/* の権限に加えて、サブネットを作成する機能を必要とします。サブスクリプションの VNet で必要な権限は Microsoft.Network/virtualNetworks/write です
  • デプロイで、外部ゲートウェイの構成にパブリック IP アドレスを使用するように指定されている場合、Horizon Cloud は名前付きリソース グループにパブリック IP アドレスを作成する機能を必要とします。名前付きリソース グループに必要な権限は Microsoft.Network/publicIPAddresses です

名前付きリソース グループでは、次の許可された操作が必要となります。*(ワイルドカード文字)は、リストされているリソース プロバイダ操作内の文字列と一致するすべての操作へのアクセスを許可します。操作の説明については、下記のリンクにある Microsoft Azure のドキュメントを参照してください。

表 3. 指定されたリソース グループで許可される必要がある Microsoft Azure リソースの操作
操作 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/*、デプロイで、外部ゲートウェイのデプロイにパブリック IP アドレスを使用するよう指定されている場合。 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