第 1 世代 Horizon Cloud のアプリケーション登録でポッドのサブスクリプション(またはオプションの外部ゲートウェイのサブスクリプション)で API 呼び出しを行い、その VDI 関連の操作を実行できるようにするには、アプリケーション登録にロールを割り当てる必要があります。通常、この目的にはContributor ロールが使用されます。Contributor ロールの使用を回避することを希望する組織の場合は、カスタム ロールを作成し、カスタム ロールに Horizon Cloud アプリケーション登録に必要な API 呼び出しを実行する機能を付与するという目的を果たすことができます。

重要: この情報は、第 1 世代の制御プレーンで第 1 世代のテナント環境にアクセスできる場合にのみ適用されます。 KB-92424 で説明されているように、第 1 世代の制御プレーンは提供終了 (EOA) となりました。詳細については、該当記事を参照してください。

ポッドのサブスクリプションでの Horizon Cloud アプリケーション登録のカスタム ロールに加えて、組織がポッドの外部 Unified Access Gateway 構成用に個別のサブスクリプションを使用するアプローチを採用し、その目的のために組織が設定した特定のリソース グループにゲートウェイ リソースをデプロイすることを選択する場合は、そのゲートウェイのサブスクリプションのカスタム ロールは、ポッドのサブスクリプションのカスタム ロールよりもきめ細かく、狭い範囲の権限を持つことができます。

カスタム ロールの概要

包括的な概念として、Horizon Cloud は、ポッドおよびそのゲートウェイ構成を持つために必要なリソースを正常に作成および維持するために、ポッドのサブスクリプションおよびそのリソース グループで特定の操作を実行する必要があります。

単純な例として、ポッドとゲートウェイ アーキテクチャでは NIC を備えた仮想マシンが必要であるため、Horizon Cloud にはサブスクリプション内で仮想マシンと NIC を作成し、それらの NIC をサブスクリプションの VNet のサブネットに接続する機能が必要となります。

Microsoft Azure では、ロールは、アプリケーション登録のサービス プリンシパルによって実行できる一連の管理操作を提供します。管理操作は、リソースとそのリソースに対して実行されるアクションの組み合わせです。

次のルールに従って、ポッドのサブスクリプションおよび(オプションの)ゲートウェイのサブスクリプションの Horizon Cloud アプリケーション登録の機能を、必要な最小限の操作に制限できます。

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

サブスクリプションとリソース グループにおいて 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 です
VNet にカスタム ルートがある場合。Microsoft Azure Cloud には、カスタム ルートと呼ばれる機能があります。 VNet にカスタム ルートがある場合は、上記の使用事例のすべてに加えて次の権限が必要です:Microsoft.Network/routeTables/join/action

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

これらの使用事例では、サブスクリプション レベルでの権限が割り当てられます。カスタム ロールは、次の表の操作を許可する必要があります。*(ワイルドカード文字)は、リストされている操作内の文字列と一致するすべての操作へのアクセスを許可します。

表 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
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

次の JSON コード ブロックは、Horizon Cloud Pod という名前のカスタム ロール定義に、一連の事前の操作がある場合にどのような状態になるかを示す例です。ID は、カスタム ロールの一意の ID です。Azure PowerShell または Azure CLI を使用してカスタム ロールを作成すると、この ID が自動的に生成されます。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/*"
  "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"
  ]
}

カスタム ルートが VNet とそのサブネットにある場合

Microsoft Azure Cloud には、カスタム ルートと呼ばれる機能があります。

このようなルートが VNet とそのサブネットに追加されている場合は、この追加の権限が必要です。

表 3. VNet にカスタム ルートがある場合に許可する必要がある Microsoft Azure リソース操作
操作 Microsoft Azure ドキュメントの説明
Microsoft.Network/routeTables/join/action https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork

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

この使用事例では、外部ゲートウェイのサブスクリプションのサブスクリプション レベルで、組織は組み込みの Reader ロールを使用して 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 です

名前付きリソース グループでは、次の許可された操作が必要となります。*(ワイルドカード文字)は、リストされているリソース プロバイダ操作内の文字列と一致するすべての操作へのアクセスを許可します。

表 4. 指定されたリソース グループで許可される必要がある 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
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