Servicio de grabación de sesiones

Implementar recursos de Grabación de sesiones en una suscripción en 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 los siguientes recursos de Grabación de sesiones en una suscripción de Azure desde el servicio Grabación de sesiones:

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

Hay dos formas de implementar recursos de Grabación de sesiones en una suscripción de Azure:

  • Utilice una conexión de host que se conecte a la suscripción de Azure. La creación de una conexión de host requiere que proporcione la información de su 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 desea proporcionar la información de su suscripción, cree una plantilla de Azure Resource Manager (plantilla ARM) que contenga cómo y qué recursos desea implementar. Para obtener más información, consulte Crear e implementar un sitio a través de 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 para crear e implementar un sitio a través de una conexión de host y 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 permitido acceder al equilibrador de carga
  • Ver los costos reales de usar Azure

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

  1. Seleccione Configuración > Administración de servidores en el panel de navegación izquierdo 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. Aparecerá 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 panel de navegación izquierdo.

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

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

    • Si no tiene una conexión de host configurada, agregue una consultando Agregar una conexión de host más adelante en este artículo.

    • Las regiones de Azure Government no son compatibles.

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

  6. (Opcional) Para obtener recomendaciones de configuraciones de VM y almacenamiento, proporcione información sobre sus necesidades de grabación.

    Puede omitir este paso haciendo clic en Estoy bien, omitir este paso o haciendo clic en Siguiente sin seleccionar nada.

    Sus necesidades de grabación

    Cuando selecciona una opción de la lista desplegable, se presenta una recomendación según su selección. Hay un botón Restablecer disponible junto a la recomendación. Le permite borrar sus selecciones y la recomendación correspondiente en esa sección.

  7. Vaya al portal de Azure y cree una nueva red virtual en la región seleccionada y configure el emparejamiento de red virtual entre la nueva red virtual y aquella a la que están conectados sus VDA. A continuación, añada una subred en la nueva red virtual. Busque e introduzca el ID de subred a continuación.

    Configuración de red

    Para mantener las conexiones entre los recursos dentro de la red privada, marque la casilla Crear puntos de conexión privados para almacenamiento y bases de datos.

    Después de marcar la casilla Crear puntos de conexión privados para almacenamiento y bases de datos, decida si desea introducir otro ID de subred teniendo en cuenta lo siguiente:

    • Si no tiene previsto unir sus servidores de Grabación de sesiones a un dominio de Active Directory, la subred no es necesaria y, por lo tanto, deje el campo ID de subred vacío.
    • Si deja el campo ID de subred vacío, está uniendo sus servidores de Grabación de sesiones a un dominio de Azure Active Directory.

    Otro ID de subred

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

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

    Nota:

    • El campo Número de máquinas virtuales se rellena previamente con el número recomendado, si lo hay. Cambie el número según sea necesario.
    • Los costes estimados se basan en precios estándar y no tienen en cuenta los descuentos. Puede esperar costes reales 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 sus VDA se conectan a un dominio de Active Directory, marque la casilla Unir servidores a un dominio de Active Directory e introduzca la información pertinente. Al marcar la casilla Unir servidores a un dominio de Active Directory, está configurando la implementación para un escenario híbrido, integrando Active Directory local con Azure AD.

    • Si sus VDA se conectan a un dominio de Azure Active Directory (Azure AD), desmarque la casilla Unir servidores a un dominio de Active Directory. Después de completar la creación del 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 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 ha cambiado 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 los archivos de grabación. Para obtener información sobre precios, consulte Precios de Azure Files.

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

  11. Cree dos bases de datos SQL en Azure. Una se utiliza como base de datos de grabación de sesiones (denominada sessionrecording) y la otra como base de datos de registro del 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 IP o los rangos de sus VDA y sepárelos con una coma (,) en el campo Restringir el acceso del equilibrador de carga solo a las siguientes direcciones. Para obtener información sobre precios, consulte Precios de Load Balancer.

    Creación de un equilibrador de carga

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

    Aplicar etiquetas a los recursos de Azure

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

    Haga clic en Crear cliente para que Citrix cree un cliente seguro en su nombre. Alternativamente, puede crear un cliente seguro a través de la pestaña Administración de identidades y accesos > Acceso a la API de la consola de Citrix Cloud™ y, a continuación, rellenar la información siguiente.

    Botón Crear cliente

  15. Vea el resumen sobre el sitio que se va a crear. Haga clic en el icono del lápiz para editar la configuración si es necesario o haga clic en el botón para iniciar la implementación.

    Resumen sobre el sitio que se va a crear

    Los siguientes son 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.

    Error de implementación:

    Error de implementación

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

    Detalles del error de implementación

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

    Implementación cancelada

    Implementación correcta:

    Cuando se completa la implementación de un sitio, puede expandirlo y ver y administrar los recursos creados en él. El botón Ver estado cambia a Configuración. Hay un icono de Azure disponible para representar los sitios implementados en Azure. Para obtener información sobre la configuración del sitio, consulte Configuración del sitio y del servidor.

    Sitio implementado

Agregar recursos a un sitio existente implementado en Azure

Para un sitio existente que haya implementado en Azure a través de una conexión de host, puede agregarle recursos, incluidos servidores y almacenamiento. Para ello, complete los siguientes pasos:

  1. Seleccione Configuración > Administración de servidores en la navegación izquierda del servicio de Grabación de sesiones.
  2. En la página Administración de servidores, localice 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 sea necesario.

    La página Agregar recursos

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

      Agregar servidores

      1. Especifique el número de servidores que desea 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 van a agregar. Recomendamos usar la misma contraseña que la establecida 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 guardar los archivos de grabación, haga clic en Agregar almacenamiento y, a continuación, complete los siguientes pasos según corresponda:

      1. Si su sitio se creó con una cuenta de almacenamiento estándar, se le pedirá que especifique el número de recursos compartidos de archivos que desea agregar. Por ejemplo:

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

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

        Recursos compartidos de archivos que se van a agregar para 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 las siguientes 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.
        • Mientras la implementación de recursos está en curso, el botón Configuración del equilibrador de carga está inhabilitado.
        • La implementación de los recursos agregados puede fallar y el servicio de Grabación de sesiones podría no poder eliminar estos recursos de su suscripción. En este caso, se le proporciona un mensaje similar al siguiente para que tome medidas:

          No se pudieron limpiar los recursos

Cambiar las direcciones IP que pueden acceder al equilibrador de carga

Para un sitio existente que haya implementado en Azure a través de una conexión de host, puede cambiar las direcciones IP que pueden acceder al equilibrador de carga. Para ello, siga estos pasos:

  1. Seleccione Configuración > Administración de servidores en el panel de navegación izquierdo del servicio de Grabación de sesiones.
  2. En la página Administración de servidores, localice 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 Configuración en la sección Equilibrador de carga.

    El botón Configuración del equilibrador de carga

  4. En la página de configuración del Equilibrador de carga, introduzca las nuevas direcciones IP o rangos de sus VDA y sepárelas con una coma (,) en el campo Restringir el acceso del equilibrador de carga solo a las siguientes direcciones.

    Configuración de qué VDA pueden acceder al equilibrador de carga

  5. Haga clic en Guardar.

Ver los costes reales de usar 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 del coste. Por ejemplo:

Coste de usar Azure

Análisis de costes

Consejos para ver los costes reales:

  • Cuando se desplaza sobre el gráfico de área del mes actual, aparece una línea de referencia para la fecha y los datos de ese día como una superposición.
  • 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 ratón por los gráficos de líneas, aparece una línea de referencia y un desglose de costes del mes como superposición. Para ver el gráfico de líneas de un recurso específico, pase el ratón por 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. O bien, haga 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 panel de navegación izquierdo 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 panel de navegación izquierdo 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 (opcional) a la nueva conexión de host. Introduzca su ID de suscripción de Azure y la siguiente información obligatoria sobre el registro de su aplicación:

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

    Página Agregar conexión

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

    1. Inicie sesión en el portal de Azure.
    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 se muestra en la segunda columna.

      Búsqueda del ID de suscripción de Azure

    Para obtener la información necesaria sobre el registro de su aplicación, haga lo siguiente:

    1. (Omita este paso si ya tiene una aplicación registrada). Registre una aplicación con su inquilino de Azure AD. Se debe registrar una aplicación para delegar las funciones de administración de identidades y accesos a Azure AD.

      Hay dos métodos para registrar una aplicación.

      Método 1:

      1. Copie el siguiente script proporcionado por Citrix y asígnele el nombre, por ejemplo, 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 el siguiente archivo de rol personalizado y asígnele el nombre sessionrecording.json. Este archivo de rol personalizado ayuda a asignar los permisos mínimos para la aplicación que se va a 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 los siguientes comandos según sea necesario.

      Para crear una aplicación y asignarle los permisos mínimos con el archivo de rol personalizado anterior (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 al portal de Azure y registre una aplicación usted mismo. Conceda los permisos adecuados a la aplicación. Para conocer los permisos mínimos necesarios, consulte el archivo sessionrecording.json en el Método 1.

    2. Haga clic en el nombre para mostrar de su aplicación.

      Nombre para mostrar de la aplicación

    3. En la página de información general, busque el ID de la aplicación (cliente) y el ID del directorio (inquilino). Haga clic en el vínculo junto a Aplicación administrada en el directorio local para encontrar el ID del objeto de entidad de servicio asociado a la aplicación. Haga clic en el vínculo junto a Credenciales de cliente para encontrar el ID del secreto de cliente y su fecha de caducidad.

      Elementos esenciales de la aplicación

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

      ID del objeto de entidad de servicio

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

      ID del secreto de cliente y su fecha de caducidad

  3. Haga clic en Guardar para comprobar si la conexión de host que especifica está disponible.

    Si la conexión de host que especifica está disponible, se le redirigirá a la página de Conexión de host y se le indicará que la conexión de host se ha agregado correctamente.

    El servicio de Grabación de sesiones le recuerda los secretos de cliente caducados y a punto de caducar mediante 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 de 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 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 JSON (JavaScript Object Notation) que contiene cómo y qué recursos desea implementar.
  2. Descargue y descomprima la plantilla ARM. Ejecute el script de implementación en la carpeta de la plantilla descomprimida para empezar a implementar los recursos especificados en la plantilla en Azure.
  3. Compruebe el progreso de la implementación en Azure. Una vez completada la implementación, configure la Grabación de sesiones para que esté operativa. Para configurar la Grabación de sesiones, debe especificar la versión del servidor de Grabación de sesiones que desea instalar y cargar el archivo resourceInfo.json.

Los pasos específicos son los siguientes:

  1. Seleccione Configuración > Administración de servidores en la navegación 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. Aparecerá 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 la navegación izquierda.

    Crear e implementar un sitio mediante una plantilla ARM

  4. Introduzca un nombre y una descripción para el sitio y, a continuación, haga clic en Siguiente.

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

    Puede omitir este paso haciendo clic en Estoy bien, omitir este paso o haciendo clic en Siguiente sin seleccionar nada.

    Sus necesidades de grabación

    Cuando selecciona una opción de la lista desplegable, se presenta una recomendación según su selección. Hay un botón de restablecimiento disponible junto a la recomendación. Le permite borrar sus selecciones y la recomendación correspondiente en esa sección.

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

    Configuración de red

    Para mantener las conexiones entre los recursos dentro de la red privada, marque la casilla Crear puntos de conexión privados para almacenamiento y bases de datos.

    Después de marcar la casilla Crear puntos de conexión privados para almacenamiento y bases de datos, decida si introducir otro ID de subred teniendo en cuenta lo siguiente:

    • Si no tiene previsto unir sus servidores de Session Recording a un dominio de Active Directory, la subred no es necesaria y, por lo tanto, deje el campo ID de subred vacío.
    • Si deja el campo ID de subred vacío, está uniendo sus servidores de Session Recording a un dominio de Azure Active Directory.

    Otro ID de subred

  7. (Omita este paso si ya tiene una aplicación registrada). Registre una aplicación con su inquilino de Azure AD. Se debe registrar una aplicación para delegar las funciones de administración de identidades y accesos a Azure AD.

    Hay dos métodos para registrar una aplicación.

    Método 1:

    1. Copie el siguiente script proporcionado por Citrix y asígnele el nombre, por ejemplo, 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 el siguiente archivo de rol personalizado y asígnele el nombre sessionrecordingdeployment.json. Este archivo de rol personalizado ayuda a asignar los permisos mínimos para la aplicación que se va a 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 los siguientes comandos según sea necesario.

      Para crear una aplicación y asignarle los permisos mínimos con el archivo de rol personalizado anterior (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 integrado de Azure Colaborador, ejecute:

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

    Método 2:

    Vaya al portal de Azure y registre una aplicación usted mismo. Conceda los permisos adecuados a la aplicación. Para conocer 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 Número de máquinas virtuales se rellena previamente con el número recomendado, si lo hay. Cambie el número según sea necesario.
    • Los costes estimados se basan en precios estándar y no tienen en cuenta los descuentos. Puede esperar costes reales 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 sus VDA se conectan a un dominio de Active Directory, seleccione la casilla de verificación Unir servidores a un dominio de Active Directory e introduzca la información relevante.

    • Si sus VDA se conectan a un dominio de Azure Active Directory (Azure AD), desactive la casilla de verificación Unir servidores a un dominio de Active Directory. Una vez que haya terminado 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 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 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 utiliza como base de datos de grabación de sesiones (denominada sessionrecording) y la otra como base de datos de registro del administrador (denominada sessionrecordinglogging).

    Crear 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 IP o los rangos de sus VDA y sepárelos con una coma (,) en el campo Restringir el acceso del equilibrador de carga solo a las siguientes direcciones. Para obtener información sobre 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 se van a crear.

    Aplicar etiquetas a los recursos de Azure

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

    Haga clic en Crear cliente para que Citrix cree un cliente seguro en su nombre. Alternativamente, puede crear un cliente seguro a través de la pestaña Administración de identidades y accesos > Acceso a la API de la consola de Citrix Cloud y luego rellenar la información a continuación.

    Botón Crear cliente

  15. Vea el resumen de los recursos que se van a crear y haga clic en el icono del lápiz para editar la configuración si es necesario. Después, haga clic en Descargar plantilla. A continuación, se descarga una plantilla AEM que contiene cómo y qué recursos desea implementar en la carpeta Descargas de su máquina. También puede ver el sitio recién creado en la página Administración de servidores.

    Resumen de la plantilla AEM

  16. Vaya a la carpeta Descargas y descomprima la plantilla ARM. Abra la carpeta de archivos descomprimidos, escriba PowerShell en la barra de direcciones y pulse Intro. Espere hasta que se abra una ventana de PowerShell en esa carpeta.

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

    Ejecutar un script de plantilla ARM

    Parámetros solicitados al ejecutar un script de plantilla ARM

  18. Vaya al portal de Azure, localice el grupo de recursos que contiene su implementación y, a continuación, compruebe el progreso de la implementación. Espere hasta que toda la implementación muestre Correcto.

    Progreso de la implementación en Azure

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

    Botón Configurar junto al nuevo sitio

    Comprobación de los requisitos previos para configurar Grabación de sesiones

    Para configurar Grabación de sesiones, debe especificar la versión del servidor de Grabación de sesiones que desea instalar y cargar el archivo resourceInfo.json.

    Seleccione la versión del servidor de Grabación de sesiones

    Cargar información de recursos

    Introduzca las credenciales de sus bases de datos.

    Introduzca las credenciales de las bases de datos

    Haga clic en Iniciar inicio. A continuación, puede comprobar el progreso de la configuración en la página Administración de servidores.

    Configuración en curso

    Pasos de configuración

    Puede ver el progreso de la instalación de 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 disponibles en la lista, la creación del sitio estará completa y los recursos especificados se implementarán en Azure.

    Una implementación completa a través de ARM

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