Session Recording

Implementar recursos de Grabación de sesiones en una suscripción de la nube

Este artículo proporciona información sobre la implementación de recursos de grabación de sesiones en una suscripción de Azure.

Puede implementar estos recursos de Grabación de sesiones en una suscripción de Azure desde el servicio de Grabación de sesiones:

  • Servidores de grabación de sesiones
  • Bases de datos
  • Almacenamiento
  • Equilibrador de carga

Hay dos maneras de implementar recursos de grabación de sesiones en una suscripción de Azure:

  • Usar una conexión de host que se conecta a la suscripción de Azure. Para crear una conexión de host es necesario proporcionar la información de suscripción. Para obtener más información, consulte Crear e implementar un sitio a través de una conexión de host más adelante en este artículo.

  • Si no quiere proporcionar su información de suscripción, cree una plantilla de Azure Resource Manager (plantilla ARM) que contenga cómo y qué recursos quiere implementar. Para obtener más información, consulte Crear e implementar un sitio mediante una plantilla ARM más adelante en este artículo.

Crear e implementar un sitio a través de una conexión de host

Esta sección le guía a través del procedimiento de creación e implementación de un sitio mediante una conexión de host y de las siguientes operaciones que se pueden realizar en un sitio implementado de esta manera:

  • Agregar recursos a un sitio existente implementado en Azure
  • Cambiar las direcciones IP que tienen permiso para acceder al equilibrador de carga
  • Ver los costes reales del uso de Azure

Crear e implementar un sitio a través de una conexión de host

  1. Seleccione Configuración > Servidor de administración en el panel de navegación de la izquierda del servicio de Grabación de sesiones.

    Página Administración de servidores

  2. En la página Administración de servidores, haga clic en Crear sitio. Aparece la página Crear sitio.

    Página Crear sitio

  3. Seleccione Crear e implementar un sitio a través de una conexión de host. Los pasos principales se enumeran en el menú de navegación de la izquierda.

    Crear e implementar un sitio a través de una conexión de host

  4. Introduzca un nombre y una descripción del sitio, seleccione una conexión de host que se conecte a su suscripción de Azure y especifique una región.

    • Si no tiene ninguna conexión de host, para agregar una, consulte Agregar una conexión de host más adelante en este artículo.

    • No se admiten las regiones de Azure Government.

  5. Después de completar la información del sitio, haga clic en Siguiente para continuar.

  6. (Opcional) Para obtener recomendaciones sobre las configuraciones de almacenamiento y de máquinas virtuales, proporcione información sobre sus necesidades de grabación.

    Para omitir este paso, haga clic en Omitir este paso o, si no, en Siguiente sin seleccionar nada.

    Sus necesidades de grabación

    Al seleccionar una opción de la lista desplegable, verá una recomendación según su selección. Hay un botón de restablecimiento disponible junto a la recomendación. Le permite borrar lo que haya seleccionado y la recomendación de esa sección.

  7. Vaya al portal de Azure y cree una nueva red virtual en la región que seleccionó y configure el emparejamiento de redes virtuales entre la nueva red virtual y aquella a la que están conectados sus VDA. A continuación, agregue una subred en la nueva red virtual. Busque e introduzca el identificador de subred que aparece a continuación.

    Parámetros de red

    Para mantener las conexiones entre los recursos dentro de la red privada, seleccione la casilla Crear puntos finales privados para almacenamiento y bases de datos.

    Después de seleccionar la casilla Crear puntos finales privados para almacenamiento y bases de datos, decida si quiere introducir otro identificador de subred teniendo en cuenta lo siguiente:

    • Si no piensa unir los servidores de grabación de sesiones a un dominio de Active Directory, la subred no es necesaria. En ese caso, deje vacío el campo del identificador de subred.
    • Si deja vacío el campo Identificador de subred, unirá sus servidores de grabación de sesiones a un dominio de Azure Active Directory.

    Otro identificador de subred

  8. Cree máquinas virtuales (VM) como servidores de Grabación de sesiones.

    Crear máquinas virtuales como servidores de Grabación de sesiones

    Nota:

    • El campo Cantidad de VM se prerrellena con la cantidad recomendada, si lo hay. Cambie la cantidad según sea necesario.
    • Los costes estimados se basan en precios estándar y no tienen en cuenta los descuentos. Lo habitual es que los costes reales sean inferiores a los estimados.
  9. Una los servidores de grabación de sesiones al mismo dominio que sus VDA y especifique un certificado para los servidores de grabación de sesiones.

    • Si los VDA se conectan a un dominio de Active Directory, seleccione la casilla Unir servidores a un dominio de Active Directory e introduzca la información pertinente. Al seleccionar la casilla Unir servidores a un dominio de Active Directory, configurará la implementación para un escenario híbrido, integrando Active Directory local con Azure AD.

    • Si los VDA se conectan a un dominio de Azure Active Directory (Azure AD), desactive la casilla Unir servidores a un dominio de Active Directory. Cuando termine de crear el sitio actual, asegúrese de unir manualmente los servidores de grabación de sesiones al mismo dominio de Azure AD. Tenga en cuenta que la implementación pura de Azure AD solo está disponible para la Grabación de sesiones 2402 y versiones posteriores.

    Unir servidores a un dominio de Active Directory

    Unir servidores a un dominio de Azure Active Directory

    Nota:

    Desde julio de 2023, Microsoft cambió el nombre de Azure Active Directory (Azure AD) a Microsoft Entra ID. En este documento, cualquier referencia a Azure Active Directory, Azure AD o AAD ahora se refiere a Microsoft Entra ID.

  10. Configure una cuenta de almacenamiento de Azure y recursos compartidos de archivos para almacenar sus archivos de grabación. Para obtener información sobre los precios, consulte Precios de Azure Files.

    Configurar una cuenta de almacenamiento de Azure y recursos compartidos de archivos para almacenar sus archivos de grabación

  11. Cree dos bases de datos SQL en Azure. Una se usa como base de datos de Grabación de sesiones (denominada sessionrecording), y la otra como base de datos de registros de administrador (denominada sessionrecordinglogging).

    Crear dos bases de datos SQL en Azure

    Nota:

    Al agregar recursos, específicamente servidores de grabación de sesiones, a un sitio existente implementado a través de una conexión de host, debe proporcionar la contraseña de administrador de la base de datos establecida durante la creación del sitio.

  12. Cree un equilibrador de carga para distribuir la carga de trabajo entre los servidores de grabación de sesiones. Introduzca las direcciones o los intervalos de las direcciones IP de los VDA y sepárelos por comas (,) en el campo Restringir el acceso del equilibrador de carga solo a las siguientes direcciones. Para obtener información sobre los precios, consulte Precios de Load Balancer.

    Crear un equilibrador de carga

  13. (Opcional) Aplique etiquetas a los recursos de Azure que creará.

    Aplicación de etiquetas a recursos de Azure

  14. Cree un cliente seguro para incorporar los servidores de grabación de sesiones al servicio Grabación de sesiones.

    Haga clic en Crear cliente para permitir que Citrix cree un cliente seguro en su nombre. También puede crear un cliente seguro a través de la ficha Administración de acceso e identidad > Acceso a las API de la consola de Citrix Cloud y, a continuación, rellene esta información.

    Botón Crear cliente

  15. Consulte el resumen sobre el sitio que creará. Haga clic en el icono del lápiz para modificar los parámetros si es necesario o haga clic en el botón para iniciar la implementación.

    Resumen sobre el sitio que se creará

    A continuación dispone de ejemplos del proceso de implementación:

    Implementación en curso:

    Implementación en curso

    Mientras la implementación de un sitio esté en curso, puede hacer clic en Ver estado para ver el progreso.

    Implementaciones fallidas:

    Implementaciones fallidas

    Si se producen errores durante el proceso de implementación, haga clic en Ver estado para ver los detalles del error. Para ver un ejemplo de los detalles del error:

    Detalles del error de implementación

    Puede hacer clic en Volver a la configuración o en Cancelar la implementación. Si hace clic en Volver a la configuración, volverá a la página Crear sitio, donde podrá modificar las configuraciones e intentarlo de nuevo. Si quiere cancelar la implementación, siga el asistente para quitar el sitio y los recursos de Azure creados para el sitio. Por ejemplo:

    Implementación cancelada

    Implementaciones correctas:

    Al completar la implementación de un sitio, puede expandir el sitio y ver y administrar los recursos creados en él. El botón Ver estado cambia a Parámetros. Hay un icono de Azure disponible para representar los sitios implementados en Azure. Para obtener información sobre los parámetros de un sitio, consulte Parámetros de sitio y de servidor.

    Sitio implementado

Agregar recursos a un sitio existente implementado en Azure

En el caso de sitios existentes que haya implementado en Azure a través de una conexión de host, puede agregarles recursos, incluidos servidores y almacenamiento. Para ello, siga estos pasos:

  1. Seleccione Configuración > Servidor de administración en el panel de navegación de la izquierda del servicio de Grabación de sesiones.
  2. En la página Administración de servidores, busque y despliegue el sitio de destino. Hay un icono de Azure disponible para representar los sitios implementados en Azure.
  3. Haga clic en Agregar recursos.

    El botón Agregar recursos

  4. En la página Agregar recursos, haga clic en Agregar servidor y Agregar almacenamiento según lo que necesite.

    La página Agregar recursos

    • Para agregar servidores, haga clic en Agregar servidor y, a continuación, complete estos pasos:

      Agregar servidores

      1. Especifique la cantidad de servidores que quiere agregar.
      2. Haga clic en Proporcionar credenciales en la sección Dominio para unir los nuevos servidores al mismo dominio que los servidores existentes.
      3. Haga clic en Proporcionar credenciales en la sección Cuentas de administrador para proporcionar la contraseña de administrador de la base de datos establecida durante la creación del sitio. Además, debe establecer una contraseña para la cuenta de administrador en las máquinas de servidor que se vayan a agregar. Se recomienda usar la misma contraseña que la que se estableció durante la creación del sitio.
      4. Haga clic en Crear cliente para incorporar los nuevos servidores al servicio de Grabación de sesiones.
      5. Haga clic en Iniciar implementación.
    • Para agregar almacenamiento para almacenar archivos de grabación, haga clic en Agregar almacenamiento y, a continuación, siga estos pasos:

      1. Si su sitio se creó con una cuenta de almacenamiento estándar, se le solicitará que especifique la cantidad de recursos compartidos de archivos que quiera agregar. Por ejemplo:

        Recursos compartidos de archivos que agregar a una cuenta de almacenamiento estándar

      2. Si su sitio se creó con una cuenta de almacenamiento premium, puede especificar la cantidad de recursos compartidos de archivos que quiere agregar y personalizar la capacidad de cada recurso compartido de archivos. Por ejemplo:

        Recursos compartidos de archivos que agregar a una cuenta de almacenamiento estándar

      3. Haga clic en Iniciar implementación.

        Nota:

        • El botón Iniciar implementación está disponible cuando se cumple alguna de estas condiciones:
          • Se ha especificado al menos un servidor y se han configurado el dominio y el cliente seguro.
          • Se ha especificado al menos un recurso compartido de archivos.
        • Cuando la implementación de recursos está en curso, el botón Parámetros del equilibrador de carga está inhabilitado.
        • La implementación de recursos agregados puede fallar, y es posible que el servicio de Grabación de sesiones no pueda quitar estos recursos de la suscripción. En ese caso, verá un mensaje similar al siguiente para que tome medidas:

          No se pudieron limpiar los recursos

Cambiar las direcciones IP que tienen permiso para acceder al equilibrador de carga

En el caso de sitios existentes que haya implementado en Azure a través de una conexión de host, puede cambiar las direcciones IP que tienen permiso para acceder al equilibrador de carga. Para ello, siga estos pasos:

  1. Seleccione Configuración > Servidor de administración en el panel de navegación de la izquierda del servicio de Grabación de sesiones.
  2. En la página Administración de servidores, busque y despliegue el sitio de destino. Hay un icono de Azure disponible para representar los sitios implementados en Azure.
  3. Haga clic en el botón Parámetros de la sección Equilibrador de carga.

    El botón Parámetros del equilibrador de carga

  4. En la página de parámetros del Equilibrador de carga, introduzca las nuevas direcciones IP o intervalos de direcciones IP de los VDA y sepárelos por comas (,) en el campo Restringir el acceso del equilibrador de carga solo a las siguientes direcciones.

    Configurar qué VDA pueden acceder al equilibrador de carga

  5. Haga clic en Guardar.

Ver los costes reales del uso de Azure

Para un sitio existente que haya implementado en Azure a través de una conexión de host, haga clic en el importe del coste para ver los detalles de los costes. Por ejemplo:

Coste del uso de Azure

Análisis de los costes

Consejos para ver los costes reales:

  • Al pasar el mouse sobre el gráfico de áreas del mes actual, aparece una línea de referencia para la fecha y los datos de ese día superpuestos.
  • Los costes históricos de los diferentes recursos se representan mediante gráficos de líneas. Los gráficos de líneas están disponibles cuando hay al menos dos meses de datos. Al pasar el mouse sobre los gráficos de líneas, aparece una línea de referencia y un desglose de los costes del mes superpuestos. Para ver el gráfico de líneas de solo un recurso específico, coloque el cursor sobre el recurso.

Agregar una conexión de host

Para agregar una conexión de host, siga estos pasos:

  1. Haga clic en Agregar conexión, en la página Crear sitio, con la opción Crear e implementar un sitio a través de una conexión de host seleccionada. También puede hacer clic en Agregar conexión en la página Conexión de host.

    Para acceder a la página Crear sitio, seleccione Configuración > Administración de servidores en el menú de navegación de la izquierda del servicio de Grabación de sesiones y, a continuación, haga clic en Crear sitio.

    Página Administración de servidores

    Para acceder a la página Conexión de host, seleccione Configuración > Conexión de host en el menú de navegación de la izquierda del servicio de Grabación de sesiones:

    Página Conexión de host

  2. En la página Agregar conexión, asigne un nombre y una descripción a la nueva conexión de host (opcional). Introduzca su ID de suscripción de Azure y esta información obligatoria para registrar la aplicación:

    • ID de aplicación (cliente)
    • ID de objeto de la entidad principal del servicio (ID de objeto de la entidad principal de servicio asociado a la aplicación)
    • ID de directorio (arrendatario)
    • Secreto del cliente
    • Fecha de caducidad del secreto

    Página Agregar conexión

    Para buscar su ID de suscripción de Azure, haga lo siguiente:

    1. Inicie sesión en Azure Portal.
    2. En la sección Servicios de Azure, seleccione Suscripciones.
    3. Busque su suscripción en la lista y copie el ID de suscripción que aparece en la segunda columna.

      Búsqueda del ID de suscripción de Azure

    Para obtener la información requerida para registrar su aplicación, haga lo siguiente:

    1. (Omita este paso si ya tiene una aplicación registrada) Registre una aplicación con su arrendatario de Azure AD. Se debe registrar una aplicación para delegar las funciones de administración de acceso e identidad a Azure AD.

      Hay dos métodos para registrar aplicaciones.

      Método 1:

      1. Copie este script proporcionado por Citrix y asígnele, por ejemplo, el nombre 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-->
        
      2. Copie este archivo de roles personalizado y asígnele el nombre sessionrecording.json. Este archivo de roles personalizado ayuda a asignar los permisos mínimos para la aplicación que se registrará.

        {
            "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-->
        
      3. Coloque AppRegistration.ps1 y sessionrecording.json en la misma carpeta.
      4. Ejecute cualquiera de estos comandos según sea necesario.

      Para crear una aplicación y asignarle los permisos mínimos con el anterior archivo de roles personalizado (sessionrecording.json), ejecute:

      ```
      .\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--> ```
      

      Método 2:

      Vaya a Azure Portal y registre una aplicación. Otorgue los permisos adecuados a la aplicación. Para conceder los permisos mínimos necesarios, consulte el archivo sessionrecording.json en el Método 1.

    2. Haga clic en el nombre simplificado de la aplicación.

      Nombre simplificado de la aplicación

    3. En la página de descripción general, busque el ID de la aplicación (cliente) y el ID del directorio (arrendatario). Haga clic en el enlace situado junto a Aplicación administrada en el directorio local para ver el ID de objeto de la entidad principal de servicio asociado a la aplicación. Haga clic en el enlace situado junto a Credenciales del cliente para ver el ID secreto del cliente y su fecha de caducidad.

      Elementos esenciales de la aplicación

      Por ejemplo, el ID de objeto de la entidad principal de servicio asociado a la aplicación:

      ID de objeto de la entidad principal de servicio

      Por ejemplo, el ID de secreto de cliente y su fecha de caducidad:

      ID de secreto de cliente y su fecha de caducidad

  3. Haga clic en Guardar para probar que la conexión de host especificada esté disponible.

    Si la conexión de host que especifique está disponible, volverá a la página Conexión de host y se le indicará que la conexión de host se agregó correctamente.

    El servicio de Grabación de sesiones le recuerda los secretos de cliente caducados y los que pronto caducarán con iconos de error y advertencia, respectivamente. Puede hacer clic en la conexión de host correspondiente y hacer clic en Cambiar secreto, en la página Detalles de conexión, para actualizar el secreto del cliente y su fecha de caducidad.

    Cambiar secreto

Crear e implementar un sitio mediante una plantilla ARM

Puede crear una plantilla de Azure Resource Manager (plantilla ARM) para implementar los recursos de grabación de sesiones en Azure. Los siguientes son los pasos principales para lograr este objetivo:

  1. Cree una plantilla ARM en el servicio de grabación de sesiones. La plantilla ARM es un archivo de notación de objetos de JavaScript (JSON) que contiene cómo y qué recursos quiere implementar.
  2. Descargue y descomprima la plantilla ARM. Ejecute el script de implementación en la carpeta de plantillas descomprimida para comenzar a implementar en Azure los recursos especificados en la plantilla.
  3. Compruebe el progreso de la implementación en Azure. Una vez completada la implementación, configure la grabación de sesiones para ponerla en marcha. Para configurar la grabación de sesiones, deberá especificar la versión del servidor de grabación de sesiones que va a instalar y cargar el archivo resourceInfo.json.

Los pasos específicos son:

  1. Seleccione Configuración > Servidor de administración en el panel de navegación de la izquierda del servicio de Grabación de sesiones.

    Página Administración de servidores

  2. En la página Administración de servidores, haga clic en Crear sitio. Aparece la página Crear sitio.

    Página Crear sitio

  3. Seleccione Crear e implementar un sitio mediante una plantilla ARM. Los pasos principales se enumeran en el menú de navegación de la izquierda.

    Crear e implementar un sitio mediante una plantilla ARM

  4. Introduzca un nombre y una descripción del sitio y después haga clic en Siguiente.

  5. (Opcional) Para obtener recomendaciones sobre las configuraciones de almacenamiento y de máquinas virtuales, proporcione información sobre sus necesidades de grabación.

    Para omitir este paso, haga clic en Omitir este paso o, si no, en Siguiente sin seleccionar nada.

    Sus necesidades de grabación

    Al seleccionar una opción de la lista desplegable, verá una recomendación según su selección. Hay un botón de restablecimiento disponible junto a la recomendación. Le permite borrar lo que haya seleccionado y la recomendación de esa sección.

  6. Vaya al portal de Azure y cree una nueva red virtual en la región que seleccionó y configure el emparejamiento de redes virtuales entre la nueva red virtual y aquella a la que están conectados sus VDA. A continuación, agregue una subred en la nueva red virtual. Busque e introduzca el identificador de subred que aparece a continuación.

    Parámetros de red

    Para mantener las conexiones entre los recursos dentro de la red privada, seleccione la casilla Crear puntos finales privados para almacenamiento y bases de datos.

    Después de seleccionar la casilla Crear puntos finales privados para almacenamiento y bases de datos, decida si quiere introducir otro identificador de subred teniendo en cuenta lo siguiente:

    • Si no piensa unir los servidores de grabación de sesiones a un dominio de Active Directory, la subred no es necesaria. En ese caso, deje vacío el campo del identificador de subred.
    • Si deja vacío el campo Identificador de subred, unirá sus servidores de grabación de sesiones a un dominio de Azure Active Directory.

    Otro identificador de subred

  7. (Omita este paso si ya tiene una aplicación registrada) Registre una aplicación con su arrendatario de Azure AD. Se debe registrar una aplicación para delegar las funciones de administración de acceso e identidad a Azure AD.

    Hay dos métodos para registrar aplicaciones.

    Método 1:

    1. Copie este script proporcionado por Citrix y asígnele, por ejemplo, el nombre 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-->
      
    2. Copie este archivo de roles personalizado y asígnele el nombre sessionrecordingdeployment.json. Este archivo de roles personalizado ayuda a asignar los permisos mínimos para la aplicación que se registrará.

      {
          "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-->
      
    3. Coloque AppRegistration.ps1 y sessionrecordingdeployment.json en la misma carpeta.
    4. Ejecute cualquiera de estos comandos según sea necesario.

      Para crear una aplicación y asignarle los permisos mínimos con el anterior archivo de roles personalizado (sessionrecordingdeployment.json), ejecute:

      .\AppRegistration.ps1 -tenantId <tenant ID> -subscriptionId <subscription ID> -appName <application name> -role "Citrix Session Recording Deployment"
      <!--NeedCopy-->
      

      Para crear una aplicación y asignarle el rol Contributor integrado en Azure, ejecute:

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

    Método 2:

    Vaya a Azure Portal y registre una aplicación. Otorgue los permisos adecuados a la aplicación. Para conceder los permisos mínimos necesarios, consulte el archivo sessionrecordingdeployment.json en el Método 1.

  8. Especifique las configuraciones para los servidores de grabación de sesiones que se instalarán más adelante.

    Crear máquinas virtuales como servidores de Grabación de sesiones

    Nota:

    • El campo Cantidad de VM se prerrellena con la cantidad recomendada, si lo hay. Cambie la cantidad según sea necesario.
    • Los costes estimados se basan en precios estándar y no tienen en cuenta los descuentos. Lo habitual es que los costes reales sean inferiores a los estimados.
  9. Una los servidores de grabación de sesiones al mismo dominio que sus VDA y especifique un certificado para los servidores de grabación de sesiones.

    • Si los VDA se conectan a un dominio de Active Directory, seleccione la casilla Unir servidores a un dominio de Active Directory e introduzca la información pertinente.

    • Si los VDA se conectan a un dominio de Azure Active Directory (Azure AD), desactive la casilla Unir servidores a un dominio de Active Directory. Cuando termine de crear el sitio actual, asegúrese de unir manualmente los servidores de grabación de sesiones al mismo dominio de Azure AD. Tenga en cuenta que la implementación pura de Azure AD solo está disponible para la Grabación de sesiones 2402 y versiones posteriores.

    Unir servidores a un dominio de Active Directory

    Unir servidores a un dominio de Azure Active Directory

  10. Configure una cuenta de almacenamiento de Azure y recursos compartidos de archivos para almacenar sus archivos de grabación. Para obtener información sobre los precios, consulte Precios de Azure Files.

    Configurar una cuenta de almacenamiento de Azure y recursos compartidos de archivos para almacenar sus archivos de grabación

  11. Cree dos bases de datos SQL en Azure. Una se usa como base de datos de Grabación de sesiones (denominada sessionrecording), y la otra como base de datos de registros de administrador (denominada sessionrecordinglogging).

    Cree dos bases de datos SQL para la plantilla ARM

  12. Cree un equilibrador de carga para distribuir la carga de trabajo entre los servidores de grabación de sesiones. Introduzca las direcciones o los intervalos de las direcciones IP de los VDA y sepárelos por comas (,) en el campo Restringir el acceso del equilibrador de carga solo a las siguientes direcciones. Para obtener información sobre los precios, consulte Precios de Load Balancer.

    Crear un equilibrador de carga para la plantilla ARM

  13. (Opcional) Aplique etiquetas a los recursos de Azure que creará.

    Aplicación de etiquetas a recursos de Azure

  14. Cree un cliente seguro para incorporar los servidores de grabación de sesiones al servicio Grabación de sesiones.

    Haga clic en Crear cliente para permitir que Citrix cree un cliente seguro en su nombre. También puede crear un cliente seguro a través de la ficha Administración de acceso e identidad > Acceso a las API de la consola de Citrix Cloud y, a continuación, rellene esta información.

    Botón Crear cliente

  15. Consulte el resumen de los recursos que se van a crear y haga clic en el icono del lápiz para modificar la configuración si fuera necesario. Después de eso, haga clic en Descargar plantilla. Entonces se descargará en la carpeta Descargas de su máquina una plantilla de AEM que contiene cómo y qué recursos quiere implementar. También puede ver el sitio recién creado en la página Administración del servidor.

    Resumen de la plantilla de AEM

  16. Vaya a la carpeta Descargas y descomprima la plantilla ARM. Abra la carpeta del archivo descomprimido, escriba PowerShell en la barra de direcciones y pulse Entrar. Espere a que se abra una ventana de PowerShell en esa carpeta.

  17. Ejecute el script de notación de objetos (JSON) de JavaScript denominado DeploySessionRecording.ps1. Proporcione valores para los parámetros solicitados. Los parámetros reales varían según los parámetros que especificó al crear la plantilla. Por ejemplo:

    Ejecución de un script de plantilla ARM

    Parámetros solicitados al ejecutar un script de plantilla ARM

  18. Vaya al portal de Azure, busque el grupo de recursos que contiene la implementación y después verifique el progreso de la implementación. Espere hasta que toda la implementación muestre Correcto.

    Progreso de la implementación en Azure

  19. Regrese a la página Administración de servidores del servicio de grabación de sesiones. Busque el sitio recién creado y verá que hay un botón Configurar disponible. Haga clic en Configurar para configurar la grabación de sesiones y ponerla en marcha.

    Botón de configuración junto al nuevo sitio

    Comprobar los requisitos previos para configurar la grabación de sesiones

    Para configurar la grabación de sesiones, deberá especificar la versión del servidor de grabación de sesiones que va a instalar y cargar el archivo resourceInfo.json.

    Seleccionar la versión del servidor de grabación de sesiones

    Cargar información de recursos

    Introduzca las credenciales de sus bases de datos.

    Introducir las credenciales de las bases de datos

    Haga clic en Iniciar. Después puede comprobar el progreso de la configuración en la página Administración del servidor.

    Instalación en curso

    Pasos de la instalación

    Puede ver el progreso de la instalación de los servidores individuales en la lista de servidores.

    Progreso de la instalación de un servidor individual

    Cuando todos los servidores de grabación de sesiones aparezcan como disponibles en la lista, se habrá completado la creación del sitio y los recursos especificados estarán implementados en Azure.

    Implementación completa a través de ARM