将 Session Recording 资源部署到云订阅

您可以创建一个站点,从 Session Recording 服务中将以下 Session Recording 资源部署到您的 Azure 订阅中:

  • Session Recording Server
  • 数据库
  • 存储
  • 负载平衡器

也可以从 Session Recording 服务中获取推荐的 VM 和存储配置、预测成本以及查看使用 Azure 的每月实际成本。

对于部署在 Azure 上的现有站点,您可以向其中添加包括服务器和存储在内的资源,并更改允许用于访问负载平衡器的 IP 地址。

本文将指导您完成以下过程:

创建一个站点并将 Session Recording 资源部署到您的 Azure 订阅中

本部分内容提供有关如何创建站点并将 Session Recording 资源部署到您的 Azure 订阅的分步说明。

  1. 在 Session Recording 服务的左侧导航栏中选择配置 > 服务器管理

    “服务器管理”页面

  2. 服务器管理页面上,单击创建站点。此时将显示创建站点页面。

    “创建站点”页面

  3. 选择通过主机连接创建和部署站点。左侧导航栏中列出了主要步骤。

    通过主机连接创建和部署站点

  4. 输入站点名称和说明,选择连接到您的 Azure 订阅的主机连接,然后指定区域。

    • 如果您没有主机连接,请参考添加主机连接来添加一个主机连接。

    • 不支持 Azure 政府区域。

  5. 完成站点信息后,单击下一步以继续。

  6. (可选)要获取有关 VM 和存储配置的建议,请提供与您的录制需求有关的信息。

    可以通过单击 I’m good, skip this step(我很好,跳过此步骤)或者在未选择任何内容的情况下单击下一 步来跳过此步骤。

    您的录制需求

    当您从下拉列表中选择选项时,系统会根据您的选择显示建议。建议旁边有一个可用的重置按钮。它使您可以清除该部分中的选择和相应的建议。

  7. 创建虚拟机 (VM) 作为您的 Session Recording Server。

    将 VM 创建为 Session Recording Server

    注意:

    • 如果您的 VDA 位于与 VM 不同的虚拟网络或本地网络中,请建立连接以确保 VM 能够与您的 VDA 通信。
    • 如果有 VM 数量字段,则会预先填充建议的数字。请根据需要更改该数字。
    • 估算的成本基于标准定价,不考虑折扣。您可以期望实际成本低于预期。
  8. 为 VM 指定域和证书。将 VM 加入与您的 VDA 相同的域。

    为 VM 指定域和证书

  9. 配置 Azure 存储帐户和文件共享以存储您的录制文件。有关定价信息,请参阅 Azure 文件定价

    配置 Azure 存储帐户和文件共享以存储您的录制文件

  10. 在 Azure 中创建两个 SQL 数据库。一个用作 Session Recording 数据库(名为 sessionrecording),另一个用作管理员日志记录数据库(名为 sessionrecordinglogging)。

    在 Azure 中创建两个 SQL 数据库

  11. 创建负载平衡器以在 VM (Session Recording Server) 之间分发工作负载。在 Restrict access of the load balancer to only the following addresses(将负载平衡器的访问权限限制为仅限以下地址)字段中输入 VDA 的 IP 地址或范围并将其用逗号 (,) 分隔。有关定价信息,请参阅负载平衡定价

    创建负载平衡器

  12. (可选)对要创建的 Azure 资源应用标记。

    将标记应用到 Azure 资源

  13. 创建安全客户端,以将 VM (Session Recording Server) 载入 Session Recording 服务。

    单击创建客户端,让 Citrix 代表您创建安全客户端。或者,您可以通过 Citrix Cloud 控制台的 Identity and Access Management(身份识别和访问管理)> API Access(API 访问权限)选项卡创建安全客户端,然后填写以下信息。

    “创建客户端”按钮

  14. 查看有关要创建的站点的摘要。如果需要,请单击铅笔图标以编辑设置,或者单击按钮开始部署。

    关于要创建的站点的摘要

    下面是部署过程的示例:

    部署正在进行中:

    部署正在进行中

    在站点部署过程中,您可以单击查看状态以查看进度。

    部署失败:

    部署失败

    如果在部署过程中出现错误,请单击查看状态以查看错误详细信息。有关错误详细信息的示例:

    部署错误详细信息

    可以单击 Back to configuration(返回到配置)或 cancel the deployment(取消部署)。如果单击 Back to configuration(返回到配置),则会返回到 Create Site(创建站点)页面,您可以在其中更改配置并重试。如果确定要取消部署,请按照向导删除该站点以及为该站点创建的 Azure 资源。例如:

    部署已取消

    部署成功:

    站点部署完成后,您可以扩展站点以及查看和管理在其下创建的资源。View status(查看状态)按钮更改为 Settings(设置)。Azure 图标可用来表示在 Azure 上部署的站点。 有关站点设置的信息,请参阅站点和服务器设置

    已部署的站点

向部署在 Azure 上的现有站点中添加资源

对于部署在 Azure 上的现有站点,您可以向其中添加包括服务器和存储在内的资源。为此,请完成以下步骤:

  1. 在 Session Recording 服务的左侧导航栏中选择配置 > 服务器管理
  2. 服务器管理页面上,找到并展开目标站点。Azure 图标可用来表示在 Azure 上部署的站点。
  3. 单击添加资源

    “添加资源”按钮

  4. 添加资源页面上,根据需要单击添加服务器添加存储

    “添加资源”页面

    • 要添加服务器,请单击添加服务器,然后完成以下步骤:

      添加服务器

      1. 指定要添加的服务器数量。
      2. 单击提供凭据将新服务器加入到与现有服务器相同的域中。
      3. 单击创建客户端将新服务器加入到 Session Recording 服务。
      4. 单击开始部署
    • 要添加存储空间以存储录制文件,请单击添加存储,然后相应地完成以下步骤:

      1. 如果您的站点是使用标准存储帐户创建的,系统会提示您指定要添加的文件共享数量。例如:

        要为标准存储帐户添加的文件共享

      2. 如果您的站点是使用高级存储帐户创建的,则可以指定要添加的文件共享数量,也可以自定义每个文件共享的容量。例如:

        要为标准存储帐户添加的文件共享

      3. 单击开始部署

        注意:

        • 满足以下任一条件时,开始部署按钮可用:
          • 已经指定了至少一台服务器并配置了域和安全客户端。
          • 已指定至少一个文件共享。
        • 部署资源过程中,负载平衡器的设置按钮将被禁用。
        • 部署添加的资源可能会失败,Session Recording 服务可能无法从您的订阅中删除这些资源。在这种情况下,将提供类似于以下内容的提示供您采取行动:

          无法清理资源

更改允许用于访问负载平衡器的 IP 地址

对于部署在 Azure 上的现有站点,您可以更改允许用于访问负载平衡器的 IP 地址。为此,请完成以下步骤:

  1. 在 Session Recording 服务的左侧导航栏中选择配置 > 服务器管理
  2. 服务器管理页面上,找到并展开目标站点。Azure 图标可用来表示在 Azure 上部署的站点。
  3. 单击负载平衡器部分中的设置按钮。

    负载平衡器的“设置”按钮

  4. 负载平衡器设置页面上,输入您的 VDA 的新 IP 地址或范围,并在 Restrict access of the load balancer to only the following addresses(将负载平衡器的访问权限限制为仅限以下地址)字段中用逗号 (,) 分隔。

    设置哪些 VDA 可以访问负载平衡器

  5. 单击保存

添加主机连接

必须有连接到 Azure 订阅的主机连接,才能将 Session Recording 资源部署到 Azure 订阅中。要添加主机连接,请完成以下步骤:

  1. 创建站点页面上单击添加连接,并选择通过主机连接创建和部署站点。或者,在主机连接页面上单击添加连接

    要访问创建站点页面,请从 Session Recording 服务的左侧导航栏中选择配置 > 服务器管理,然后单击创建站点

    “服务器管理”页面

    要访问主机连接页面,请从 Session Recording 服务的左侧导航栏中选择配置 > 主机连接

    “主机连接”页面

  2. 添加连接页面上,为新主机连接指定名称和说明(可选)。输入您的 Azure 订阅 ID 以及有关应用程序注册的以下必填信息:

    • 应用程序(客户端)ID
    • 服务主体对象 ID(与应用程序关联的服务主体对象的 ID)
    • 目录(租户)ID
    • 客户端密钥
    • 机密过期日期

    “添加连接”页面

    要查找您的 Azure 订阅 ID,请执行以下操作:

    1. 登录 Azure 门户。
    2. Azure 服务部分下,选择订阅
    3. 在列表中找到您的订阅,然后复制第二列中显示的 订阅 ID

      查找 Azure 订阅 ID

    要获取有关应用程序注册的所需信息,请执行以下操作:

    1. (如果您已经注册了应用程序,请跳过此步骤。)向 Azure AD 租户注册应用程序。必须注册应用程序才能将身份识别和访问管理功能委派给 Azure AD。

      注册应用程序有两种方法。

      方法 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 门户自行注册应用程序。为应用程序授予适当的权限。有关所需的最低权限,请参阅方法 1 中的 sessionrecording.json 文件。

    2. 单击应用程序的显示名称。

      应用程序显示名称

    3. 在概述页面上,找到应用程序(客户端)ID 和目录(租户)ID。单击 Managed application in local directory(本地目录中的托管应用程序)旁边的链接,查找与该应用程序关联的服务主体对象的 ID。单击客户端凭据旁边的链接,查找客户端密钥 ID 及其过期日期。

      应用程序基础知识

      例如,与应用程序关联的服务主体对象的 ID:

      服务主体对象 ID

      例如,客户端密钥 ID 及其过期日期:

      客户端密钥 ID 及其过期日期

  3. 单击保存以测试您指定的主机连接是否可用。

    如果您指定的主机连接可用,则会将您返回到主机连接页面,并提示已成功添加主机连接。

    Session Recording 服务分别使用错误和警告图标提醒您客户端密钥已过期和即将过期。您可以单击相应的主机连接,然后在连接详细信息页面上单击 Change secret(更改密钥),以更新客户端密钥及其过期日期。

    更改密钥

查看使用 Azure 的实际成本

对于部署在 Azure 上的站点,请单击成本金额以查看成本详情。例如:

使用 Azure 的成本

成本分析

查看实际成本的提示:

  • 当您将鼠标悬停在当月的区域图上时,日期和当天数据的参考线将以叠加形式出现。
  • 不同资源的历史成本用折线图表示。当有至少两个月的数据时,可以使用折线图。当您将鼠标悬停在折线图上时,该月的参考线和成本明细显示为叠加图。要仅查看特定资源的折线图,请将鼠标悬停在该资源上。
将 Session Recording 资源部署到云订阅