クラウドサブスクリプションにセッションレコーディングリソースを展開する
この記事では、Azureサブスクリプションにセッションレコーディングリソースを展開する方法について説明します。
セッションレコーディングサービス内から、次のセッションレコーディングリソースをAzureサブスクリプションに展開できます。
- セッションレコーディングサーバー
- データベース
- ストレージ
- ロードバランサー
Azureサブスクリプションにセッションレコーディングリソースを展開するには、次の2つの方法があります。
-
ホスト接続を使用する。これはAzureサブスクリプションに接続します。ホスト接続を作成するには、サブスクリプション情報を提供する必要があります。詳細については、この記事の後半にある「ホスト接続を介してサイトを作成および展開する」を参照してください。
-
サブスクリプション情報を提供したくない場合は、展開するリソースとその方法が含まれるAzure Resource Managerテンプレート (ARMテンプレート) を作成します。詳細については、この記事の後半にある「ARMテンプレートを介してサイトを作成および展開する」を参照してください。
ホスト接続を介してサイトを作成および展開する
このセクションでは、ホスト接続を介してサイトを作成および展開する手順と、この方法で展開されたサイトで実行できる次の操作について説明します。
- Azureに展開されている既存のサイトにリソースを追加する
- ロードバランサーへのアクセスが許可されているIPアドレスを変更する
- Azureの使用にかかる実際のコストを表示する
ホスト接続を介してサイトを作成および展開する
-
Session Recordingサービスの左側のナビゲーションから、「構成」>「サーバー管理」を選択します。
「サーバー管理」ページ(/ja-jp/session-recording/service/media/server-management-page.png)
-
「サーバー管理」ページで、「サイトの作成」をクリックします。「サイトの作成」ページが表示されます。
「サイトの作成」ページ(/ja-jp/session-recording/service/media/create-site-page.png)
-
「ホスト接続を介してサイトを作成および展開する」を選択します。主な手順は左側のナビゲーションに表示されます。
ホスト接続を介してサイトを作成および展開する(/ja-jp/session-recording/service/media/create-and-deploy-site-through-host-connection.png)
-
サイト名と説明を入力し、Azureサブスクリプションに接続するホスト接続を選択し、リージョンを指定します。
-
ホスト接続が設定されていない場合は、この記事の後半にあるホスト接続の追加を参照して追加してください。
-
Azure Governmentリージョンはサポートされていません。
-
-
サイト情報の入力を完了したら、「次へ」をクリックして続行します。
-
(オプション)VMおよびストレージ構成の推奨事項を取得するには、記録のニーズに関する情報を提供します。
「問題ありません、この手順をスキップします」をクリックするか、何も選択せずに「次へ」をクリックすることで、この手順をスキップできます。
記録のニーズ(/ja-jp/session-recording/service/media/your-recording-needs.png)
ドロップダウンリストからオプションを選択すると、選択内容に応じて推奨事項が表示されます。推奨事項の横には「リセット」ボタンがあります。これにより、選択内容とそのセクションの対応する推奨事項をクリアできます。
-
Azure portalに移動し、選択したリージョンに新しい仮想ネットワークを作成し、新しい仮想ネットワークとVDAが接続されている仮想ネットワークとの間に仮想ネットワークピアリングを設定します。次に、新しい仮想ネットワークにサブネットを追加します。以下のサブネットIDを見つけて入力してください。

プライベートネットワーク内のリソース間の接続を維持するには、ストレージとデータベースのプライベートエンドポイントを作成チェックボックスを選択します。
ストレージとデータベースのプライベートエンドポイントを作成チェックボックスを選択した後、以下の点を考慮して、別のサブネットIDを入力するかどうかを決定します。
- Session RecordingサーバーをActive Directoryドメインに参加させる予定がない場合、サブネットは不要なため、サブネットIDフィールドは空のままにします。
- サブネットIDフィールドを空のままにすると、Session RecordingサーバーはAzure Active Directoryドメインに参加します。

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

注:
- VM数フィールドには、推奨される数がある場合は事前に値が入力されています。必要に応じて数を変更してください。
- 見積もり費用は標準価格に基づいており、割引は考慮されていません。実際の費用は見積もりよりも低くなる可能性があります。
-
Session RecordingサーバーをVDAと同じドメインに参加させ、Session Recordingサーバーの証明書を指定します。
-
VDAがActive Directoryドメインに接続している場合は、サーバーをActive Directoryドメインに参加させるチェックボックスを選択し、関連情報を入力します。サーバーをActive Directoryドメインに参加させるチェックボックスを選択すると、オンプレミスのActive DirectoryとAzure ADを統合するハイブリッドシナリオの展開を構成することになります。
-
VDAがAzure Active Directory (Azure AD) ドメインに接続している場合は、サーバーをActive Directoryドメインに参加させるチェックボックスをオフにします。現在のサイトの作成が完了したら、Session Recordingサーバーを同じAzure ADドメインに手動で参加させてください。純粋なAzure AD展開は、Session Recording 2402以降でのみ利用可能です。

Microsoft Entra ID ドメインにサーバーを参加させる(/ja-jp/session-recording/service/media/join-servers-to-azure-ad-domain.png)
注:
2023年7月以降、Microsoft はアジュール アクティブ ディレクトリ (Azure AD) の名称をマイクロソフト エントラ ID に変更しました。本ドキュメントでは、Azure Active Directory、Azure AD、または AAD への言及はすべて Microsoft Entra ID を指します。
-
-
記録ファイルを保存するために、Azureストレージアカウントとファイル共有を構成します。料金情報については、Azure Filesの料金を参照してください。

-
Azureで2つのSQLデータベースを作成します。1つはセッション記録データベース(sessionrecordingという名前)として使用され、もう1つは管理者ログデータベース(sessionrecordingloggingという名前)として使用されます。

注:
ホスト接続を介して展開された既存のサイトにリソース、特にSession Recordingサーバーを追加する場合、サイト作成時に設定されたデータベース管理者パスワードを提供する必要があります。
-
Session Recordingサーバー間でワークロードを分散するためにロードバランサーを作成します。ロードバランサーへのアクセスを以下のIPアドレスのみに制限するフィールドに、VDAのIPアドレスまたは範囲をコンマ(,)で区切って入力します。料金情報については、Load Balancerの料金を参照してください。

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

-
Session RecordingサーバーをSession Recordingサービスにオンボードするためのセキュアクライアントを作成します。
「クライアントの作成」をクリックして、Citrixがユーザーに代わってセキュアクライアントを作成できるようにします。または、Citrix Cloud™コンソールのIDおよびアクセス管理 > APIアクセスタブからセキュアクライアントを作成し、その後、以下の情報を入力します。
クライアントの作成ボタン(/ja-jp/session-recording/service/media/create-client-button.png)
-
作成するサイトの概要を表示します。必要に応じて、鉛筆アイコンをクリックして設定を編集するか、ボタンをクリックして展開を開始します。
作成するサイトの概要(/ja-jp/session-recording/service/media/summary-about-the-site-to-be-created.png)
展開プロセスの例を次に示します。
展開の進行状況:
展開の進行状況(/ja-jp/session-recording/service/media/deployment-in-progress.png)
サイトの展開が進行中の間は、「ステータスの表示」をクリックして進行状況を表示できます。
展開に失敗しました:
展開に失敗しました(/ja-jp/session-recording/service/media/deployment-failed.png)
展開プロセス中にエラーが発生した場合は、「ステータスの表示」をクリックしてエラーの詳細を表示します。エラーの詳細の例を次に示します。
展開エラーの詳細(/ja-jp/session-recording/service/media/deployment-error-details.png)
「構成に戻る」をクリックするか、展開をキャンセルできます。「構成に戻る」をクリックすると、「サイトの作成」ページに戻り、構成を変更して再試行できます。展開をキャンセルする場合は、ウィザードに従ってサイトとサイト用に作成されたAzureリソースを削除します。例:
展開がキャンセルされました(/ja-jp/session-recording/service/media/deployment-cancelled.png)
展開に成功しました:
サイトの展開が完了すると、サイトを展開し、その下に作成されたリソースを表示および管理できます。View statusボタンがSettingsに変わります。Azureに展開されたサイトを表すAzureアイコンが利用可能です。 サイト設定の詳細については、「サイトとサーバーの設定」を参照してください。

Azureに展開されている既存のサイトにリソースを追加する
ホスト接続を介してAzureに展開した既存のサイトには、サーバーやストレージなどのリソースを追加できます。これを行うには、次の手順を完了します。
- Session Recordingサービスの左側のナビゲーションから、構成 > サーバー管理を選択します。
- Server Managementページで、ターゲットサイトを見つけて展開します。Azureに展開されたサイトを表すAzureアイコンが利用可能です。
-
Add resourcesをクリックします。

-
「リソースの追加」ページで、必要に応じて「サーバーの追加」と「ストレージの追加」をクリックします。

-
サーバーを追加するには、Add serverをクリックし、次の手順を完了します。

- 追加するサーバーの数を指定します。
- DomainセクションでProvide credentialsをクリックして、新しいサーバーを既存のサーバーと同じドメインに参加させます。
- Administrator accountsセクションでProvide credentialsをクリックして、サイト作成時に設定したデータベース管理者パスワードを提供します。さらに、追加するサーバーマシン上の管理者アカウントのパスワードを設定する必要があります。サイト作成時に設定したパスワードと同じものを使用することをお勧めします。
- 「クライアントの作成」をクリックして、新しいサーバーをSession Recordingサービスにオンボードします。
- 「展開の開始」をクリックします。
-
記録ファイルを保存するためのストレージを追加するには、「ストレージの追加」をクリックし、以下の手順に従って操作を完了します。
-
サイトが標準ストレージアカウントで作成された場合、追加するファイル共有の数を指定するよう求められます。例:
標準ストレージアカウントに追加するファイル共有(/ja-jp/session-recording/service/media/file-shares-to-add-for-a-standard-storage.png)
-
サイトがプレミアムストレージアカウントで作成された場合、追加するファイル共有の数を指定し、各ファイル共有の容量をカスタマイズできます。例:
標準ストレージアカウントに追加するファイル共有(/ja-jp/session-recording/service/media/file-shares-to-add-for-a-premium-storage.png)
-
「展開の開始」をクリックします。
注:
- 「展開の開始」ボタンは、以下のいずれかの条件が満たされたときに利用可能になります。
- 少なくとも1つのサーバーが指定され、ドメインとセキュアクライアントが構成されていること。
- 少なくとも1つのファイル共有が指定されていること。
- リソースの展開が進行中の場合、ロードバランサーの「設定」ボタンは無効になります。
-
追加されたリソースの展開が失敗し、Session Recordingサービスがこれらのリソースをサブスクリプションから削除できない場合があります。この場合、以下のようなプロンプトが表示され、対応を促されます。
リソースのクリーンアップに失敗しました(/ja-jp/session-recording/service/media/failed-to-clean-up-resources.png)
- 「展開の開始」ボタンは、以下のいずれかの条件が満たされたときに利用可能になります。
-
-
ロードバランサーへのアクセスが許可されているIPアドレスを変更する
Azureにホスト接続を介して展開した既存のサイトの場合、ロードバランサーへのアクセスが許可されているIPアドレスを変更できます。これを行うには、次の手順を完了します。
- Session Recordingサービスの左側のナビゲーションから、構成 > サーバー管理を選択します。
- サーバー管理ページで、ターゲットサイトを見つけて展開します。Azureに展開されたサイトを表すAzureアイコンが利用可能です。
-
ロードバランサーセクションで、設定ボタンをクリックします。
ロードバランサーの設定ボタン(/ja-jp/session-recording/service/media/settings-button-for-the-load-balancer.png)
-
ロードバランサー設定ページで、新しいVDAのIPアドレスまたは範囲を、ロードバランサーへのアクセスを以下のIPアドレスのみに制限するフィールドにコンマ(,)で区切って入力します。
ロードバランサーにアクセスできるVDAを設定する(/ja-jp/session-recording/service/media/setting-which-vdas-can-access-the-load-balancer.png)
- 保存をクリックします。
Azure使用の実際のコストを表示する
Azureにホスト接続を介して展開した既存のサイトの場合、コスト額をクリックしてコストの詳細を表示します。例:
Azure使用のコスト(/ja-jp/session-recording/service/media/cost-for-using-azure.png)
コスト分析(/ja-jp/session-recording/service/media/cost-analysis.png)
実際のコストを表示するためのヒント:
- 今月の面グラフにカーソルを合わせると、日付の参照線と、その日のデータがオーバーレイとして表示されます。
- さまざまなリソースの履歴コストは、折れ線グラフで表されます。折れ線グラフは、少なくとも2か月分のデータがある場合に利用できます。折れ線グラフにカーソルを合わせると、その月の参照線とコストの内訳がオーバーレイとして表示されます。特定のリソースのみの折れ線グラフを表示するには、そのリソースにカーソルを合わせます。
ホスト接続を追加する
ホスト接続を追加するには、次の手順を実行します。
-
ホスト接続を介してサイトを作成および展開するが選択されているサイトの作成ページで、接続の追加をクリックします。または、ホスト接続ページで接続の追加をクリックします。
サイトの作成ページにアクセスするには、Session Recordingサービスの左側のナビゲーションから構成 > サーバー管理を選択し、次にサイトの作成をクリックします。

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

-
接続の追加ページで、新しいホスト接続に名前と説明(オプション)を付けます。AzureサブスクリプションIDと、アプリケーション登録に関する次の必須情報を入力します。
- アプリケーション(クライアント)ID
- サービスプリンシパルオブジェクトID(アプリケーションに関連付けられているサービスプリンシパルオブジェクトのID)
- ディレクトリ(テナント)ID
- クライアントシークレット
- シークレットの有効期限

Azure サブスクリプション ID を見つけるには、次の手順を実行します。
- Azure ポータルにサインインします。
- Azure サービスセクションで、サブスクリプションを選択します。
-
リストからサブスクリプションを見つけ、2列目に表示されているサブスクリプション ID をコピーします。
Azure サブスクリプション ID の検索(/ja-jp/session-recording/service/media/finding-azure-subscription-id.png)
アプリケーション登録に関する必要な情報を取得するには、次の手順を実行します。
-
(すでにアプリケーションが登録されている場合は、この手順をスキップしてください。) Azure AD テナントにアプリケーションを登録します。ID およびアクセス管理機能を Azure AD に委任するには、アプリケーションを登録する必要があります。
アプリケーションを登録するには、2つの方法があります。
方法 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 role #> [CmdletBinding()] Param( [Parameter(Mandatory = $true)] [String] $tenantId, [Parameter(Mandatory = $true)] [String] $subscriptionId, [Parameter(Mandatory = $true)] [String] $appName, [Parameter(Mandatory = $true)] [String] $role ) if ($role -ne "Citrix Session Recording service" -and $role -ne "Citrix Session Recording Deployment" -and $role -ne "Contributor") { throw [System.Exception] "Invalid role '$role', only support 'Citrix Session Recording service', 'Citrix Session Recording Deployment', and 'Contributor'." } 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 } Connect-AzAccount -TenantId $tenantId -Subscription $subscriptionId try { $azureAdApplication = Get-AzADApplication -DisplayName $appName if ($null -eq $azureAdApplication) { Write-Host "Create a new app registration for Citrix Session Recording" -ForegroundColor Green $azureAdApplication = New-AzADApplication -DisplayName $appName -AvailableToOtherTenants $false } else { Write-Host "App registration '$appName' already exists." -ForegroundColor Yellow } $azureAdApplicationServicePrincipal = Get-AzADServicePrincipal -DisplayName $appName if($null -eq $azureAdApplicationServicePrincipal) { $azureAdApplicationServicePrincipal = New-AzADServicePrincipal -AppId $azureAdApplication.AppId Write-Host "Create a service principal for app registration '$appName'" -ForegroundColor Green }else{ Write-Host "Service principal already exists for app registration '$appName'" -ForegroundColor Yellow } if ($role -eq "Citrix Session Recording service" -or $role -eq "Citrix Session Recording Deployment") { $rootPath = Get-Location $customRolePath = $(Join-Path -Path $rootPath -ChildPath "sessionrecording.json") | Resolve-Path $customRoleJson = Get-Content $customRolePath | ConvertFrom-Json $customRoleJson.AssignableScopes[0] = "/subscriptions/" + $subscriptionId $tmpCustomRolePath = Join-Path -Path $rootPath -ChildPath "sessionrecording_tmp.json" $roleDef = Get-AzRoleDefinition -Name $role if ($null -eq $roleDef) { try { $customRoleJson | ConvertTo-Json -depth 32 | Set-Content $tmpCustomRolePath Write-Host "Create a custom role '$role'" -ForegroundColor Green New-AzRoleDefinition -InputFile $tmpCustomRolePath } catch { Write-Host "Failed to create custom role, error: $_" -ForegroundColor Red throw $_.Exception } } else { try { $customRoleJson | Add-Member -MemberType NoteProperty -Name 'id' -Value $($roleDef.Id) $customRoleJson | ConvertTo-Json -depth 32 | Set-Content $tmpCustomRolePath Write-Host "Upadate the custom role '$role'" -ForegroundColor Green Set-AzRoleDefinition -InputFile $tmpCustomRolePath } catch { Write-Host "Failed to update custom role, error: $_" -ForegroundColor Red throw $_.Exception } } } $roleAssignment = Get-AzRoleAssignment -RoleDefinitionName $role -ObjectId $($azureAdApplicationServicePrincipal.Id) if ($null -eq $roleAssignment) { Write-Host "Assign role '$role' to app '$appName'" -ForegroundColor Green New-AzRoleAssignment -RoleDefinitionName $role -ApplicationId $azureAdApplication.AppId } else { Write-Host "Role '$role' already assigned to app '$appName'" -ForegroundColor Yellow } 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, error: $_" -ForegroundColor Red Write-Host "Please make sure the current azure admin has permission to assign roles" -ForegroundColor Red } <!--NeedCopy--> -
次のカスタムロールファイルをコピーし、sessionrecording.jsonという名前を付けます。このカスタムロールファイルは、登録するアプリケーションに最小限の権限を割り当てるのに役立ちます。
{ "name": "Citrix Session Recording service", "description": "This role has permissions which allow Citrix Session Recording service to deploy Session Recording resources using a host connection.", "assignableScopes": [ "/subscriptions/*" ], "actions": [ "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/PrivateEndpointConnectionsApproval/action", "Microsoft.KeyVault/vaults/read", "Microsoft.KeyVault/vaults/secrets/read", "Microsoft.KeyVault/vaults/secrets/write", "Microsoft.KeyVault/vaults/write", "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action", "Microsoft.ManagedIdentity/userAssignedIdentities/read", "Microsoft.ManagedIdentity/userAssignedIdentities/write", "Microsoft.Network/dnsForwardingRulesets/forwardingRules/read", "Microsoft.Network/dnsForwardingRulesets/forwardingRules/write", "Microsoft.Network/dnsForwardingRulesets/read", "Microsoft.Network/dnsForwardingRulesets/virtualNetworkLinks/read", "Microsoft.Network/dnsForwardingRulesets/virtualNetworkLinks/write", "Microsoft.Network/dnsForwardingRulesets/write", "Microsoft.Network/dnsResolvers/outboundEndpoints/join/action", "Microsoft.Network/dnsResolvers/outboundEndpoints/read", "Microsoft.Network/dnsResolvers/outboundEndpoints/write", "Microsoft.Network/dnsResolvers/read", "Microsoft.Network/dnsResolvers/write", "Microsoft.Network/loadBalancers/backendAddressPools/join/action", "Microsoft.Network/loadBalancers/read", "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/privateDnsZones/join/action", "Microsoft.Network/privateDnsZones/read", "Microsoft.Network/privateDnsZones/virtualNetworkLinks/read", "Microsoft.Network/privateDnsZones/virtualNetworkLinks/write", "Microsoft.Network/privateDnsZones/write", "Microsoft.Network/privateEndpoints/privateDnsZoneGroups/read", "Microsoft.Network/privateEndpoints/privateDnsZoneGroups/write", "Microsoft.Network/privateEndpoints/read", "Microsoft.Network/privateEndpoints/write", "Microsoft.Network/publicIPAddresses/join/action", "Microsoft.Network/publicIPAddresses/read", "Microsoft.Network/publicIPAddresses/write", "Microsoft.Network/virtualNetworks/join/action", "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/privateEndpointConnectionsApproval/action", "Microsoft.Sql/servers/read", "Microsoft.Sql/servers/write", "Microsoft.Storage/storageAccounts/PrivateEndpointConnectionsApproval/action", "Microsoft.Storage/storageAccounts/fileServices/shares/delete", "Microsoft.Storage/storageAccounts/fileServices/shares/read", "Microsoft.Storage/storageAccounts/fileServices/shares/write", "Microsoft.Storage/storageAccounts/listkeys/action", "Microsoft.Storage/storageAccounts/read", "Microsoft.Storage/storageAccounts/write" ], "NotActions": [], "DataActions": [], "NotDataActions": [] } <!--NeedCopy--> - AppRegistration.ps1 と sessionrecording.json の両方のファイルを、必ず同じフォルダー内に格納するようにしてください。
- 必要に応じて、次のいずれかのコマンドを実行します。
アプリケーションを作成し、前述のカスタムロールファイル (sessionrecording.json) を使用して最小限の権限を割り当てるには、次を実行します。
``` .\AppRegistration.ps1 -tenantId <tenant ID> -subscriptionId <subscription ID> -appName <application name> -role "Citrix Session Recording service" <!--NeedCopy--> ``` To create an application and assign it the Azure built-in **Contributor** role, run: ``` .\AppRegistration.ps1 -tenantId <tenant ID> -subscriptionId <subscription ID> -appName <application name> -role "Contributor" <!--NeedCopy--> ```方法 2:
Azure portal に移動し、自分でアプリケーションを登録します。アプリケーションに適切な権限を付与します。必要な最小限の権限については、Method 1 の sessionrecording.json ファイルを参照してください。
-
-
アプリケーションの表示名をクリックします。
アプリケーションの表示名(/ja-jp/session-recording/service/media/application-display-name.png)
-
概要ページで、アプリケーション (クライアント) ID とディレクトリ (テナント) ID を見つけます。ローカルディレクトリ内のマネージドアプリケーションの横にあるリンクをクリックして、アプリケーションに関連付けられているサービスプリンシパルオブジェクトのIDを見つけます。クライアント資格情報の横にあるリンクをクリックして、クライアントシークレットIDとその有効期限を見つけます。
アプリケーションの基本情報(/ja-jp/session-recording/service/media/application-essentials.png)
たとえば、アプリケーションに関連付けられているサービスプリンシパルオブジェクトのID:
サービスプリンシパルオブジェクトID(/ja-jp/session-recording/service/media/service-principal-object-id.png)
たとえば、クライアントシークレットIDとその有効期限:
クライアントシークレットIDとその有効期限(/ja-jp/session-recording/service/media/client-secret-id-and-its-expiration-date.png)
-
指定したホスト接続が利用可能かどうかをテストするには、保存をクリックします。
指定したホスト接続が利用可能な場合、ホスト接続ページに戻り、ホスト接続が正常に追加されたことを示すプロンプトが表示されます。
Session Recording サービスは、期限切れおよび期限が近づいているクライアントシークレットを、それぞれエラーアイコンと警告アイコンを使用して通知します。対応するホスト接続をクリックし、接続の詳細ページでシークレットの変更をクリックして、クライアントシークレットとその有効期限を更新できます。
シークレットの変更(/ja-jp/session-recording/service/media/change-secret.png)
ARM テンプレートを使用してサイトを作成および展開する
Azure Resource Manager テンプレート (ARM テンプレート) を作成して、Azure に Session Recording リソースを展開できます。この目標を達成するための主な手順は次のとおりです。
- Session RecordingサービスでARMテンプレートを作成します。ARMテンプレートは、デプロイするリソースとその方法を記述したJavaScript Object Notation (JSON) ファイルです。
- ARMテンプレートをダウンロードして解凍します。解凍したテンプレートフォルダー内のデプロイスクリプトを実行して、テンプレートで指定されたリソースをAzureにデプロイし始めます。
- Azureでデプロイの進行状況を確認します。デプロイが完了したら、Session Recordingをセットアップして稼働させます。Session Recordingをセットアップするには、インストールするSession Recordingサーバーのバージョンを指定し、resourceInfo.jsonファイルをアップロードする必要があります。
具体的な手順は次のとおりです。
-
Session Recordingサービスの左側のナビゲーションから、構成 > サーバー管理を選択します。

-
サーバー管理ページで、サイトの作成をクリックします。サイトの作成ページが表示されます。

-
ARMテンプレートを使用してサイトを作成およびデプロイを選択します。主な手順は左側のナビゲーションに表示されます。

-
サイト名と説明を入力し、次へをクリックします。
-
(オプション) VMおよびストレージ構成の推奨事項を取得するには、記録のニーズに関する情報を提供します。
問題ありません。この手順をスキップしますをクリックするか、何も選択せずに次へをクリックすることで、この手順をスキップできます。

ドロップダウンリストからオプションを選択すると、選択内容に応じた推奨事項が表示されます。推奨事項の横にはリセットボタンがあります。これにより、選択内容とそのセクションの対応する推奨事項をクリアできます。
-
Azure portalに移動し、選択したリージョンに新しい仮想ネットワークを作成し、新しい仮想ネットワークとVDAが接続されている仮想ネットワークとの間に仮想ネットワークピアリングを設定します。次に、新しい仮想ネットワークにサブネットを追加します。以下のサブネットIDを見つけて入力します。

プライベートネットワーク内のリソース間の接続を維持するには、ストレージとデータベースのプライベートエンドポイントを作成するチェックボックスを選択します。
ストレージとデータベースのプライベートエンドポイントを作成するチェックボックスを選択した後、以下の点を考慮して、別のサブネットIDを入力するかどうかを決定します。
- Session RecordingサーバーをActive Directoryドメインに参加させる予定がない場合、サブネットは不要であるため、サブネットIDフィールドは空のままにします。
- サブネットIDフィールドを空のままにすると、Session RecordingサーバーをAzure Active Directoryドメインに参加させることになります。

-
(すでにアプリケーションが登録されている場合は、この手順をスキップしてください。) Azure ADテナントにアプリケーションを登録します。IDおよびアクセス管理機能をAzure ADに委任するには、アプリケーションを登録する必要があります。
アプリケーションを登録する方法は2つあります。
方法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 role #> [CmdletBinding()] Param( [Parameter(Mandatory = $true)] [String] $tenantId, [Parameter(Mandatory = $true)] [String] $subscriptionId, [Parameter(Mandatory = $true)] [String] $appName, [Parameter(Mandatory = $true)] [String] $role ) if ($role -ne "Citrix Session Recording service" -and $role -ne "Citrix Session Recording Deployment" -and $role -ne "Contributor") { throw [System.Exception] "Invalid role '$role', only support 'Citrix Session Recording service', 'Citrix Session Recording Deployment', and 'Contributor'." } 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 } Connect-AzAccount -TenantId $tenantId -Subscription $subscriptionId try { $azureAdApplication = Get-AzADApplication -DisplayName $appName if ($null -eq $azureAdApplication) { Write-Host "Create a new app registration for Citrix Session Recording" -ForegroundColor Green $azureAdApplication = New-AzADApplication -DisplayName $appName -AvailableToOtherTenants $false } else { Write-Host "App registration '$appName' already exists." -ForegroundColor Yellow } $azureAdApplicationServicePrincipal = Get-AzADServicePrincipal -DisplayName $appName if($null -eq $azureAdApplicationServicePrincipal) { $azureAdApplicationServicePrincipal = New-AzADServicePrincipal -AppId $azureAdApplication.AppId Write-Host "Create a service principal for app registration '$appName'" -ForegroundColor Green }else{ Write-Host "Service principal already exists for app registration '$appName'" -ForegroundColor Yellow } if ($role -eq "Citrix Session Recording service" -or $role -eq "Citrix Session Recording Deployment") { $rootPath = Get-Location $customRolePath = $(Join-Path -Path $rootPath -ChildPath "sessionrecordingdeployment.json") | Resolve-Path $customRoleJson = Get-Content $customRolePath | ConvertFrom-Json $customRoleJson.AssignableScopes[0] = "/subscriptions/" + $subscriptionId $tmpCustomRolePath = Join-Path -Path $rootPath -ChildPath "sessionrecording_tmp.json" $roleDef = Get-AzRoleDefinition -Name $role if ($null -eq $roleDef) { try { $customRoleJson | ConvertTo-Json -depth 32 | Set-Content $tmpCustomRolePath Write-Host "Create a custom role '$role'" -ForegroundColor Green New-AzRoleDefinition -InputFile $tmpCustomRolePath } catch { Write-Host "Failed to create custom role, error: $_" -ForegroundColor Red throw $_.Exception } } else { try { $customRoleJson | Add-Member -MemberType NoteProperty -Name 'id' -Value $($roleDef.Id) $customRoleJson | ConvertTo-Json -depth 32 | Set-Content $tmpCustomRolePath Write-Host "Upadate the custom role '$role'" -ForegroundColor Green Set-AzRoleDefinition -InputFile $tmpCustomRolePath } catch { Write-Host "Failed to update custom role, error: $_" -ForegroundColor Red throw $_.Exception } } } $roleAssignment = Get-AzRoleAssignment -RoleDefinitionName $role -ObjectId $($azureAdApplicationServicePrincipal.Id) if ($null -eq $roleAssignment) { Write-Host "Assign role '$role' to app '$appName'" -ForegroundColor Green New-AzRoleAssignment -RoleDefinitionName $role -ApplicationId $azureAdApplication.AppId } else { Write-Host "Role '$role' already assigned to app '$appName'" -ForegroundColor Yellow } 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, error: $_" -ForegroundColor Red Write-Host "Please make sure the current azure admin has permission to assign roles" -ForegroundColor Red } <!--NeedCopy--> -
次のカスタムロールファイルをコピーし、sessionrecordingdeployment.jsonという名前を付けます。このカスタムロールファイルは、登録するアプリケーションに最小限の権限を割り当てるのに役立ちます。
{ "name": "Citrix Session Recording Deployment", "description": "This role has permissions which allow users to deploy Session Recording resources using an Azure Resource Manager template (ARM template). ", "assignableScopes": [ "/subscriptions/*" ], "actions": [ "Microsoft.Compute/availabilitySets/write", "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.ContainerInstance/containerGroups/read", "Microsoft.ContainerInstance/containerGroups/write", "Microsoft.KeyVault/vaults/PrivateEndpointConnectionsApproval/action", "Microsoft.KeyVault/vaults/read", "Microsoft.KeyVault/vaults/secrets/read", "Microsoft.KeyVault/vaults/secrets/write", "Microsoft.KeyVault/vaults/write", "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action", "Microsoft.ManagedIdentity/userAssignedIdentities/read", "Microsoft.ManagedIdentity/userAssignedIdentities/write", "Microsoft.Network/dnsForwardingRulesets/forwardingRules/read", "Microsoft.Network/dnsForwardingRulesets/forwardingRules/write", "Microsoft.Network/dnsForwardingRulesets/read", "Microsoft.Network/dnsForwardingRulesets/virtualNetworkLinks/read", "Microsoft.Network/dnsForwardingRulesets/virtualNetworkLinks/write", "Microsoft.Network/dnsForwardingRulesets/write", "Microsoft.Network/dnsResolvers/outboundEndpoints/join/action", "Microsoft.Network/dnsResolvers/outboundEndpoints/read", "Microsoft.Network/dnsResolvers/outboundEndpoints/write", "Microsoft.Network/dnsResolvers/read", "Microsoft.Network/dnsResolvers/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/join/action", "Microsoft.Network/networkSecurityGroups/read", "Microsoft.Network/networkSecurityGroups/securityRules/read", "Microsoft.Network/networkSecurityGroups/securityRules/write", "Microsoft.Network/networkSecurityGroups/write", "Microsoft.Network/privateDnsZones/join/action", "Microsoft.Network/privateDnsZones/read", "Microsoft.Network/privateDnsZones/virtualNetworkLinks/read", "Microsoft.Network/privateDnsZones/virtualNetworkLinks/write", "Microsoft.Network/privateDnsZones/write", "Microsoft.Network/privateEndpoints/privateDnsZoneGroups/read", "Microsoft.Network/privateEndpoints/privateDnsZoneGroups/write", "Microsoft.Network/privateEndpoints/read", "Microsoft.Network/privateEndpoints/write", "Microsoft.Network/publicIPAddresses/join/action", "Microsoft.Network/publicIPAddresses/read", "Microsoft.Network/publicIPAddresses/write", "Microsoft.Network/virtualNetworks/join/action", "Microsoft.Network/virtualNetworks/read", "Microsoft.Network/virtualNetworks/subnets/join/action", "Microsoft.Network/virtualNetworks/subnets/read", "Microsoft.Resources/deploymentScripts/read", "Microsoft.Resources/deploymentScripts/write", "Microsoft.Resources/deployments/operationstatuses/read", "Microsoft.Resources/deployments/read", "Microsoft.Resources/deployments/validate/action", "Microsoft.Resources/deployments/write", "Microsoft.Resources/subscriptions/resourceGroups/read", "Microsoft.Resources/subscriptions/resourceGroups/write", "Microsoft.Resources/templateSpecs/read", "Microsoft.Resources/templateSpecs/versions/read", "Microsoft.Resources/templateSpecs/versions/write", "Microsoft.Resources/templateSpecs/write", "Microsoft.Sql/servers/auditingSettings/write", "Microsoft.Sql/servers/databases/write", "Microsoft.Sql/servers/firewallRules/write", "Microsoft.Sql/servers/privateEndpointConnectionsApproval/action", "Microsoft.Sql/servers/read", "Microsoft.Sql/servers/write", "Microsoft.Storage/storageAccounts/PrivateEndpointConnectionsApproval/action", "Microsoft.Storage/storageAccounts/blobServices/containers/read", "Microsoft.Storage/storageAccounts/blobServices/containers/write", "Microsoft.Storage/storageAccounts/fileServices/shares/write", "Microsoft.Storage/storageAccounts/listkeys/action", "Microsoft.Storage/storageAccounts/read", "Microsoft.Storage/storageAccounts/write" ], "notActions": [], "dataActions": [], "notDataActions": [] } <!--NeedCopy--> - AppRegistration.ps1 と sessionrecordingdeployment.json の両方のファイルを、必ず同じフォルダー内に格納するようにしてください。
-
必要に応じて、次のいずれかのコマンドを実行します。
アプリケーションを作成し、前述のカスタムロールファイル(sessionrecordingdeployment.json)を使用して最小限の権限を割り当てるには、以下を実行します。
.\AppRegistration.ps1 -tenantId <tenant ID> -subscriptionId <subscription ID> -appName <application name> -role "Citrix Session Recording Deployment" <!--NeedCopy-->アプリケーションを作成し、Azure組み込みの共同作成者ロールを割り当てるには、以下を実行します。
.\AppRegistration.ps1 -tenantId <tenant ID> -subscriptionId <subscription ID> -appName <application name> -role "Contributor" <!--NeedCopy-->
方法2:
Azureポータルにアクセスし、自分でアプリケーションを登録します。アプリケーションに適切な権限を付与します。必要な最小限の権限については、方法1のsessionrecordingdeployment.jsonファイルを参照してください。
-
-
後でインストールするセッションレコーディングサーバーの構成を指定します。
セッションレコーディングサーバーとしてVMを作成する(/ja-jp/session-recording/service/media/virtual-machines.png)
注:
- VMの数フィールドには、推奨される数がある場合は事前に値が入力されています。必要に応じて数を変更してください。
- 見積もり費用は標準価格に基づいており、割引は考慮されていません。実際の費用は見積もりよりも低くなる可能性があります。
-
セッションレコーディングサーバーをVDAと同じドメインに参加させ、セッションレコーディングサーバーの証明書を指定します。
-
VDAがActive Directoryドメインに接続している場合は、サーバーをActive Directoryドメインに参加させるチェックボックスを選択し、関連情報を入力します。
-
VDAがAzure Active Directory (Azure AD) ドメインに接続している場合は、サーバーをActive Directoryドメインに参加させるチェックボックスをオフにします。現在のサイトの作成が完了したら、セッションレコーディングサーバーを同じAzure ADドメインに手動で参加させてください。純粋なAzure AD展開は、Session Recording 2402以降でのみ利用可能であることに注意してください。
Active Directoryドメインにサーバーを参加させる(/ja-jp/session-recording/service/media/join-servers-to-ad-domain.png)

-
-
記録ファイルを保存するために、Azureストレージアカウントとファイル共有を構成します。料金情報については、Azure Filesの料金を参照してください。
記録ファイルを保存するためにAzureストレージアカウントとファイル共有を構成する(/ja-jp/session-recording/service/media/configure-azure-storage-account-and-file-shares-for-recording-storage.png)
-
Azureに2つのSQLデータベースを作成します。1つはセッションレコーディングデータベース(sessionrecordingという名前)として使用され、もう1つは管理者ログデータベース(sessionrecordingloggingという名前)として使用されます。

-
セッションレコーディングサーバー間でワークロードを分散するために、ロードバランサーを作成します。VDAsのIPアドレスまたは範囲を「Restrict access of the load balancer to only the following addresses」フィールドにコンマ(,)で区切って入力します。価格情報については、「Load Balancer pricing」を参照してください。

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

-
セッションレコーディングサーバーをセッションレコーディングサービスにオンボードするためのセキュアクライアントを作成します。
Citrixがお客様に代わってセキュアクライアントを作成するには、Create clientをクリックします。または、Citrix CloudコンソールのIdentity and Access Management > API Accessタブからセキュアクライアントを作成し、以下の情報を入力することもできます。

-
作成されるリソースの概要を表示し、必要に応じて鉛筆アイコンをクリックして設定を編集します。その後、Download templateをクリックします。デプロイするリソースとその方法が記述されたAEMテンプレートが、お使いのマシンのDownloadsフォルダーにダウンロードされます。新しく作成されたサイトは、Server Managementページでも確認できます。

-
Downloadsフォルダーに移動し、ARMテンプレートを解凍します。解凍したファイルフォルダーを開き、アドレスバーに「PowerShell」と入力してEnterキーを押します。そのフォルダーでPowerShellウィンドウが開くまで待ちます。
-
DeploySessionRecording.ps1という名前のJavaScript Object Notation (JSON) スクリプトを実行します。プロンプトが表示されたパラメーターに値を指定します。実際のパラメーターは、テンプレート作成時に指定した設定によって異なります。例:


-
Azure ポータルに移動し、デプロイを含むリソースグループを見つけ、デプロイの進行状況を確認します。デプロイ全体が「成功」と表示されるまで待ちます。

-
Session Recording サービスの「サーバー管理」ページに戻ります。新しく作成されたサイトを見つけると、「セットアップ」ボタンが表示されます。「セットアップ」をクリックして Session Recording をセットアップし、稼働させます。


Session Recording をセットアップするには、インストールする Session Recording サーバーのバージョンを指定し、resourceInfo.json ファイルをアップロードする必要があります。


データベースの資格情報を入力します。

「起動開始」をクリックします。その後、「サーバー管理」ページでセットアップの進行状況を確認できます。


サーバーリストで個々のサーバーのインストール進行状況を表示できます。

すべてのセッション録画サーバーがリストで利用可能と表示されたら、サイトの作成は完了し、指定されたリソースがAzureにデプロイされます。
