Session Recording

Session Recordingリソースをクラウドサブスクリプションに展開する

サイトを作成して、Session Recordingサービス内から、次のSession RecordingリソースをAzureサブスクリプションに展開できるようになりました:

  • Session Recordingサーバー
  • データベース
  • ストレージ
  • ロードバランサー

また、Session Recordingサービス内から、推奨されるVMとストレージ構成を取得し、コストを予測し、Azureを使用するための実際の毎月のコストを表示することもできます。

Azureに展開された既存のサイトの場合、サーバーやストレージなどのリソースをサイトに追加し、ロードバランサーへのアクセスが許可されるIPアドレスを変更できます。

この記事では、次の手順について説明します:

サイトを作成しSession RecordingリソースをAzureサブスクリプションに展開する

このセクションでは、サイトを作成しSession RecordingリソースをAzureサブスクリプションに展開する方法について段階的に説明します。

  1. Session Recordingサービスの左側ナビゲーションで、[構成 ]>[サーバー管理] を選択します。

    [サーバー管理]ページ

  2. [サーバー管理] ページで、[サイトの作成] をクリックします。[サイトの作成] ページが開きます。

    サイトの作成ページ

  3. [ホスト接続経由でサイトを作成および展開する] を選択します。主な手順は左側のナビゲーションに一覧表示されています。

    ホスト接続経由でサイトを作成および展開する

  4. サイト名と説明を入力し、Azureサブスクリプションに接続するホスト接続を選択し、リージョンを指定します。

    • ホスト接続がない場合は、「ホスト接続を追加する」を参照してホスト接続を追加します。

    • Azure Governmentリージョンはサポートされていません。

  5. サイト情報を入力したら、[次へ] をクリックして続行します。

  6. (オプション)VMおよびストレージ構成の推奨事項を取得するには、録画のニーズに関する情報を提供してください。

    この手順をスキップするには [この手順をスキップします。] をクリックするか、何も選択せずに [次へ] をクリックします。

    録画のニーズ

    ドロップダウンリストからオプションを選択すると、選択に応じた推奨事項が表示されます。[リセット] ボタンは推奨事項の横にあります。このボタンで、そのセクションの選択と対応する推奨事項をクリアできます。

  7. Session Recordingサーバーとして仮想マシン(VM)を作成します。

    VMをSession Recordingサーバーとして作成する

    注:

    • VDAがVMとは別の仮想ネットワークまたはオンプレミスネットワークに存在する場合は、接続を確立してVMがVDAと通信できるようにします。
    • [仮想マシンの数] フィールドには、推奨される数(設定されている場合)が事前に入力されています。必要に応じて数を変更します。
    • コスト見積もりは標準価格に基づいており、割引は考慮されていません。実際のコストは見積もりよりも低いことが予想されます。
  8. VMのドメインと証明書を指定します。VMをVDAと同じドメインに参加させます。

    VMのドメインと証明書を指定する

  9. 録画ファイルを保存するために、Azureストレージアカウントとファイル共有を構成します。価格情報については、「Azure Filesの価格」を参照してください。

    録画ファイルを保存するためのAzureストレージアカウントとファイル共有を構成する

  10. Azureに2つのSQLデータベースを作成します。1つはSession Recordingデータベース(sessionrecordingという名称)として使用され、もう1つは管理者ログ データベース (sessionrecordingloggingという名称)として使用されます。

    Azureに2つのSQLデータベースを作成する

  11. ロードバランサーを作成して、VM(Session Recordingサーバー)間でワークロードを分散します。[ロードバランサーのアクセスを以下のアドレスのみに制限する] フィールドにVDAのIPアドレスまたは範囲を入力し、コンマ(,)で区切ります。価格情報については、「Load Balancerの価格」を参照してください。

    ロードバランサーの作成

  12. (オプション)作成するAzureリソースにタグを適用します。

    Azureリソースへのタグの適用

  13. VM(Session Recordingサーバー)をSession Recordingサービスに登録するためのセキュアクライアントを作成します。

    [クライアントの作成] をクリックすると、Citrixがユーザーに代わってセキュアクライアントを作成します。または、Citrix Cloudコンソールの [IDおよびアクセス管理]>[APIアクセス] タブを通じてセキュアクライアントを作成し、以下の情報を入力できます。

    [クライアントの作成]ボタン

  14. 作成するサイトの概要を表示します。必要に応じて鉛筆アイコンをクリックして設定を編集するか、ボタンをクリックして展開を開始します。

    作成するサイトについての概要

    次に、展開プロセスの例を示します:

    展開が進行中:

    展開が進行中

    サイト展開の進行中に、[状態の表示] をクリックして進行状況を表示できます。

    展開の失敗:

    展開の失敗

    展開プロセス中にエラーが発生した場合は、[状態の表示] をクリックしてエラーの詳細を表示します。エラーの詳細の例:

    展開エラーの詳細

    [構成に戻る] または [展開をキャンセルする] をクリックできます。[構成に戻る] をクリックすると、[サイトの作成] ページに戻り、そこで構成を変更して再試行できます。展開のキャンセルが必要な場合は、ウィザードに従ってサイトとそのサイト用に作成されたAzureリソースを削除します。例:

    展開がキャンセルされました

    展開の成功:

    サイトの展開が完了すると、サイトを広げて、その下に作成されたリソースを表示および管理できるようになります。[状態の表示] ボタンが [設定] に変わります。Azureアイコンは、Azureに展開されたサイトを表すために使用できます。 サイト設定について詳しくは、「サイトとサーバーの設定」を参照してください。

    展開されたサイト

Azureに展開された既存のサイトにリソースを追加する

Azureに展開された既存のサイトの場合、サーバーやストレージなどのリソースをサイトに追加できます。このためには、次の手順を実行します:

  1. Session Recordingサービスの左側ナビゲーションで、[構成 ]>[サーバー管理] を選択します。
  2. [サーバー管理] ページで、ターゲットサイトを見つけて展開します。Azureアイコンは、Azureに展開されたサイトを表すために使用できます。
  3. [リソースの追加] をクリックします。

    [リソースの追加]ボタン

  4. [リソースの追加] ページで、必要に応じて [サーバーの追加] および [ストレージの追加] をクリックします。

    [リソースの追加]ページ

    • サーバーを追加するには、[サーバーの追加] をクリックし、次の手順を実行します:

      サーバーの追加

      1. 追加するサーバーの数を指定します。
      2. [資格情報を提供する] をクリックして、新しいサーバーを既存のサーバーと同じドメインに参加させます。
      3. [クライアントの作成] をクリックして、新しいサーバーをSession Recordingサービスに追加します。
      4. [展開を開始する] をクリックします。
    • 録画ファイルを保存するためのストレージを追加するには、[ストレージの追加] をクリックし、それに応じて次の手順を実行します:

      1. サイトが標準ストレージアカウントを使用して作成されている場合は、追加するファイル共有の数を指定するように求められます。例:

        標準ストレージアカウントに追加するファイル共有

      2. サイトがPremium Storageアカウントを使用して作成されている場合は、追加するファイル共有の数を指定し、各ファイル共有の容量をカスタマイズできます。例:

        標準ストレージアカウントに追加するファイル共有

      3. [展開を開始する] をクリックします。

        注:

        • 次の条件のいずれかが満たされる場合、[展開を開始する] ボタンが使用可能になります:
          • 少なくとも1つのサーバーが指定され、ドメインとセキュアクライアントが構成されている。
          • 少なくとも1つのファイル共有が指定されている。
        • リソースの展開が進行中の場合、ロードバランサーの [設定] ボタンは無効になります。
        • 追加されたリソースの展開が失敗し、Session Recordingサービスがこれらのリソースをサブスクリプションから削除できない場合があります。この場合、アクションを実行するために、次のようなプロンプトが表示されます:

          Failed to clean up resources(リソースのクリーンアップに失敗しました)

ロードバランサーへのアクセスが許可されるIPアドレスを変更する

Azureに展開された既存のサイトの場合、ロードバランサーへのアクセスが許可されるIPアドレスを変更できます。このためには、次の手順を実行します:

  1. Session Recordingサービスの左側ナビゲーションで、[構成 ]>[サーバー管理] を選択します。
  2. [サーバー管理] ページで、ターゲットサイトを見つけて展開します。Azureアイコンは、Azureに展開されたサイトを表すために使用できます。
  3. [ロードバランサー] セクションの [設定] ボタンをクリックします。

    ロードバランサーの[設定]ボタン

  4. [ロードバランサー] 設定ページで、[ロードバランサーのアクセスを以下のアドレスのみに制限する] フィールドにVDAの新しいIPアドレスまたは範囲を入力し、コンマ(,)で区切ります。

    ロードバランサーにアクセスできるVDAの設定

  5. [保存] をクリックします。

ホスト接続を追加する

Session RecordingリソースをAzureサブスクリプションに展開するには、Azureサブスクリプションに接続するホスト接続が必要です。ホスト接続を追加するには、次の手順を実行します:

  1. [サイトの作成] ページの [ホスト接続経由でサイトを作成および展開する] が選択された状態で、[接続の追加] をクリックします。または、[ホスト接続] ページで [接続の追加] クリックします。

    [サイトの作成] ページにアクセスするには、Session Recordingサービスの左側ナビゲーションで、[構成 ]>[サーバー管理] を選択し、[サイトの作成] をクリックします。

    [サーバー管理]ページ

    [ホスト接続] ページにアクセスするには、Session Recordingサービスの左側のナビゲーションから [構成]>[ホスト接続] を選択します。

    [ホスト接続]ページ

  2. [接続の追加] ページで、新しいホスト接続に名前と説明を入力します(オプション)。AzureサブスクリプションIDと、アプリケーションの登録に関する次の必須情報を入力します:

    • アプリケーション(クライアント)ID
    • サービスプリンシパルオブジェクトID(アプリケーションに関連付けられたサービスプリンシパルオブジェクトのID)
    • ディレクトリ(テナント)ID
    • クライアントシークレット
    • シークレットの有効期限

    [接続の追加]ページ

    AzureサブスクリプションIDを確認するには、次の手順を実行します:

    1. Azure Portalにサインインします。
    2. [Azureサービス] セクションで、[サブスクリプション] を選択します。
    3. 一覧でサブスクリプションを見つけて、2番目の列に表示されているサブスクリプションIDをコピーします。

      AzureサブスクリプションIDの検索

    アプリケーションの登録に関して必須情報を取得するには、次の手順を実行します:

    1. (既にアプリケーションを登録している場合は、この手順をスキップしてください。)Azure ADテナントにアプリケーションを登録します。IDおよびアクセス管理機能をAzure ADに委任するには、アプリケーションを登録する必要があります。

      アプリケーションを登録するには2つの方法があります。

      方法1:

      1. 次のCitrix提供のスクリプトをコピーし、たとえばAppRegistration.ps1などの名前を付けます:

        <#
        .SYNOPSIS
                Copyright (c) Citrix Systems, Inc. All Rights Reserved.
        .DESCRIPTION
            Create Azure app registrations and give proper permissions for Citrix Session Recording service deployment
        .Parameter azureTenantID
        .Parameter azureSubscriptionID
        .Parameter appName
        .Parameter customRole
        #>
        [CmdletBinding()]
        Param(
            [Parameter(Position = 0, Mandatory = $true)]  [String] $tenantId,
            [Parameter(Mandatory = $true)] [String] $subscriptionId,
            [Parameter(Mandatory = $true)] [String] $appName,
            [Parameter(Mandatory = $false)] [Switch] $customRole
        )
        # Import the Azure module
        try {
            Get-InstalledModule -Name "Az.Accounts" -ErrorAction Stop
        }
        catch {
            Install-Module -Name "Az.Accounts" -Scope CurrentUser -Repository PSGallery -SkipPublisherCheck -Force
        }
        try {
            Get-InstalledModule -Name "Az.Resources" -ErrorAction Stop
        }
        catch {
            Install-Module -Name "Az.Resources" -Scope CurrentUser -Repository PSGallery -SkipPublisherCheck -Force
        }
        
        # Prompt the user to sign in with their credential
        Connect-AzAccount -TenantId $tenantId
        try
        {
            # Create a new app registration with a display name
            Write-Host "Create a new app registration for Citrix Session Recording service" -ForegroundColor Green
            $azureAdApplication = New-AzADApplication -DisplayName $AppName -AvailableToOtherTenants $false
        
            # Create a service principal for the app registration
            $azureAdApplicationServicePrincipal = New-AzADServicePrincipal -AppId $azureAdApplication.AppId
            $azureAdApplicationServicePrincipal = Get-AzADServicePrincipal -DisplayName $appName
        
            #Attempt to give role assignment
            if($customRole)
            {
                $rootPath = Get-Location
                $roleDef = Get-AzRoleDefinition -Name "Citrix Session Recording service"
                if($roleDef -eq $null)
                {
                    $customRolePath = $(Join-Path -Path $rootPath -ChildPath "sessionrecording.json") | Resolve-Path
                    $customRoleJson = Get-Content $customRolePath | ConvertFrom-Json
                    $customRoleJson.AssignableScopes[0] = "/subscriptions/" + $subscriptionId
                    $customRoleJson | ConvertTo-Json -depth 32 | Set-Content $customRolePath -Verbose
                    # Create custom role
                    try
                    {
                        New-AzRoleDefinition -InputFile $customRolePath.Path
                    }
                    catch
                    {
                        Write-Host "Failed to create custom roles $_" -ForegroundColor Red
                    }
                }
        
                # Assign this custom role to newly created application
                Write-Host "Try to assign session recording service custom roles to the above app" -ForegroundColor Green
                New-AzRoleAssignment -RoleDefinitionName "Citrix Session Recording service" -ApplicationId $azureAdApplication.AppId
        
            }
            else
            {
                Write-Host "Try to assign builtin contributor roles to above app" -ForegroundColor Green
                New-AzRoleAssignment -RoleDefinitionName "Contributor" -ApplicationId $azureAdApplication.AppId
            }
        
            Write-Host "Tenant ID: $tenantId" -ForegroundColor Green
            Write-Host "Subscription ID: $subscriptionId" -ForegroundColor Green
            Write-Host "Application ID $($azureAdApplication.AppId)" -ForegroundColor Green
            Write-Host "Service principal object ID $($azureAdApplicationServicePrincipal.id)" -ForegroundColor Green
        
        }
        catch
        {
            Write-Host "Failed to assign role assignment to this app $_" -ForegroundColor Red
            Write-Host "Please make sure the current azure admin has permission to assign roles" -ForegroundColor Red
        }
        <!--NeedCopy-->
        
      2. 次のカスタム役割ファイルをコピーし、sessionrecording.jsonという名前を付けます。このカスタム役割ファイルは、登録するアプリケーションに最小限の権限を割り当てるのに役立ちます。

        {
            "Name":  "Citrix Session Recording service",
            "Description":  "Custom role for session recording service",
            "AssignableScopes":  [
                         "/subscriptions/*"
                     ],
            "Actions":  [
                "Microsoft.Authorization/roleAssignments/write",
                "Microsoft.Authorization/roleDefinitions/delete",
                "Microsoft.Authorization/roleDefinitions/write",
                "Microsoft.Compute/availabilitySets/write",
                "Microsoft.Compute/virtualMachines/delete",
                "Microsoft.Compute/virtualMachines/extensions/read",
                "Microsoft.Compute/virtualMachines/extensions/write",
                "Microsoft.Compute/virtualMachines/read",
                "Microsoft.Compute/virtualMachines/runCommands/read",
                "Microsoft.Compute/virtualMachines/runCommands/write",
                "Microsoft.Compute/virtualMachines/write",
                "Microsoft.CostManagement/forecast/read",
                "Microsoft.CostManagement/query/read",
                "Microsoft.KeyVault/locations/deletedVaults/purge/action",
                "Microsoft.KeyVault/vaults/read",
                "Microsoft.KeyVault/vaults/write",
                "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action",
                "Microsoft.ManagedIdentity/userAssignedIdentities/read",
                "Microsoft.ManagedIdentity/userAssignedIdentities/write",
                "Microsoft.Network/loadBalancers/backendAddressPools/join/action",
                "Microsoft.Network/loadBalancers/write",
                "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/securityRules/read",
                "Microsoft.Network/networkSecurityGroups/securityRules/write",
                "Microsoft.Network/networkSecurityGroups/write",
                "Microsoft.Network/publicIPAddresses/join/action",
                "Microsoft.Network/publicIPAddresses/read",
                "Microsoft.Network/publicIPAddresses/write",
                "Microsoft.Network/virtualNetworks/read",
                "Microsoft.Network/virtualNetworks/subnets/join/action",
                "Microsoft.Network/virtualNetworks/subnets/read",
                "Microsoft.Resources/deployments/operationstatuses/read",
                "Microsoft.Resources/deployments/read",
                "Microsoft.Resources/deployments/write",
                "Microsoft.Resources/subscriptions/resourceGroups/delete",
                "Microsoft.Resources/subscriptions/resourceGroups/read",
                "Microsoft.Resources/subscriptions/resourceGroups/write",
                "Microsoft.Sql/servers/auditingSettings/write",
                "Microsoft.Sql/servers/databases/write",
                "Microsoft.Sql/servers/firewallRules/write",
                "Microsoft.Sql/servers/read",
                "Microsoft.Sql/servers/write",
                "Microsoft.Storage/storageAccounts/fileServices/shares/delete",
                "Microsoft.Storage/storageAccounts/fileServices/shares/write",
                "Microsoft.Storage/storageAccounts/listkeys/action",
                "Microsoft.Storage/storageAccounts/read",
                "Microsoft.Storage/storageAccounts/write"
                ],
            "NotActions":  [
        
                    ],
            "DataActions":  [
        
                    ],
            "NotDataActions":  [
        
                    ]
        
        }
        <!--NeedCopy-->
        
      3. AppRegistration.ps1sessionrecording.jsonを同じフォルダーに配置します。
      4. 必要に応じて、次のコマンドのいずれかを実行します。

        アプリケーションを作成し、前述のカスタム役割ファイル(sessionrecording.json)を使用して最小限の権限を割り当てるには、次のコマンドを実行します:

        .\AppRegistration.ps1 -tenantId <tenant ID> -subscriptionId <subscription ID> -appName <application name> -customRole
        <!--NeedCopy-->
        

        アプリケーションを作成し、それにAzure組み込みの 共同作成者の役割を割り当てるには、次のコマンドを実行します:

        .\AppRegistration.ps1 -tenantId <tenant ID>-subscriptionId <subscription ID>-appName <application name>
        <!--NeedCopy-->
        

      方法2:

      Azure Portalにアクセスし、自分でアプリケーションを登録します。アプリケーションに適切な権限を付与します。必要な最小限の権限については、方法1sessionrecording.jsonファイルを参照してください。

    2. アプリケーションの表示名をクリックします。

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

    3. 概要ページで、アプリケーション(クライアント)IDとディレクトリ(テナント)IDを見つけます。[Managed application in local directory] の横にあるリンクをクリックして、アプリケーションに関連付けられているサービスプリンシパルオブジェクトのIDを見つけます。[Client credentials] の横にあるリンクをクリックして、クライアントシークレットIDとその有効期限を確認します。

      アプリケーションの基本情報

      たとえば、アプリケーションに関連付けられたサービスプリンシパルオブジェクトのID:

      サービスプリンシパルオブジェクトのID

      たとえば、クライアントシークレットIDとその有効期限:

      クライアントシークレットIDとその有効期限

  3. [保存] をクリックして、指定したホスト接続が使用可能かどうかをテストします。

    指定したホスト接続が使用可能な場合は、[ホスト接続] ページに戻され、ホスト接続が正常に追加されたことを確認するメッセージが表示されます。

    Session Recordingサービスは、期限切れのクライアントシークレットと期限切れが近いクライアントシークレットを、それぞれエラーアイコンと警告アイコンを使用して通知します。対応するホスト接続をクリックし、[接続の詳細] ページで [シークレットの変更] をクリックすると、クライアントシークレットとその有効期限を更新できます。

    シークレットの変更

Azureの使用に必要な実際のコストを表示する

Azureに展開されたサイトの場合は、コストの金額をクリックしてコストの詳細を表示します。例:

Azureの利用にかかるコスト

コスト分析

実際のコストを表示するためのヒント:

  • 今月の面グラフ上にマウスを移動すると、日付とその日のデータの基準線がオーバーレイとして表示されます。
  • さまざまなリソースのコスト履歴が折れ線グラフで表示されます。折れ線グラフは、少なくとも2か月分のデータがある場合に使用できます。折れ線グラフの上にマウスを置くと、その月の基準線とコストの内訳がオーバーレイとして表示されます。特定のリソースのみの折れ線グラフを表示するには、リソースの上にマウスを置きます。
Session Recordingリソースをクラウドサブスクリプションに展開する