Citrix DaaS

Microsoft Azureへの接続

2023年7月より、MicrosoftはAzure Active Directory(Azure AD)の名前をMicrosoft Entra IDに変更しました。 このドキュメントでは、Azure Active Directory、Azure AD、またはAADへの言及はすべて、Microsoft Entra IDを意味することになります。

接続とリソースの作成と管理」では接続を作成するためのウィザードについて説明しています。 以下の情報は、Azure Resource Managerクラウド環境に固有の詳細について説明しています。

Microsoft Azureへの接続を作成する前に、Azureアカウントをリソースの場所として設定する必要があります。 「Microsoft Azure Resource Manager仮想化環境」を参照してください。

サービスプリンシパルと接続の作成

接続を作成する前に、接続でAzureリソースへのアクセスに使用されるサービスプリンシパルを設定する必要があります。 接続は次の2つの方法で作成できます。

  • Studioを使用したサービスプリンシパルと接続の作成
  • 以前に作成したサービスプリンシパルを使用した接続の作成

このセクションでは、次のタスクを完了する方法を説明します。

注意事項

始める前に、次の考慮事項に注意してください:

  • Contributor(投稿者)の役割でサービスプリンシパルを使用することをCitrixではお勧めします。 ただし、最低限の権限の一覧を取得する方法については、「最低限の権限」セクションを参照してください。
  • 最初の接続を作成するときに、必要な権限付与を求めるプロンプトがAzureで表示されます。 その後の接続でも認証は必要ですが、Azureでは以前の同意が記憶され、このプロンプトは再表示されません。
  • Azureで初めて認証すると、認証されたアカウントの代わりに、Citrix所有のマルチテナントアプリケーション(ID:08b70dc3-76c5-4611-ba7d-3312ba36cb2b)がAzure Active Directoryに招待されます。
  • 認証に使用されるアカウントには、Azure RBACを使用してサブスクリプションでの役割を割り当てるための権限が必要です。 たとえば、サブスクリプションのOwner、Role Based Access Control Administrator、またはUser Access Administratorなどです。
  • 認証に使用されるアカウントは、サブスクリプションのディレクトリのメンバーである必要があります。 注意すべき2つのタイプのアカウントがあります。「職場または学校」と「個人用Microsoftアカウント」です。詳しくは、CTX219211を参照してください。
  • 既存のMicrosoftアカウントは、サブスクリプションのディレクトリのメンバーとして追加することで使用できますが、ユーザーが以前にそのディレクトリのリソースのいずれかへのゲストアクセスを許可されていた場合は、複雑になる可能性があります。 この場合、必要な権限を与えないディレクトリにプレースホルダーエントリが存在し、エラーが返されることがあります。

    このエラーを修正するには、ディレクトリからリソースを削除し、明示的に追加し直します。 ただし、そのアカウントがアクセスできる他のリソースに対して、予期しない影響を与えるので、このオプションは注意深く実行してください。

  • 特定のアカウントが実際にメンバーであるときにディレクトリゲストとして検出されるという既知の問題があります。 このような構成は、通常、以前に設定されたディレクトリアカウントで発生します。 回避策:アカウントをディレクトリに追加します。これにより適切なメンバーシップ値が取得されます。
  • リソースグループはリソースのコンテナにすぎず、そのリージョン以外のリージョンのリソースを含む場合があります。 これが原因で、リソースグループのリージョンに表示されているリソースを利用できると期待した場合に、混乱を招く可能性があります。
  • ネットワークとサブネットが、必要な数のマシンをホストするのに十分な大きさであることを確認してください。 これには多少先見の明が必要ですが、Microsoftが、アドレススペースの容量に関するガイダンスを示して、適切な値を指定できるようサポートします。

Studioを使用したサービスプリンシパルと接続の作成

重要:

この機能は、Azure Chinaのサブスクリプションではまだ利用できません。

Studioを使用すると、サービスプリンシパルと接続の両方を1つのワークフローで作成できます。 サービスプリンシパルにより、接続でAzureリソースにアクセスできるようになります。 Azureに認証してサービスプリンシパルを作成すると、Azureにアプリケーションが登録されます。 登録されたアプリケーションの秘密キー(クライアントシークレットまたはアプリケーションシークレットと呼ばれる)が作成されます。 登録されたアプリケーション(この場合は接続)は、クライアントシークレットを使用してAzure ADに認証します。

手順を開始する前に、次の前提条件を満たしていることを確認してください。

  • サブスクリプションのAzure Active Directoryテナントにユーザーアカウントがあること。
  • 認証に使用されるアカウントには、Azure RBACを使用してサブスクリプションでの役割を割り当てるための権限が必要です。 たとえば、サブスクリプションのOwner、Role Based Access Control Administrator、またはUser Access Administratorなどです。
  • 認証のグローバル管理者、アプリケーション管理者、またはアプリケーション開発者の権限があること。 この権限は、ホスト接続の作成後に失効する可能性があります。 役割について詳しくは、「Azure ADの組み込みロール」を参照してください。

接続およびリソースの追加ウィザードを使用して、サービスプリンシパルと接続を同時に作成します。

  1. [接続]ページで[新しい接続を作成する]を選択します。次に、接続の種類として[Microsoft Azure]を選択し、Azure環境を選択します。

  2. 仮想マシンの作成にどのツールを使用するかを選択し、[次へ]を選択します。

  3. [接続の詳細]ページで、サービスプリンシパルを作成し、接続名を次のように設定します。

    1. AzureサブスクリプションIDと接続の名前を入力します サブスクリプションIDを入力すると、[新規作成]ボタンが有効になります。

    接続名は1~64文字にし、空白スペースのみにしたり記号(\/;:#.*?=<>|[]{}"'()')を含めたりすることはできません。

    1. [新規作成] を選択してから、Azure Active Directoryアカウントのユーザー名とパスワードを入力します。
    2. [サインイン] を選択します。
    3. [承認]を選択して、表示された権限をCitrix DaaSに付与します。 Azureによって、指定されたユーザーの代わりにCitrix DaaSがAzureリソースを管理できるようにするサービスプリンシパルが作成されます。
    > **注**
    >
    > Citrix DaaSでは、新しいサービスプリンシパルを作成するために次の権限が必要です:
    >
    > -  **Azure Service Managementへのアクセス**
    > -  **アプリケーションの読み取りと書き込み**
    > -  **サインインと自分のプロファイルの読み取り**
    > -  **アクセスを許可したデータへのアクセスを維持する**
    
    1. [承認]を選択すると、[接続の詳細]ページに戻ります。

      Azureへの認証に成功すると、[新規作成]ボタンと [既存を使用] ボタンが表示されなくなります。 緑色のチェックマークが付いた「接続に成功しました」というテキストが表示され、これはAzureサブスクリプションへの接続に成功したことを示します。

    2. API要求をCitrix Cloud Connector経由でAzureにルーティングするには、[Citrix Cloud Connector経由のトラフィックをルーティングする] チェックボックスをオンにします。

      また、PowerShellを使用してこの機能を有効にすることもできます。 詳しくは、「Azure管理トラフィックのための安全な環境の作成」を参照してください。

      このオプションは、展開内にアクティブなCitrix Cloud Connectorがある場合にのみ使用できます。 この機能は現時点ではConnector Applianceでサポートされていません。

    3. [次へ] を選択します。

    Azureへの認証が完了し、必要な権限の付与に同意しない限り、次のページに進むことはできません。

  4. 接続用のリソースを次の手順で構成します:

    • [リージョン] ページで領域を選択します。
    • [ネットワーク] ページで、次の手順を実行します:
      • 1~64文字のリソース名を入力して、リージョンとネットワークの組み合わせを特定できるようにします。 リソース名は、空白のみにしたり記号(\/;:#.*?=<>|[]{}"'()')を含めたりすることはできません。
      • 仮想ネットワークとリソースグループのペアを選択します。 (複数の仮想ネットワークを同じ名前にする場合、ネットワーク名とリソースグループをペアリングすると一意の組み合わせになります。)前のページで選択したリージョンに仮想ネットワークがない場合は、前のページに戻って仮想ネットワークのあるリージョンを選択します。
  5. [概要] ページで、設定の概要を表示し、[完了]を選択してセットアップを完了します。

アプリケーションIDの表示

接続を作成した後、その接続でAzureリソースへのアクセスに使用されるアプリケーションIDを表示できます。

[接続およびリソースの追加] 一覧で、接続を選択して詳細を表示します。 [詳細] タブで、アプリケーションIDが表示されます。

[接続およびリソースの追加]ページのアプリケーションID

PowerShellを使用したサービスプリンシパルの作成

PowerShellを使用してサービスプリンシパルを作成するには、Azure Resource Managerサブスクリプションに接続して、後述のPowerShellコマンドレットを使用します。

以下のアイテムを必ず準備してください。

  • SubscriptionId:VDAをプロビジョニングするサブスクリプションのAzure Resource Manager SubscriptionID
  • ActiveDirectoryID:Azure ADに登録したアプリケーションのテナントID。
  • ApplicationName: Azure AD内で作成されるアプリケーションの名前。

詳細な手順は次のとおりです:

  1. Azure Resource Managerサブスクリプションに接続します。

    Connect-AzAccount

  2. サービスプリンシパルを作成するAzure Resource Managerサブスクリプションを選択します。

    Get-AzSubscription -SubscriptionId $subscriptionId | Select-AzSubscription

  3. ADテナントでアプリケーションを作成します。

    $AzureADApplication = New-AzADApplication -DisplayName $ApplicationName

  4. サービスプリンシパルを作成します。

    New-AzADServicePrincipal -ApplicationId $AzureADApplication.AppId

  5. サービスプリンシパルに役割を割り当てます。

    New-AzRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $AzureADApplication.AppId –scope /subscriptions/$SubscriptionId

  6. PowerShellコンソールの出力ウィンドウから、ApplicationIdをメモします。 このIDは、ホスト接続を作成するときに使用します。

Azureでのアプリケーションシークレットの取得

既存のサービスプリンシパルを使用して接続を作成するには、まずAzure PortalでサービスプリンシパルのアプリケーションIDとシークレットを取得する必要があります。

詳細な手順は次のとおりです:

  1. Studioから、またはPowerShellを使用してアプリケーションIDを取得します。
  2. Azure Portalにサインインします。
  3. Azureで [Azure Active Directory] を選択します。
  4. Azure ADの [App registrations] でアプリケーションを選択します。
  5. [Certificates & secrets]に移動します。
  6. [Client secrets] をクリックします。

Azure Portalのアプリケーションシークレット

既存のサービスプリンシパルを使用した接続の作成

サービスプリンシパルが既にある場合は、そのサービスプリンシパルとStudioを使用して接続を作成できます。

以下のアイテムを必ず準備してください。

  • サブスクリプションID
  • Active Directory ID(テナントID)
  • アプリケーションID
  • アプリケーションシークレット

    詳しくは、「アプリケーションシークレットの取得」を参照してください。

  • シークレットの有効期限

詳細な手順は次のとおりです:

接続およびリソースの追加ウィザードで以下を行います:

  1. [接続]ページで[新しい接続を作成する]を選択します。次に、接続の種類として[Microsoft Azure]を選択し、Azure環境を選択します。

  2. 仮想マシンの作成にどのツールを使用するかを選択し、[次へ]を選択します。

  3. [接続の詳細] ページで、AzureサブスクリプションIDと接続の名前を入力します。

    接続名は1~64文字にし、空白スペースのみにしたり記号(\/;:#.*?=<>|[]{}"'()')を含めたりすることはできません。

  4. [既存を使用] を選択します。 [既存のサービスプリンシパルの詳細] ウィンドウで、既存のサービスプリンシパルに次の設定を入力します。 詳細を入力すると、[保存]ボタンが有効になります。 [Save] を選択します。 有効な詳細を入力しない限り、このページの先には進めません。

    • サブスクリプションID。 AzureサブスクリプションIDを入力します。 サブスクリプションIDを取得するには、Azure Portalにサインインし、[Subscriptions]>[Overview]に移動します。
    • Active Directory ID(テナントID)。 Azure ADに登録したアプリケーションのディレクトリ(テナント)IDを入力します。
    • アプリケーションID。 Azure ADに登録したアプリケーションのアプリケーション(クライアント)IDを入力します。
    • アプリケーションシークレット。 秘密キー(クライアントシークレット)。 登録されたアプリケーションは、キーを使用してAzure ADへの認証を行います。 セキュリティのために、キーを定期的に変更することをお勧めします。 後でキーを取得することはできないため、必ずキーを保存してください。
    • シークレットの有効期限。 アプリケーションシークレットの有効期限が切れる日付を入力します。 シークレットキーの有効期限が切れる14日前から、コンソールに通知が表示されます。 ただし、秘密キーの有効期限が切れると、エラーが発生します。

      セキュリティ上の理由から、有効期限は現在から2年を超えることはできません。

    • 認証URL。 このフィールドは自動的に入力され、編集できません。
    • 管理URL。 このフィールドは自動的に入力され、編集できません。
    • ストレージのサフィックス。 このフィールドは自動的に入力され、編集できません。
    • ディスクまたはスナップショットをアップロードまたはダウンロードするためのAzure Blob Storageエンドポイント。 このフィールドは自動的に入力され、編集できません。
    • Key Vaultサービス。 このフィールドは自動的に入力され、編集できません。
    • Service Busサフィックス。 このフィールドは自動的に入力され、編集できません。

      AzureでMCSカタログを作成するには、次のエンドポイントへのアクセスが必要です。 これらのエンドポイントにアクセスすると、ネットワークとAzure Portalおよびそのサービスとの間の接続が最適化されます。

      • 認証URL:https://login.microsoftonline.com
      • 管理URL:https://management.azure.com。 これは、Azure Resource ManagerプロバイダーAPIの要求URLです。 管理用のエンドポイントは環境によって異なります。 たとえば、Azure Globalの場合はhttps://management.azure.com、Azure US Governmentの場合はhttps://management.usgovcloudapi.netです。
      • ストレージサフィックス:https://*.core.windows.net。 ここで「*」は、ストレージ サフィックスのワイルドカード文字です。 たとえば、https://demo.table.core.windows.netです。
      • ディスクまたはスナップショットをアップロードまたはダウンロードするためのAzure Blob Storageエンドポイント:https://*.storage.azure.net。 この(*)はBlob Storageのインポートおよびエクスポート操作用のワイルドカード文字です。 たとえば、https://md-impexp-xxxxx.z[00-50].blob.storage.azure.netです。
      • Key Vaultサービス:https://*.vault.azure.net。 この(*)はKey Vault名用のワイルドカード文字です。 たとえば、https://<your-key-vault-name>.vault.azure.netなどです。
      • Servic Busサフィックス:https://*.servicebus.windows.net。 この(*)は、グローバルAzureクラウドで作成された名前空間用のワイルドカード文字です。 例:https://{serviceNamespace}.servicebus.windows.net/{path}
  5. [保存] を選択すると、[接続の詳細]ページに戻ります。 [次へ] を選択して、次のページに進みます。

  6. 接続用のリソースを次の手順で構成します:

    • [リージョン] ページで領域を選択します。
    • [ネットワーク] ページで、次の手順を実行します:
      • 1~64文字のリソース名を入力して、リージョンとネットワークの組み合わせを特定できるようにします。 リソース名は、空白のみにしたり記号(\/;:#.*?=<>|[]{}"'()')を含めたりすることはできません。
      • 仮想ネットワークとリソースグループのペアを選択します。 (複数の仮想ネットワークを同じ名前にする場合、ネットワーク名とリソースグループをペアリングすると一意の組み合わせになります。)前のページで選択したリージョンに仮想ネットワークがない場合は、前のページに戻って仮想ネットワークのあるリージョンを選択します。
  7. [概要] ページで、設定の概要を表示し、[完了]を選択してセットアップを完了します。

AzureマネージドIDを使用してホスト接続を作成する

AzureマネージドIDを使用してMicrosoft Azure Resource Managerへのホスト接続を作成できます。 AzureマネージドIDを使用すると、資格情報を管理しなくても、安全かつスケーラブルにAzureサービスにアクセスできます。 このアプローチにより、シークレットの保存、ローテーション、管理に関連するリスクが排除されます。

このホスト接続は、新しいカスタムプロパティAuthenticationModeを使用して作成できます。 AuthenticationModeには、AppClientSecretSystemAssignedManagedIdentityUserAssignedManagedIdentityの3つのオプションがあります。

オプションの説明は次のとおりです:

  • AppClientSecret:これがデフォルト値です。 これにはアプリケーションIDとシークレットが必要です。
  • UserAssignedManagedIdentity:これには、UserNameを使用してクライアントIDを提供する必要があります。
  • SystemAssignedManagedIdentity:これには何も入力する必要はありません。 クライアントIDを指定しても無視されます。

条件:

マネージドIDを使用するには、パラメーターProxyHypervisorTrafficThroughConnectorがtrueである必要があります。

AzureマネージドIDを使用してホスト接続を作成する手順は次のとおりです:

  1. Citrix Cloud ConnectorをAzure VMにインストールします。
  2. そのCloud Connector VMでAzureマネージドIDを有効にします。

    • ユーザー割り当てのマネージドIDの場合:

      1. Azureポータルで、ユーザー割り当てのマネージドIDを作成します。 詳しくは、「ユーザー割り当てマネージドIDの作成、割り当て、使用」を参照してください。
      2. マネージドIDにAzureの役割を割り当てます。 必要なAzure権限を参照してください。
      3. Azure VMをCloud Connectorとして作成し、ユーザーに割り当てられたIDを追加します。
    • システム割り当てのマネージドIDの場合:

      1. Azureポータルを開き、VMに移動します。
      2. VMの設定でIDブレードを選択します。
      3. [System assigned]タブで、ステータスを[On]に設定します。
      4. [保存] をクリックします。
      5. 必要なAzure権限を付与します。

      Cloud Connector VMでシステム割り当てのマネージドIDを有効にし、それを使用してホスト接続を作成する場合、Cloud Connector VMで無効にした後でも、システム割り当てのマネージドIDを使用してホスト接続を作成できます。 ホスト接続の作成は、IDが無効になってから24時間経っても成功する可能性があります。 これは、マネージドIDトークンが基盤となるAzureインフラストラクチャによってキャッシュされるためです。 詳しくは、「マネージドIDトークンはキャッシュされていますか?」を参照してください。

  3. PowerShellコマンドを使用して、この新しい認証タイプでホスト接続を作成します:

    1. PowerShellウィンドウを開きます。
    2. asnp citrix*を実行し、Citrix固有のPowerShellモジュールをロードします。
    3. ホスト接続を作成します。 次に例を示します:

      • ユーザー割り当てのマネージドIDの場合:

           $UserName = "should be the Client ID of the user-assigned managed identity"
           $Password = "It can be any string.Not used"
        
           $CustomProperties = '<CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' `
           +  '<Property xsi:type="StringProperty" Name="SubscriptionId" Value="' + $SubscriptionId + '" />'`
           +  '<Property xsi:type="StringProperty" Name="ManagementEndpoint" Value="https://management.azure.com/" />'`
           +  '<Property xsi:type="StringProperty" Name="AuthenticationAuthority" Value="https://login.microsoftonline.com/" />'`
           +  '<Property xsi:type="StringProperty" Name="StorageSuffix" Value="core.windows.net" />'`
           +  '<Property xsi:type="StringProperty" Name="TenantId" Value="' + $TenantId + '" />'`
           +  '<Property xsi:type="StringProperty" Name="ProxyHypervisorTrafficThroughConnector" Value="True" />'`
           +  '<Property xsi:type="StringProperty" Name="AuthenticationMode" Value="UserAssignedManagedIdentity" />'`
           +  '</CustomProperties>'
        
           New-Item -ConnectionType "Custom" `
           -CustomProperties $CustomProperties `
           -HypervisorAddress @($HypervisorAddress) `
           -Path @("XDHyp:\Connections\$($ConnectionName)") `
           -Metadata $Metadata `
           -Persist `
           -PluginId "AzureRmFactory" `
           -Scope @() `
           -Password $Password `
           -UserName $UserName `
           -ZoneUid $zoneUid
         <!--NeedCopy-->
        
      • システム割り当てのマネージドIDの場合:

           $UserName = "It can be any string.   Not used"
           $Password = "It can be any string.   Not used"  
           $CustomProperties = '<CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' `
           +  '<Property xsi:type="StringProperty" Name="SubscriptionId" Value="' + $SubscriptionId + '" />'`
           +  '<Property xsi:type="StringProperty" Name="ManagementEndpoint" Value="https://management.azure.com/" />'`
           +  '<Property xsi:type="StringProperty" Name="AuthenticationAuthority" Value="https://login.microsoftonline.com/" />'`
           +  '<Property xsi:type="StringProperty" Name="StorageSuffix" Value="core.windows.net" />'`
           +  '<Property xsi:type="StringProperty" Name="TenantId" Value="' + $TenantId + '" />'`
           +  '<Property xsi:type="StringProperty" Name="ProxyHypervisorTrafficThroughConnector" Value="True" />'`
           +  '<Property xsi:type="StringProperty" Name="AuthenticationMode" Value="SystemAssignedManagedIdentity" />'`
           +  '</CustomProperties>'
        
           New-Item -ConnectionType "Custom" `
           -CustomProperties $CustomProperties `
           -HypervisorAddress @($HypervisorAddress) `
           -Path @("XDHyp:\Connections\$($ConnectionName)") `
           -Metadata $Metadata `
           -Persist `
           -PluginId "AzureRmFactory" `
           -Scope @() `
           -Password $Password `
           -UserName $UserName `
           -ZoneUid $zoneUid
         <!--NeedCopy-->
        

既存のホスト接続を更新して、システム割り当てのIDまたはユーザー割り当てのマネージドIDを使用するようにすることもできます。 たとえば、次のPowerShellコマンドを実行します:

  1. PowerShellウィンドウを開きます。
  2. asnp citrix*を実行し、Citrix固有のPowerShellモジュールをロードします。
  3. 次のコマンドを実行します:

      $connName = "ConnectionName"
      $conn = get-item XDHyp:\Connections\$connName
      $conn.CustomProperties
    <!--NeedCopy-->
    
  4. ProxyHypervisorTrafficThroughConnectorTrueに変更し、AuthenticationModeのカスタムプロパティをSystemAssignedManagedIdentityまたはUserAssignedManagedIdentityに追加します。 次に例を示します:

      $customProps = '<CustomProperties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.citrix.com/2014/xd/machinecreation"><Property xsi:type="StringProperty" Name="SubscriptionId" Value="subscriptionId" /><Property xsi:type="StringProperty" Name="ManagementEndpoint" Value="https://management.azure.com/" /><Property xsi:type="StringProperty" Name="AuthenticationAuthority" Value="https://login.microsoftonline.com/" /><Property xsi:type="StringProperty" Name="StorageSuffix" Value="core.windows.net" /><Property xsi:type="StringProperty" Name="TenantId" Value="tenantId" /><Property xsi:type="StringProperty" Name="AzureAdDeviceManagement" Value="false" /><Property xsi:type="StringProperty" Name="ProxyHypervisorTrafficThroughConnector" Value="true" /><Property xsi:type="StringProperty" Name="AuthenticationMode" Value="SystemAssignedManagedIdentity" /></CustomProperties>'
    <!--NeedCopy-->
    
  5. $cred = Get-Credentialを実行します。 ここに何でも入力してください。
  6. Set-Item -PSPath XDHyp:\Connections\$connName -CustomProperties $CustomProperties -username $cred.username -Securepassword $cred.passwordを実行します。

サービスプリンシパルと接続の管理

このセクションでは、サービスプリンシパルと接続を管理する方法について説明します。

Azureの調整設定の構成

Azure Resource Managerはサブスクリプションおよびテナントの要求を調整し、プロバイダーの特定のニーズに対応して定義された制限を基にルーティングします。 詳しくは、Microsoft社のサイトの「Resource Managerの要求のスロットル」を参照してください。 制限は、サブスクリプションやテナントで多数のマシンの管理が問題となりうる場合に存在します。 たとえば、多数のマシンを含むサブスクリプションは、電源操作に関連してパフォーマンスの問題が発生することがあります。

ヒント:

詳しくは「Machine Creation ServicesによるAzureのパフォーマンスの向上」を参照してください。

Citrix DaaSでは、これらの問題の影響を軽減するためにMCS内部の調整を削除して、より高い値のAzureの要求クォータを利用することができます。

大量のサブスクリプション(1,000台の仮想マシンを含む場合など)で仮想マシンをオンまたはオフにする場合、次の最適設定をお勧めします:

  • 絶対同時操作:500
  • 1分あたりの最大新規操作:2000
  • 最大同時操作:500

Studioを使用して指定のホスト接続でAzure操作を構成します:

  1. Studioの左側ペインで [ホスト] を選択します。
  2. Azure関連の接続を選択して編集します。
  3. 接続の編集ウィザードで [詳細設定] を選択します。
  4. [詳細設定] 画面で構成オプションを使用し、同時操作の数、1分あたりの最大新規操作、その他追加の接続オプションを指定します。

Azureの調整

MCSは、デフォルトで最大500の同時操作をサポートします。 または、Remote PowerShell SDKを使用して、同時操作の最大数を設定することもできます。

PowerShellプロパティMaximumConcurrentProvisioningOperationsを使用して、同時Azureプロビジョニング操作の最大数を指定します。 このプロパティを使用するときは、次のことを考慮してください:

  • MaximumConcurrentProvisioningOperationsのデフォルト値は500です。
  • PowerShellコマンドSet-itemを使用して、MaximumConcurrentProvisioningOperationsパラメーターを構成します。

既存のホスト接続のサービスプリンシパルを管理する

サービスプリンシパルを使用してホスト接続を作成した後、次のホスト接続を編集することを選択できます:

  • 新しいサービスプリンシパル
  • 別の既存のサービスプリンシパルを使用する
  1. Studioの左側ペインで [ホスト] を選択します。
  2. 接続を選択し、操作バーの [接続の編集] を選択します。
  3. 左側ペインから [接続のプロパティ]を選択します。
  4. 開いた [接続のプロパティ] ページで、[設定の編集] をクリックします。 新しいサービスプリンシパルを作成するか、別の既存のサービスプリンシパルを使用するかを選択できます。

    設定の変更

    • 新しいサービスプリンシパルを作成するには、[サービスプリンシパルを作成する] をクリックします。 プロンプトに従って、Azure ADユーザーアカウントにログインします。 Citrixは、マルチテナントアプリケーションID08b70dc3-76c5-4611-ba7d-3312ba36cb2bを使用して、既存のホスト接続用の新しいサービスプリンシパルを作成し、適切な権限を付与します。
    • ホスト接続に別の既存のサービスプリンシパルを使用するには、[既存を使用する] をクリックします。

Azureでイメージの共有を有効にする

マシンカタログを作成または更新するときに、(Azure Compute Galleryを介して共有する) さまざまなAzureテナントおよびサブスクリプションからイメージを選択できます。 テナント内またはテナント間での画像の共有を有効にするには、Azureで必要な設定を行う必要があります。

単一のテナント内(サブスクリプション間)でのイメージの共有

別のサブスクリプションに属するAzure Compute Galleryのイメージを選択するには、そのイメージをそのサブスクリプションのサービスプリンシパル(SPN)と共有する必要があります。

たとえば、Studioで次のように構成されているサービスプリンシパル(SPN 1)があるとします:

サービスプリンシパル:SPN 1

サブスクリプション:サブスクリプション1

テナント:テナント1

画像が別のサブスクリプションにあり、Studioで次のように構成されているとします:

サブスクリプション:サブスクリプション2

テナント:テナント1

サブスクリプション2のイメージをサブスクリプション1(SPN 1)と共有する場合は、サブスクリプション2に移動し、リソースグループをSPN 1と共有します。

イメージは、Azureの役割ベースのアクセス制御(RBAC)を使用して別のSPNと共有する必要があります。 Azure RBACは、Azureリソースへのアクセスを管理するために使用される承認システムです。 Azure RBACについて詳しくは、Microsoft社のドキュメント「Azureロールベースのアクセス制御(Azure RBAC)とは」を参照してください。 アクセス権を付与するには、Contributorの役割を使用して、リソースグループのスコープでサービスプリンシパルに役割を割り当てます。 Azureの役割を割り当てるには、ユーザーアクセス管理者や所有者などのMicrosoft.Authorization/roleAssignments/write権限が必要です。 別のSPNと画像を共有する方法について詳しくは、Microsoft社のドキュメント「Azure portalを使用してAzureロールを割り当てる」を参照してください。

テナント間でのイメージの共有

Azure Compute Galleryを使用してテナント間でイメージを共有するには、アプリケーション登録を作成または更新し、このアプリケーションを使用してホスト接続を作成します。

たとえば、2つのテナント(テナント1とテナント2)があり、イメージギャラリーをテナント1と共有する場合は、次のようにします:

  1. テナント1のアプリケーション登録を作成します。 詳しくは、「アプリの登録を作成する」を参照してください。

  2. ブラウザーでサインインを要求し、テナント2にアプリケーションへのアクセスを許可します。 「Tenant2 ID」 をテナント1のテナントIDに置き換えます。 Application (client) IDを、作成したアプリケーション登録のアプリケーションIDに置き換えます。 置換が完了したら、このURLをブラウザーに貼り付け、サインインプロンプトに従ってテナント2にサインインします。 次に例を示します:

      https://login.microsoftonline.com/<Tenant 2 ID>/oauth2/authorize?client_id=<Application (client) ID>&response_type=code&redirect_uri=https%3A%2F%2Fwww.microsoft.com%2F
    <!--NeedCopy-->
    

    詳しくは、「テナント2にアクセス権を付与する」を参照してください。

  3. テナント2リソースグループへのアプリケーションアクセスを許可します。 テナント2としてサインインし、アプリケーション登録に、ギャラリーイメージを含むリソースグループへのアクセスを許可します。 詳しくは、「テナントをまたいだ認証要求」を参照してください。

Studioを使用して共有テナントを接続に追加する

Studioでマシンカタログを作成または更新するときに、(Azure Compute Galleryを介して共有する)さまざまなAzureテナントおよびサブスクリプションから共有イメージを選択できます。 この機能では、関連付けられたホスト接続の共有テナントおよびサブスクリプション情報を提供する必要があります。

テナント間での画像の共有を有効にするための必要な設定をAzureで構成したことを確認してください。 詳しくは、「 テナント間でのイメージの共有」を参照してください。

接続ごとに次の手順を実行します:

  1. Studioの左側ペインで [ホスト] を選択します。
  2. 接続を選択し、操作バーの [接続の編集] を選択します。

    共有テナント

  3. [共有テナント] で、次の操作を行います:
    1. 接続のサブスクリプションに関連付けられているアプリケーションIDとアプリケーションシークレットを提供します。 DaaSは、この情報を使用してAzure ADに認証します。
    2. 接続のサブスクリプションとAzure Compute Galleryを共有しているテナントとサブスクリプションを追加します。 テナントごとに最大8つの共有テナントと8つのサブスクリプションを追加できます。
  4. 完了したら、[適用] を選択して行った変更を適用しウィンドウを開いたままにするか、[OK] を選択して変更を適用しウィンドウを閉じます。

PowerShellを使用した画像共有の実装

このセクションでは、PowerShellを使用して画像を共有するプロセスについて説明します。

別のサブスクリプションでの画像の選択

同じAzureテナント内の別の共有サブスクリプションに属するAzure Compute Galleryのイメージを選択し、PowerShellコマンドを使用してMCSカタログを作成および更新できます。

  1. ホスティングユニットのルートフォルダーに、sharedsubscriptionという名前の新しい共有サブスクリプションフォルダーが作成されます。
  2. テナント内のすべての共有サブスクリプションを表示します。

      Get-ChildItem -Path "XDhyp:\HostingUnits\azres\sharedsubscription.folder"
    <!--NeedCopy-->
    
  3. 1つの共有サブスクリプションを選択し、その共有サブスクリプションのすべての共有リソースグループを表示します。

      Get-ChildItem -Path "XDhyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription"
    <!--NeedCopy-->
    
  4. リソースグループを選択し、そのリソースグループのすべてのギャラリーを表示します。

      Get-ChildItem -Path "XDhyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\ xyz.resourcegroup"
    <!--NeedCopy-->
    
  5. ギャラリーを選択し、そのギャラリーのすべてのイメージ定義を表示します。

      Get-ChildItem -Path "XDhyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\xyz.resourcegroup\testgallery.gallery"
    <!--NeedCopy-->
    
  6. 1つのイメージ定義を選択し、そのイメージ定義のすべてのイメージバージョンを表示します。

      Get-ChildItem -Path "XDhyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\xyz.resourcegroup\sigtestdef.imagedefinition"
    <!--NeedCopy-->
    
  7. 次の要素を使用して、MCSカタログを作成および更新します:

    • リソースグループ
    • ギャラリー
    • ギャラリーイメージの定義
    • ギャラリーイメージのバージョン

ホスト接続のカスタムプロパティの共有テナントIDの更新

Set-Itemを使用して、ホスト接続のカスタムプロパティを共有テナントIDとサブスクリプションIDで更新します。 CustomPropertiesにプロパティSharedTenantsを追加します。 共有テナントの形式は次のとおりです:

  [{"Tenant":"94367291-119e-457c-bc10-25337231f7bd","Subscriptions":["7bb42f40-8d7f-4230-a920-be2781f6d5d9"]},{"Tenant":"50e83564-c4e5-4209-b43d-815c45659564","Subscriptions":["06ab8944-6a88-47ee-a975-43dd491a37d0"]}]
<!--NeedCopy-->

次に例を示します:

  Set-Item -CustomProperties "<CustomProperties xmlns=`"http://schemas.citrix.com/2014/xd/machinecreation`" xmlns:xsi=`"http://www.w3.org/2001/XMLSchema-instance`">
  <Property xsi:type=`"StringProperty`" Name=`"SubscriptionId`" Value=`"123`" />
  <Property xsi:type=`"StringProperty`" Name=`"ManagementEndpoint`" Value=`"https://management.azure.com/`" />
  <Property xsi:type=`"StringProperty`" Name=`"AuthenticationAuthority`" Value=`"https://login.microsoftonline.com/`" />
  <Property xsi:type=`"StringProperty`" Name=`"StorageSuffix`" Value=`"core.windows.net`" />
  <Property xsi:type=`"StringProperty`" Name=`"TenantId`" Value=`"123abc`" />
  <Property xsi:type=`"StringProperty`" Name=`"SharedTenants`" Value=`"`[ { 'Tenant':'123abc', 'Subscriptions':['345', '567'] } ]`"` />
  </CustomProperties>"
  -LiteralPath @("XDHyp:\Connections\aazure") -PassThru -UserName "advc345" -SecurePassword
  $psd
<!--NeedCopy-->

複数のテナントを追加できます。 各テナントは複数のサブスクリプションを持つことができます。

別のテナントでの画像の選択

別のAzureテナントに属するAzure Compute Galleryのイメージを選択し、PowerShellコマンドを使用してMCSカタログを作成および更新できます。

  1. ホスティングユニットのルートフォルダーに、sharedsubscriptionという名前の新しい共有サブスクリプションフォルダーが作成されます。
  2. すべての共有サブスクリプションを表示します。

      Get-ChildItem XDHyp:\HostingUnits\azres\sharedsubscription.folder
    <!--NeedCopy-->
    
  3. 1つの共有サブスクリプションを選択し、その共有サブスクリプションのすべての共有リソースグループを表示します。

      Get-ChildItem XDHyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription
    <!--NeedCopy-->
    
  4. リソースグループを選択し、そのリソースグループのすべてのギャラリーを表示します。

      Get-ChildItem XDHyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\ xyz.resourcegroup
    <!--NeedCopy-->
    
  5. ギャラリーを選択し、そのギャラリーのすべてのイメージ定義を表示します。

      Get-ChildItem XDHyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\xyz.resourcegroup\efg.gallery
    <!--NeedCopy-->
    
  6. 1つのイメージ定義を選択し、そのイメージ定義のすべてのイメージバージョンを表示します。

      Get-ChildItem XDHyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\xyz.resourcegroup\efg.gallery\hij.imagedefinition
    <!--NeedCopy-->
    
  7. 次の要素を使用して、MCSカタログを作成および更新します:

    • リソースグループ
    • ギャラリー
    • ギャラリーイメージの定義
    • ギャラリーイメージのバージョン

Azure管理トラフィックのための安全な環境の作成

MCSにより、Cloud Connectorを介してネットワークトラフィック(Citrix CloudからAzure HypervisorへのAPI呼び出し)を環境内でルーティングできるようになります。 この実装により、Azureサブスクリプションを認証して、特定のIPアドレスからのネットワークトラフィックを許可することができます。 これを行うには、CustomPropertiesProxyHypervisorTrafficThroughConnectorを追加します。 カスタムプロパティを設定した後、Azure Managed Disksへのプライベートディスクアクセスを許可するAzureポリシーを構成できます。

プライベートエンドポイントを使用するために、新しいディスクごとにディスクアクセスを自動的に作成するようにAzureポリシーを構成した場合、Azureによって適用される同じディスクアクセスオブジェクトで、同時に5つを超えるディスクまたはスナップショットをアップロードまたはダウンロードすることはできません。 この制限は、Azureポリシーをリソースグループレベルで構成する場合はマシンカタログごとに適用され、Azureポリシーをサブスクリプションレベルで構成する場合はすべてのマシンカタログに適用されます。 プライベートエンドポイントを使用する新しいディスクごとにディスクアクセスを自動的に作成するようにAzureポリシーを構成していない場合、同時操作に関する5つの制限は適用されません。

この機能は現時点ではConnector Applianceでサポートされていません。 この機能に関連したAzureの制限については、「Azure Private Linkを使用してマネージドディスクに対するインポートおよびエクスポートのアクセスを制限する」を参照してください。

プロキシを有効にする

このプロキシを有効にするには、ホスト接続でカスタムプロパティを次のように設定します。

  1. Remote PowerShell SDKを使用して PowerShellウィンドウを開きます。 詳しくは、https://docs.citrix.com/en-us/citrix-daas/sdk-api.html#citrix-virtual-apps-and-desktops-remote-powershell-sdk/を参照してください。
  2. 次のコマンドを実行します:

      Add-PSSnapin citrix*.
      cd XDHyp:\Connections\
      dir
    <!--NeedCopy-->
    
  3. 接続からCustomPropertiesをメモ帳にコピーし、プロパティ設定&lt;Property xsi:type="StringProperty" Name="ProxyHypervisorTrafficThroughConnector" Value="True" /&gt;CustomPropertiesに追加してプロキシを有効にします。 次に例を示します:

      <CustomProperties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.citrix.com/2014/xd/machinecreation">
      <Property xsi:type="StringProperty" Name="SubscriptionId" Value="4991xxxx-2xxx-4xxx-8xxx-ff59a830xxxx" />
      <Property xsi:type="StringProperty" Name="ManagementEndpoint" Value="https://management.azure.com/" />
      <Property xsi:type="StringProperty" Name="AuthenticationAuthority" Value="https://login.microsoftonline.com/" />
      <Property xsi:type="StringProperty" Name="StorageSuffix" Value="core.windows.net" />
      <Property xsi:type="StringProperty" Name="TenantId" Value="5cxxxxx-9xxx-4xxx-8xxx-dffe3efdxxxx" />
      <Property xsi:type="StringProperty" Name="ProxyHypervisorTrafficThroughConnector" Value="True" />
      </CustomProperties>
    <!--NeedCopy-->
    
  4. PowerShellウィンドウで、変更したカスタムプロパティに変数を割り当てます。 次に例を示します:

      $customProperty = '<CustomProperties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.citrix.com/2014/xd/machinecreation">
      <Property xsi:type="StringProperty" Name="SubscriptionId" Value="4991xxxx-2xxx-4xxx-8xxx-ff59a830xxxx" />
      <Property xsi:type="StringProperty" Name="ManagementEndpoint" Value="https://management.azure.com/" />
      <Property xsi:type="StringProperty" Name="AuthenticationAuthority" Value="https://login.microsoftonline.com/" />
      <Property xsi:type="StringProperty" Name="StorageSuffix" Value="core.windows.net" />
      <Property xsi:type="StringProperty" Name="TenantId" Value="5cxxxxx-9xxx-4xxx-8xxx-dffe3efdxxxx" />
      <Property xsi:type="StringProperty" Name="ProxyHypervisorTrafficThroughConnector" Value="True" />
      </CustomProperties>'
    <!--NeedCopy-->
    
  5. $cred = Get-Credentialを実行します。 プロンプトが表示されたら、接続の資格情報を入力します。 資格情報はAzureアプリケーションIDとシークレットです。
  6. Set-Item -PSPath XDHyp:\Connections\&#060;Connection_Name&#062; -CustomProperties $customProperty -username $cred.username -Securepassword $cred.passwordを実行します。

    重要:

    SubscriptionIdが欠落しています」というメッセージが表示された場合は、当該のカスタムプロパティ内で、すべての二重引用符(”)をバッククォート文字とそれに続く二重引用符(`”)に置き換えます。 次に例を示します:

          <CustomProperties xmlns:xsi=`"http://www.w3.org/2001/XMLSchema-instance`" xmlns=`"http://schemas.citrix.com/2014/xd/machinecreation`">
          <Property xsi:type=`"StringProperty`" Name=`"SubscriptionId`" Value=`"4991xxxx-2xxx-4xxx-8xxx-ff59a830xxxx`" />
          <Property xsi:type=`"StringProperty`" Name=`"ManagementEndpoint`" Value=`"https://management.azure.com/`" />
          <Property xsi:type=`"StringProperty`" Name=`"AuthenticationAuthority`" Value=`"https://login.microsoftonline.com/`" />
          <Property xsi:type=`"StringProperty`" Name=`"StorageSuffix`" Value=`"core.windows.net`" />
          <Property xsi:type=`"StringProperty`" Name=`"TenantId`" Value=`"5cxxxxx-9xxx-4xxx-8xxx-dffe3efdxxxx`" />
          <Property xsi:type=`"StringProperty`" Name=`"ProxyHypervisorTrafficThroughConnector`" Value=`"True`" />
          </CustomProperties>
    <!--NeedCopy-->
    
  7. dirを実行して、更新されたCustomProperties設定を確認します。

アプリケーションシークレットとその有効期限の管理

接続のアプリケーションシークレットは、その有効期限が切れる前に必ず変更してください。 秘密キーの有効期限が切れる前に、Studioにアラートが表示されます。

Azureでのアプリケーションシークレットの作成

Azure Portalで、接続のアプリケーションシークレットを作成できます。

  1. [Azure Active Directory] を選択します。
  2. Azure ADの [App registrations] でアプリケーションを選択します。
  3. [Certificates & secrets]に移動します。
  4. [Client secrets]>[New client secret]をクリックします。

    アプリケーションシークレットの作成

  5. シークレットの説明を入力し、期間を指定します。 完了したら、[追加] を選択します。

    クライアントシークレットは後で取得できないため、必ず保存してください。

  6. クライアントシークレット値と有効期限をコピーします。
  7. Studioで、対応する接続を編集し、[アプリケーションシークレット] および [シークレットの有効期限] フィールドの値を、コピーした値に置き換えます。

シークレットの有効期限の変更

Studioで、使用中のアプリケーションシークレットの有効期限を追加または変更できます。

  1. [接続とリソースの追加] ウィザードで接続を右クリックし、[接続の編集] をクリックします。
  2. [接続のプロパティ] ページで [シークレットの有効期限] をクリックして、使用中のアプリケーションシークレットの有効期限を追加または変更します。

シークレットの有効期限の変更

事前に作成されたネットワークセキュリティグループを使用する

CitrixにNSGの作成と変更を要求する代わりに、イメージの準備用にDeny-Allネットワークセキュリティグループを作成します。 PowerShellコマンドSet-Itemを使用してホスティングユニットのカスタムプロパティを編集し、Deny-Allネットワークセキュリティグループを提供するパラメーターNsgForPreparationを追加します。

前提条件

サービスプリンシパルに必要な以下の権限を構成します:

  • Microsoft.Network/networkSecurityGroups/join/action:ネットワークセキュリティグループをサブネットまたはネットワークインターフェイスに関連付ける
  • Microsoft.Network/networkSecurityGroups/read:ネットワークセキュリティグループを取得する
  • Microsoft.Network/networkSecurityGroups/securityRules/read:規則を取得する

事前に作成されたDeny-Allネットワークセキュリティグループを追加する

事前に作成されたDeny-Allネットワークセキュリティグループを追加するには、ホスティングユニットでカスタムプロパティを次のように設定します:

  1. Remote PowerShell SDKを使用して PowerShellウィンドウを開きます。
  2. 次のコマンドを実行します:

      Add-PSSnapin citrix*.
      cd XDHyp:\HostingUnits\
      Dir
    <!--NeedCopy-->
    
  3. ホスティングユニットを選択して詳細を取得します:

      Get-Item "XDHyp:\HostingUnits\<hostingunitname>"
    <!--NeedCopy-->
    
  4. CustomPropertiesをメモ帳にコピーし、プロパティ設定&lt;Property xsi:type="StringProperty” Name="NsgForPreparation” Value="{ResourceGroupName}/{NetworkSecurityGroupName}"/&gt;を追加します。 次に例を示します:

      <CustomProperties xmlns=`"http://schemas.citrix.com/2014/xd/machinecreation`" xmlns:xsi=`"http://www.w3.org/2001/XMLSchema-instance`"><Property xsi:type=`"StringProperty`" Name=`"NsgForPreparation`" Value=`{ResourceGroupName}/{NetworkSecurityGroupName}`"/></CustomProperties>
    <!--NeedCopy-->
    
  5. PowerShellウィンドウで、変更したカスタムプロパティに変数を割り当てます。 次に例を示します:

      $customProperty = "<CustomProperties xmlns=`"http://schemas.citrix.com/2014/xd/machinecreation`" xmlns:xsi=`"http://www.w3.org/2001/XMLSchema-instance`"><Property xsi:type=`"StringProperty`" Name=`"NsgForPreparation`" Value=`"{ResourceGroupName}/{NetworkSecurityGroupName}`"/></CustomProperties>"
    <!--NeedCopy-->
    
  6. $cred = Get-Credentialを実行します。 プロンプトが表示されたら、接続の資格情報を入力します。 資格情報はAzureアプリケーションIDとシークレットです。
  7. 次のコマンドを実行します。

      Set-Item -PSPath XDHyp:\HostingUnits\<hostingunitname> -CustomProperties $customProperty -username $cred.username -Securepassword $cred.password
    <!--NeedCopy-->
    

    重要:

    「SubscriptionIdが欠落しています」というメッセージが表示された場合は、当該のカスタムプロパティ内で、すべての二重引用符(”)をバッククォート文字とそれに続く二重引用符(`”)に置き換えます。

  8. dirを実行して、更新されたCustomProperties設定を確認します。

更新内容が反映されるまで1分以上かかります。

ネットワークセキュリティグループの詳細を取得する

ネットワークセキュリティグループの詳細を取得するには、まずネットワークセキュリティグループを含むリソースグループを取得し、次にリソースグループ名に基づいてネットワークセキュリティグループを取得します。

  1. ネットワークセキュリティグループを含むリソースグループを取得します。 次に例を示します:

      Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -AdditionalDataFilter '{"containedresourcetypes": ["networksecuritygroup"]}'
    <!--NeedCopy-->
    
  2. リソースグループ名に基づいてネットワークセキュリティグループを取得します。 次に例を示します:

      Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType securitygroup -MaxRecords 5 -AdditionalDataFilter '{"location": ["eastus", "westus"], "resourcegroup":["resourcegroupname"]}'
    <!--NeedCopy-->
    

空のリソースグループをフィルタリングする

PowerShellコマンドGet-HypInventoryItemを使用すると、マシンカタログの作成時にマスターイメージ、マシンプロファイル、または準備済みイメージを選択する際に空のリソースグループをフィルタリングできます。

例:

  • 1ページあたりの最大レコード数を取得する:

       Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5
     <!--NeedCopy-->
    
  • ページ内の最大レコード数を取得し、フィルタリングして特定のリソースを含むリソースコンテナを検索します。

       Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -AdditionalDataFilter '{"containedresourcetypes": ["vm", "manageddisk", "snapshot", "imageversion", "storageaccount"]}'
     <!--NeedCopy-->
    
  • skipで直接ページを指定して取得し、フィルタリングして特定のリソースを含むリソースコンテナを検索します。

       Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -skip 20 -AdditionalDataFilter '{"containedresourcetypes": ["vm", "manageddisk", "snapshot", "imageversion", "storageaccount"]}'
     <!--NeedCopy-->
    
  • トークンを使用して次のページを取得し、フィルタリングして特定のリソースを含むリソースコンテナを検索します。

       Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -AdditionalDataFilter '{"containedresourcetypes": ["vm", "manageddisk", "snapshot", "imageversion", "storageaccount"]}' -ContinuationToken 'ew0KICAiJGlkIjogIjEiLA0KICAiTWF4Um93cyI6IDUsDQogICJSb3dzVG9Ta2lwIjogMjUsDQogICJLdXN0b0NsdXN0ZXJVcmwiOiAiaHR0cHM6Ly9hcmctbmV1LTEzLXNmLmFyZy5jb3JlLndpbmRvd3MubmV0Ig0KfQ=='
     <!--NeedCopy-->
    
  • Citrix内部タグタグが付いたすべてのリソースグループを取得し、MaxRecordsを使用して最大レコード数を制限します。

       Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5
     <!--NeedCopy-->
    
  • Citrix内部タグを使用してマシンプロファイル(マスターイメージ)をフィルタリングし、MaxRecordsを使用して最大レコード数を制限します。

       Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -AdditionalDataFilter '{"containedresourcetypes": ["vm", "templatespecversion"]}'
     <!--NeedCopy-->
    
  • Citrix内部タグを使用して準備済みイメージをフィルタリングし、MaxRecordsを使用して最大レコード数を制限します。

       Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -AdditionalDataFilter '{"containedresourcetypes": ["manageddisk", "snapshot", "imageversion"]}'
     <!--NeedCopy-->
    
  • Citrix内部タグを使用してマシンプロファイル(準備済みイメージ)をフィルタリングし、MaxRecordsを使用して最大レコード数を制限します。

       Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -AdditionalDataFilter '{"containedresourcetypes": ["vm", "templatespecversion"]}'
     <!--NeedCopy-->
    
  • Citrix内部タグを使用してイメージをフィルタリングし、MaxRecordsを使用して最大レコード数と場所を制限します。

       Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -AdditionalDataFilter '{"containedresourcetypes": ["manageddisk", "snapshot", "imageversion", "storageaccount"], "location": ["eastus", "westus"]}'
     <!--NeedCopy-->
    
  • タグCitrixResourceを考慮せずにすべてのリソースグループを取得します。

       Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 50 -AdditionalDataFilter '{"containedresourcetypes": ["manageddisk", "snapshot", "imageversion", "storageaccount"]}' -Force $true
     <!--NeedCopy-->
    

必要なAzure権限

このセクションでは、Azureに必要な 最低限の権限一般的な権限について説明します。

最低限の権限

最低限の権限により、セキュリティ制御が向上します。 ただし、最低限の権限だけが付与されている場合は、追加の権限が必要な新機能が失敗します。 このセクションでは、アクションごとに最低限の権限の一覧を表示します。

ホスト接続の作成

Azureから取得した情報を使用して、ホスト接続を追加します。

  "Microsoft.Network/virtualNetworks/read",
  "Microsoft.Compute/virtualMachines/read",
  "Microsoft.Compute/disks/read",
  "Microsoft.Resources/providers/read",
  "Microsoft.Resources/subscriptions/locations/read",
  "Microsoft.Resources/tenants/read",
  "Microsoft.Network/networkSecurityGroups/join/action",
  "Microsoft.Network/networkSecurityGroups/read",
  "Microsoft.Network/networkSecurityGroups/securityRules/read"
<!--NeedCopy-->

VMの電源管理

マシンインスタンスの電源をオンまたはオフにします。

  "Microsoft.Compute/virtualMachines/read",
  "Microsoft.Resources/subscriptions/resourceGroups/read",
  "Microsoft.Compute/virtualMachines/deallocate/action",
  "Microsoft.Compute/virtualMachines/start/action",
  "Microsoft.Compute/virtualMachines/restart/action",
  "Microsoft.Insights/diagnosticsettings/delete",
  "Microsoft.Insights/diagnosticsettings/read",
  "Microsoft.Insights/diagnosticsettings/write",
<!--NeedCopy-->

VMの作成、更新、または削除

マシンカタログを作成してから、マシンを追加、削除、更新し、マシンカタログを削除します。

以下は、マスターイメージが管理対象ディスクである場合、またはスナップショットがホスティング接続と同じリージョンにある場合に必要となる最低限の権限の一覧です。

  "Microsoft.Resources/subscriptions/resourceGroups/read",
  "Microsoft.Resources/deployments/validate/action",
  "Microsoft.Resources/tags/read",
  "Microsoft.Resources/tags/write",
  "Microsoft.Compute/virtualMachines/read",
  "Microsoft.Compute/virtualMachines/write",
  "Microsoft.Compute/virtualMachines/delete",
  "Microsoft.Compute/virtualMachines/deallocate/action",
  "Microsoft.Compute/snapshots/read",
  "Microsoft.Compute/snapshots/write",
  "Microsoft.Compute/snapshots/delete",
  "Microsoft.Compute/snapshots/beginGetAccess/action",
  "Microsoft.Compute/snapshots/endGetAccess/action",
  "Microsoft.Compute/disks/read",
  "Microsoft.Compute/disks/write",
  "Microsoft.Compute/disks/delete",
  "Microsoft.Compute/disks/beginGetAccess/action",
  "Microsoft.Compute/disks/endGetAccess/action",
  "Microsoft.Compute/locations/publishers/artifacttypes/types/versions/read",
  "Microsoft.Compute/skus/read",
  "Microsoft.Compute/virtualMachines/extensions/read",
  "Microsoft.Compute/virtualMachines/extensions/write",
  "Microsoft.Features/providers/features/read",
  "Microsoft.Network/virtualNetworks/read",
  "Microsoft.Network/virtualNetworks/subnets/join/action",
  "Microsoft.Network/virtualNetworks/subnets/read",
  "Microsoft.Network/networkSecurityGroups/read",
  "Microsoft.Network/networkSecurityGroups/write",
  "Microsoft.Network/networkSecurityGroups/delete",
  "Microsoft.Network/networkSecurityGroups/join/action",
  "Microsoft.Network/networkInterfaces/read",
  "Microsoft.Network/networkInterfaces/write",
  "Microsoft.Network/networkInterfaces/delete",
  "Microsoft.Network/networkInterfaces/join/action",
  "Microsoft.Network/locations/usages/read",
  "Microsoft.Compute/capacityReservationGroups/capacityReservations/read",
  "Microsoft.Compute/capacityReservationGroups/deploy/action"
<!--NeedCopy-->

以下の機能の最低限の権限に基づき、以下の追加の権限が必要です:

  • マスターイメージが、ホスト接続と同じリージョンにあるストレージアカウント内のVHDである場合:

       "Microsoft.Storage/storageAccounts/read",
       "Microsoft.Storage/storageAccounts/listKeys/action",
     <!--NeedCopy-->
    
  • マスターイメージが、Azure Compute Gallery(旧称:Shared Image Gallery)のImageVersionである場合:

       "Microsoft.Compute/galleries/read",
       "Microsoft.Compute/galleries/images/read",
       "Microsoft.Compute/galleries/images/versions/read",
     <!--NeedCopy-->
    
  • マスターイメージが管理対象ディスクかスナップショットである場合、またはVHDがホスティング接続のリージョンとは異なるリージョンにある場合:

       "Microsoft.Storage/storageAccounts/read",
       "Microsoft.Storage/storageAccounts/listKeys/action",
       "Microsoft.Storage/storageAccounts/write",
       "Microsoft.Storage/storageAccounts/delete",
       "Microsoft.Storage/checknameavailability/read",
       "Microsoft.Storage/locations/usages/read",
       "Microsoft.Storage/skus/read",
     <!--NeedCopy-->
    
  • Citrix管理対象リソースグループを使用する場合:

       "Microsoft.Resources/subscriptions/resourceGroups/write",
       "Microsoft.Resources/subscriptions/resourceGroups/delete",
     <!--NeedCopy-->
    
  • 共有テナントまたはサブスクリプションでマスターイメージを、Azure Compute Gallery(旧称:Shared Image Gallery)に配置した場合:

       "Microsoft.Compute/galleries/write",
       "Microsoft.Compute/galleries/images/write",
       "Microsoft.Compute/galleries/images/versions/write",
       "Microsoft.Compute/galleries/read",
       "Microsoft.Compute/galleries/images/read",
       "Microsoft.Compute/galleries/images/versions/read",
       "Microsoft.Compute/galleries/delete",
       "Microsoft.Compute/galleries/images/delete",
       "Microsoft.Compute/galleries/images/versions/delete",
       "Microsoft.Resources/subscriptions/read",
     <!--NeedCopy-->
    
  • Azure専用ホストサポートを使用する場合:

       "Microsoft.Compute/hostGroups/read",
       "Microsoft.Compute/hostGroups/write",
       "Microsoft.Compute/hostGroups/hosts/read",
     <!--NeedCopy-->
    
  • 顧客管理キー(CMK)でサーバー側暗号化(SSE)を使用する場合:

       "Microsoft.Compute/diskEncryptionSets/read",
     <!--NeedCopy-->
    
  • ARMテンプレート(マシンプロファイル)を使用してVMを展開する場合:

       "Microsoft.Resources/deployments/write",
       "Microsoft.Resources/deployments/operationstatuses/read",
       "Microsoft.Resources/deployments/read",
       "Microsoft.Resources/deployments/delete",
       "Microsoft.Insights/DataCollectionRuleAssociations/Read",
       "Microsoft.Insights/dataCollectionRules/read",
     <!--NeedCopy-->
    
  • Azureテンプレートスペックをマシンプロファイルとして使用する場合:

       "Microsoft.Resources/templateSpecs/read",
       "Microsoft.Resources/templateSpecs/versions/read",
     <!--NeedCopy-->
    

非管理対象ディスクを使用するマシンの作成、更新、および削除

以下は、マスターイメージがVHDであり、管理者から提供されたリソースグループを使用する場合に必要となる最低限の権限の一覧です:

  "Microsoft.Resources/subscriptions/resourceGroups/read",
  "Microsoft.Resources/tags/read",
  "Microsoft.Resources/tags/write",
  "Microsoft.Storage/storageAccounts/delete",
  "Microsoft.Storage/storageAccounts/listKeys/action",
  "Microsoft.Storage/storageAccounts/read",
  "Microsoft.Storage/storageAccounts/write",
  "Microsoft.Storage/checknameavailability/read",
  "Microsoft.Storage/locations/usages/read",
  "Microsoft.Storage/skus/read",
  "Microsoft.Compute/virtualMachines/deallocate/action",
  "Microsoft.Compute/virtualMachines/delete",
  "Microsoft.Compute/virtualMachines/read",
  "Microsoft.Compute/virtualMachines/write",
  "Microsoft.Resources/deployments/validate/action",
  "Microsoft.Network/networkInterfaces/delete",
  "Microsoft.Network/networkInterfaces/join/action",
  "Microsoft.Network/networkInterfaces/read",
  "Microsoft.Network/networkInterfaces/write",
  "Microsoft.Network/networkSecurityGroups/delete",
  "Microsoft.Network/networkSecurityGroups/join/action",
  "Microsoft.Network/networkSecurityGroups/read",
  "Microsoft.Network/networkSecurityGroups/write",
  "Microsoft.Network/virtualNetworks/subnets/read",
  "Microsoft.Network/virtualNetworks/read",
  "Microsoft.Network/virtualNetworks/subnets/join/action",
  "Microsoft.Network/locations/usages/read",
<!--NeedCopy-->

コスト管理

仮想マシンの価格を取得するために必要な最小限の権限は次のとおりです:

  "Microsoft.Consumption/pricesheets/read"
<!--NeedCopy-->

一般的な権限

Contributor(投稿者)の役割には、すべてのリソースを管理するための完全なアクセス権があります。 この一連の権限は、新しい機能の取得を妨げるものではありません。

以下の一連の権限は、現在の機能セットで必要とされるよりも多くの権限が含まれていますが、今後の互換性の面でベストなものを提供します:

  "Microsoft.Compute/diskEncryptionSets/read",
  "Microsoft.Compute/disks/beginGetAccess/action",
  "Microsoft.Compute/disks/delete",
  "Microsoft.Compute/disks/endGetAccess/action",
  "Microsoft.Compute/disks/read",
  "Microsoft.Compute/disks/write",
  "Microsoft.Compute/galleries/delete",
  "Microsoft.Compute/galleries/images/delete",
  "Microsoft.Compute/galleries/images/read",
  "Microsoft.Compute/galleries/images/versions/delete",
  "Microsoft.Compute/galleries/images/versions/read",
  "Microsoft.Compute/galleries/images/versions/write",
  "Microsoft.Compute/galleries/images/write",
  "Microsoft.Compute/galleries/read",
  "Microsoft.Compute/galleries/write",
  "Microsoft.Compute/hostGroups/hosts/read",
  "Microsoft.Compute/hostGroups/read",
  "Microsoft.Compute/hostGroups/write",
  "Microsoft.Compute/snapshots/beginGetAccess/action",
  "Microsoft.Compute/snapshots/delete",
  "Microsoft.Compute/snapshots/endGetAccess/action",
  "Microsoft.Compute/snapshots/read",
  "Microsoft.Compute/snapshots/write",
  "Microsoft.Compute/virtualMachines/deallocate/action",
  "Microsoft.Compute/virtualMachines/delete",
  "Microsoft.Compute/virtualMachines/read",
  "Microsoft.Compute/virtualMachines/restart/action",
  "Microsoft.Compute/virtualMachines/start/action",
  "Microsoft.Compute/virtualMachines/write",
  "Microsoft.Compute/locations/publishers/artifacttypes/types/versions/read",
  "Microsoft.Compute/skus/read",
  "Microsoft.Compute/virtualMachines/extensions/read",
  "Microsoft.Compute/virtualMachines/extensions/write",
  "Microsoft.Network/networkInterfaces/delete",
  "Microsoft.Network/networkInterfaces/join/action",
  "Microsoft.Network/networkInterfaces/read",
  "Microsoft.Network/networkInterfaces/write",
  "Microsoft.Network/networkSecurityGroups/delete",
  "Microsoft.Network/networkSecurityGroups/join/action",
  "Microsoft.Network/networkSecurityGroups/read",
  "Microsoft.Network/networkSecurityGroups/write",
  "Microsoft.Network/virtualNetworks/subnets/read",
  "Microsoft.Network/virtualNetworks/read",
  "Microsoft.Network/virtualNetworks/subnets/join/action",
  "Microsoft.Network/locations/usages/read",
  "Microsoft.Resources/deployments/operationstatuses/read",
  "Microsoft.Resources/deployments/read",
  "Microsoft.Resources/deployments/validate/action",
  "Microsoft.Resources/deployments/write",
  "Microsoft.Resources/deployments/delete",
  "Microsoft.Resources/subscriptions/resourceGroups/read",
  "Microsoft.Resources/subscriptions/resourceGroups/write",
  "Microsoft.Resources/subscriptions/resourceGroups/delete",
  "Microsoft.Resources/providers/read",
  "Microsoft.Resources/subscriptions/locations/read",
  "Microsoft.Resources/subscriptions/read",
  "Microsoft.Resources/tags/read",
  "Microsoft.Resources/tags/write",
  "Microsoft.Resources/tenants/read",
  "Microsoft.Resources/templateSpecs/read",
  "Microsoft.Resources/templateSpecs/versions/read",
  "Microsoft.Storage/storageAccounts/delete",
  "Microsoft.Storage/storageAccounts/listKeys/action",
  "Microsoft.Storage/storageAccounts/read",
  "Microsoft.Storage/storageAccounts/write",
  "Microsoft.Storage/checknameavailability/read",
  "Microsoft.Storage/locations/usages/read",
  "Microsoft.Storage/skus/read",
  "Microsoft.Features/providers/features/read",
  "Microsoft.Insights/DataCollectionRuleAssociations/Read",
  "Microsoft.Insights/dataCollectionRules/read",
  "Microsoft.Insights/diagnosticsettings/delete",
  "Microsoft.Insights/diagnosticsettings/read",
  "Microsoft.Insights/diagnosticsettings/write",
  "Microsoft.Compute/capacityReservationGroups/capacityReservations/read",
  "Microsoft.Consumption/pricesheets/read",
  "Microsoft.Network/networkSecurityGroups/join/action",
  "Microsoft.Network/networkSecurityGroups/read",
  "Microsoft.Network/networkSecurityGroups/securityRules/read",
  "Microsoft.Compute/capacityReservationGroups/deploy/action"
<!--NeedCopy-->

必要なAzureホスト接続の権限を構成する

ARMテンプレートを使用して、ホスト接続に関連付けられたAzureのサービスプリンシパルまたはユーザーアカウントに必要な最小限の権限をすべて簡単に構成し、すべてのMCS操作を実行できます。 このARMテンプレートは、次の処理を自動化します:

  • 操作に必要な最小限の権限を持つAzureの役割を作成する。
  • サブスクリプションレベルで、既存のAzureサービス プリンシパルにこの役割を割り当てる。

このARMテンプレートは、Azure PortalまたはPowerShellコマンドを使用して展開できます。 詳しくは、「ARM Template for Citrix Virtual Apps and Desktops Operations」を参照してください。

ホスト接続の権限を検証する

MCSマシンカタログの作成と管理に関連するタスクを実行するために、ホスト接続の権限を検証できます。 この実装により、VMの作成、削除、更新、VMの電源管理などのさまざまなシナリオに必要な不足している権限を事前に見つけることができ、重要なタイミングでブロックされることを回避できます。

PowerShellコマンドTest-HypHypervisorConnectionを使用して、ホスト接続の権限を検証できます。 コマンドの結果は一覧としてキャプチャされ、一覧内の各項目は3つのセクションに分割されます。

  • カテゴリ:ユーザーがMCSマシンカタログを作成および管理するために実行できるアクションまたはタスク。
  • 修正アクション:ユーザーの不足している権限による不一致を解決するために管理者が実行する必要がある手順。
  • 不足している権限:カテゴリに不足している権限の一覧。

権限を検証するには、次の手順を実行します:

  1. Azureへのホスト接続を作成します。
  2. Delivery ControllerホストからPowerShellウィンドウを開きます。
  3. asnp citrix*を実行し、Citrix固有のPowerShellモジュールをロードします。
  4. 接続をテストするために必要な権限があるかどうか確認するには、次のコマンドを実行します。

      Test-HypHypervisorConnection -LiteralPath "XDHyp:\Connections\AzureCon"
    <!--NeedCopy-->
    

    SPNに必要な役割レベルの権限:

    • Microsoft.Authorization/roleDefinitions/read(サブスクリプションレベル、またはリソースグループが提供されている場合はリソースグループレベル)
    • Microsoft.Authorization/roleAssignments/read(サブスクリプションレベル、またはリソースグループが提供されている場合はリソースグループレベル)

    SPNに必要なAPIレベルの権限:

    Microsoft.Graph:

    • Application.Read.All
    • Directory.Read.All
    • ServicePrincipalEndpoint.Read.All
  5. 権限を検索するために必要な不足している権限を追加した後、次のコマンドを実行して、さまざまなカテゴリの権限があるかどうかを確認します。

    例:

    必要なより高いレベルの承認とともに、サブスクリプションレベルで接続をテストするには:

      Test-HypHypervisorConnection -LiteralPath XDHyp:\Connections\ AzureCon -SecurePassword $password -UserName 922e65d5-38ae-4cf5-xxxx-xxxxxxxxx
     <!--NeedCopy-->
    

    例:

    高いレベルの承認なしで、リソースグループレベルで接続をテストするには:

      Test-HypHypervisorConnection -LiteralPath XDHyp:\Connections\testles -CustomProperties $customProperties | Format-List
    <!--NeedCopy-->
    

    リソースグループは接続固有の情報であるため、CustomPropertiesパラメーターはリソースグループレベルを提供するために使用されます。

    例:

    より高いレベルの承認とともに、リソースグループレベルで接続をテストするには:

      Test-HypHypervisorConnection -LiteralPath XDHyp:\Connections\testles -SecurePassword $password -UserName 922e65d5-38ae-4cf5-832b-54122196b7dd -CustomProperties $customProperties
    <!--NeedCopy-->
    

権限について詳しくは、「必要なAzure権限」を参照してください。

次の手順

追加情報

Microsoft Azureへの接続