Session Recording

Déployer des ressources d’enregistrement de session sur un abonnement cloud

Cet article fournit des informations sur le déploiement de ressources d’enregistrement de session sur un abonnement Azure.

Vous pouvez déployer les ressources d’enregistrement de session suivantes sur un abonnement Azure depuis le service d’enregistrement de session :

  • Serveurs d’enregistrement de session
  • Bases de données
  • Stockage
  • Équilibrage de charge

Il existe deux manières de déployer des ressources d’enregistrement de session sur un abonnement Azure :

  • Utilisez une connexion hôte qui se connecte à l’abonnement Azure. Pour créer une connexion hôte, vous devez fournir les informations relatives à votre abonnement. Pour plus d’informations, consultez la section Créer et déployer un site via une connexion hôte plus loin dans cet article.

  • Si vous ne souhaitez pas fournir les informations relatives à votre abonnement, créez un modèle Azure Resource Manager (modèle ARM) indiquant les ressources à déployer et comment. Pour plus d’informations, reportez-vous à la section Créer et déployer un site via un modèle ARM plus loin dans cet article.

Créer et déployer un site via une connexion hôte

Cette section vous explique la procédure de création et de déploiement d’un site via une connexion hôte, ainsi que les opérations suivantes pouvant être effectuées sur un site déployé de cette façon :

  • Ajouter des ressources à un site existant déployé sur Azure
  • Modifier les adresses IP autorisées à accéder à l’équilibreur de charge
  • Afficher les coûts réels liés à l’utilisation d’Azure

Créer et déployer un site via une connexion hôte

  1. Sélectionnez Configuration > Gestion des serveurs dans le volet de navigation de gauche du service d’enregistrement de session.

    Page Gestion des serveurs

  2. Sur la page Gestion des serveurs, cliquez sur Créer un site. La page Créer un site s’affiche.

    Page Créer un site

  3. Sélectionnez Créer et déployer un site via une connexion hôte. Les principales étapes sont répertoriées dans la navigation de gauche.

    Créer et déployer un site via une connexion hôte

  4. Entrez le nom et la description du site, sélectionnez une connexion hôte qui se connecte à votre abonnement Azure et spécifiez une région.

    • Si aucune connexion hôte n’est en place, ajoutez-en une en vous référant à la section Ajouter une connexion hôte plus loin dans cet article.

    • Les régions Azure Government ne sont pas prises en charge.

  5. Après avoir renseigné les informations du site, cliquez sur Suivant pour continuer.

  6. (Facultatif) Pour obtenir des recommandations concernant les configurations de machines virtuelles et de stockage, fournissez des informations sur vos besoins en matière d’enregistrement.

    Vous pouvez ignorer cette étape en cliquant sur Ignorer cette étape ou en cliquant sur Suivant sans rien sélectionner.

    Vos besoins d'enregistrement

    Lorsque vous sélectionnez une option dans la liste déroulante, une recommandation est présentée en fonction de votre sélection. Un bouton de réinitialisation est disponible à côté de la recommandation. Cela vous permet d’effacer toutes les sélections et les recommandations correspondantes de cette section.

  7. Accédez au portail Azure et créez un réseau virtuel dans la région que vous avez sélectionnée, puis configurez le peering de réseaux virtuels entre le nouveau réseau virtuel et celui auquel vos VDA sont connectés. Ajoutez ensuite un sous-réseau dans le nouveau réseau virtuel. Recherchez et saisissez l’ID de sous-réseau ci-dessous.

    Paramètres réseau

    Pour conserver les connexions entre ressources dans le réseau privé, cochez la case Créer des points de terminaison privés pour le stockage et les bases de données.

    Après avoir coché la case Créer des points de terminaison privés pour le stockage et les bases de données, décidez si vous souhaitez saisir un autre ID de sous-réseau en tenant compte des éléments suivants :

    • Si vous ne prévoyez pas de joindre vos serveurs d’enregistrement de session à un domaine Active Directory, le sous-réseau n’est pas nécessaire. Vous pouvez donc laisser le champ “ID de sous-réseau” vide.
    • Si vous laissez le champ “ID de sous-réseau vide”, vous joignez vos serveurs d’enregistrement de session à un domaine Azure Active Directory.

    Autre identifiant de sous-réseau

  8. Créez des machines virtuelles (VM) en tant que serveurs d’enregistrement de session.

    Créer des machines virtuelles en tant que serveurs d'enregistrement de session

    Remarque :

    • Le champ Nombre de VM est prérempli avec le nombre recommandé, le cas échéant. Modifiez ce nombre selon vos besoins.
    • Les coûts estimés sont basés sur la tarification standard et ne tiennent pas compte des remises. Vous pouvez vous attendre à des coûts réels inférieurs aux estimations.
  9. Joignez les serveurs d’enregistrement de session au même domaine que vos VDA et spécifiez un certificat pour les serveurs d’enregistrement de session.

    • Si vos VDA se connectent à un domaine Active Directory, cochez la case Joindre les serveurs à un domaine Active Directory et entrez les informations pertinentes. En cochant la case Joindre les serveurs à un domaine Active Directory, vous configurez le déploiement pour un scénario hybride intégrant Active Directory sur site à Azure AD.

    • Si vos VDA se connectent à un domaine Azure Active Directory (Azure AD), désélectionnez la case Joindre les serveurs à un domaine Active Directory. Après avoir créé le site actuel, assurez-vous de joindre manuellement les serveurs d’enregistrement de session au même domaine Azure AD. Notez que le déploiement d’Azure AD pur n’est disponible que pour l’enregistrement de session 2402 et les versions ultérieures.

    Jonction de serveurs à un domaine Active Directory

    Jonction de serveurs à un domaine Azure Active Directory

    Remarque :

    Depuis juillet 2023, Microsoft a renommé Azure Active Directory (Azure AD) Microsoft Entra ID. Dans ce document, toute occurrence de l’appellation Azure Active Directory, Azure AD ou de l’acronyme AAD fait désormais référence à Microsoft Entra ID.

  10. Configurez un compte de stockage Azure et des partages de fichiers pour stocker vos fichiers d’enregistrement. Pour plus d’informations sur les tarifs, consultez la section Tarification Fichiers Azure.

    Configurer un compte de stockage Azure et des partages de fichiers pour stocker vos fichiers d'enregistrement

  11. Créez deux bases de données SQL dans Azure. L’une est utilisée comme base de données d’enregistrement de session (nommée sessionrecording) et l’autre comme base de données de journalisation de l’administrateur (nommée sessionrecordinglogging).

    Créer deux bases de données SQL dans Azure

    Remarque :

    Lorsque vous ajoutez des ressources, en particulier des serveurs d’enregistrement de session, à un site existant déployé via une connexion hôte, vous devez fournir le mot de passe de l’administrateur de base de données défini lors de la création du site.

  12. Créez un équilibreur de charge pour répartir la charge de travail entre les machines virtuelles (serveurs d’enregistrement de session). Entrez les adresses IP ou les plages de vos VDA en les séparant par des virgules (,) dans le champ Restreindre l’accès de l’équilibreur de charge aux seules adresses suivantes. Pour plus d’informations sur les prix, consultez la section Tarification Load Balancer.

    Créer un équilibreur de charge

  13. (Facultatif) Appliquez des balises aux ressources Azure à créer.

    Appliquer des balises aux ressources Azure

  14. Créez un client sécurisé pour intégrer les serveurs d’enregistrement de session au service d’enregistrement de session.

    Cliquez sur Créer un client pour permettre à Citrix de créer un client sécurisé en votre nom. Vous pouvez également créer un client sécurisé via l’onglet Gestion des identités et des accès > Accès aux API de la console Citrix Cloud, puis renseigner les informations ci-dessous.

    Bouton Créer un client

  15. Consultez le résumé du site à créer. Cliquez sur l’icône en forme de crayon pour modifier vos paramètres si nécessaire ou cliquez sur le bouton pour démarrer le déploiement.

    Résumé du site à créer

    Voici quelques exemples du processus de déploiement :

    Déploiement en cours :

    Déploiement en cours

    Pendant le déploiement d’un site, vous pouvez cliquer sur Afficher l’état pour voir la progression.

    Déploiements ayant échoué :

    Déploiements ayant échoué

    Si des erreurs se produisent pendant le processus de déploiement, cliquez sur Afficher l’état pour afficher les détails de l’erreur. Exemple des détails d’erreur :

    Détails d'erreurs de déploiement

    Vous pouvez cliquer sur Retour à la configuration ou Annuler le déploiement. Si vous cliquez sur Retour à la configuration, vous revenez à la page Créer un site où vous pouvez modifier vos configurations et réessayer. Si vous êtes sûr de vouloir annuler le déploiement, suivez les instructions de l’assistant pour supprimer le site et les ressources Azure créées pour le site. Par exemple :

    Déploiement annulé

    Déploiements ayant réussi :

    Une fois le déploiement d’un site terminé, vous pouvez développer le site et afficher et gérer les ressources créées sur celui-ci. Le bouton Afficher l’état devient Paramètres. Une icône Azure est disponible pour représenter les sites déployés sur Azure. Pour plus d’informations sur les paramètres du site, consultez la section Paramètres du site et du serveur.

    Site déployé

Ajouter des ressources à un site existant déployé sur Azure

Si vous avez déployé un site sur Azure via une connexion hôte, vous pouvez y ajouter des ressources, notamment des serveurs et du stockage. Pour ce faire, procédez comme suit :

  1. Sélectionnez Configuration > Gestion des serveurs dans le volet de navigation de gauche du service d’enregistrement de session.
  2. Sur la page Gestion des serveurs, localisez et développez le site cible. Une icône Azure est disponible pour représenter les sites déployés sur Azure.
  3. Cliquez sur Ajouter des ressources.

    Bouton Ajouter des ressources

  4. Sur la page Ajouter des ressources, cliquez sur Ajouter un serveur et sur Ajouter du stockage selon vos besoins.

    Page Ajouter des ressources

    • Pour ajouter des serveurs, cliquez sur Ajouter un serveur, puis effectuez les étapes suivantes :

      Ajouter un serveur

      1. Spécifiez le nombre de serveurs à ajouter.
      2. Cliquez sur Fournir des informations d’identification dans la section Domaine pour associer les nouveaux serveurs au même domaine que les serveurs existants.
      3. Cliquez sur Fournir des informations d’identification dans la section Comptes d’administrateur pour fournir le mot de passe d’administrateur de base de données défini lors de la création du site. En outre, vous devez définir un mot de passe pour le compte administrateur sur le ou les serveurs en cours d’ajout. Nous vous recommandons d’utiliser le même mot de passe que celui défini lors de la création du site.
      4. Cliquez sur Créer un client pour intégrer les nouveaux serveurs au service d’enregistrement de session.
      5. Cliquez sur Démarrer le déploiement.
    • Pour ajouter du stockage afin de stocker des fichiers d’enregistrement, cliquez sur Ajouter du stockage, puis effectuez les étapes suivantes en conséquence :

      1. Si votre site a été créé avec un compte de stockage standard, vous êtes invité à spécifier le nombre de partages de fichiers à ajouter. Par exemple :

        Partages de fichiers à ajouter pour un compte de stockage standard

      2. Si votre site a été créé avec un compte de stockage Premium, vous pouvez spécifier le nombre de partages de fichiers à ajouter et personnaliser la capacité de chaque partage de fichiers. Par exemple :

        Partages de fichiers à ajouter pour un compte de stockage standard

      3. Cliquez sur Démarrer le déploiement.

        Remarque :

        • Le bouton Démarrer le déploiement est disponible lorsque l’une des conditions suivantes est remplie :
          • Au moins un serveur a été spécifié, et le domaine et le client sécurisé ont été configurés.
          • Au moins un partage de fichiers a été spécifié.
        • Lorsque le déploiement des ressources est en cours, le bouton Paramètres de l’équilibreur de charge est désactivé.
        • Le déploiement de ressources supplémentaires peut échouer et le service d’enregistrement de session risque de ne pas être en mesure de supprimer ces ressources de votre abonnement. Dans ce cas, une invite similaire à la suivante vous invite à prendre des mesures :

          Impossible de nettoyer les ressources

Modifier les adresses IP autorisées à accéder à l’équilibreur de charge

Si vous avez déployé un site sur Azure via une connexion hôte, vous pouvez modifier les adresses IP autorisées à accéder à l’équilibreur de charge. Pour ce faire, procédez comme suit :

  1. Sélectionnez Configuration > Gestion des serveurs dans le volet de navigation de gauche du service d’enregistrement de session.
  2. Sur la page Gestion des serveurs, localisez et développez le site cible. Une icône Azure est disponible pour représenter les sites déployés sur Azure.
  3. Cliquez sur le bouton Paramètres dans la section Équilibreur de charge.

    Bouton Paramètres de l'équilibreur de charge

  4. Sur la page Paramètres de la section Équilibreur de charge, entrez les nouvelles adresses IP ou les plages de vos VDA en les séparant par des virgules (,) dans le champ Restreindre l’accès de l’équilibreur de charge aux seules adresses suivantes.

    Définition des VDA pouvant accéder à l'équilibreur de charge

  5. Cliquez sur Enregistrer.

Afficher les coûts réels liés à l’utilisation d’Azure

Si vous avez déployé un site sur Azure via une connexion hôte, cliquez sur le montant pour afficher le détail des coûts. Par exemple :

Coût d'utilisation d'Azure

Analyse des coûts

Conseils pour consulter les coûts réels :

  • Lorsque vous passez le curseur sur le graphique empilé du mois en cours, une ligne de référence pour la date et les données de ce jour apparaît en superposition.
  • Les coûts historiques des différentes ressources sont représentés par des graphiques linéaires. Les graphiques linéaires sont disponibles lorsqu’il existe au moins deux mois de données. Lorsque vous passez le curseur sur les graphiques linéaires, une courbe de référence et une ventilation des coûts du mois apparaissent en superposition. Pour afficher le graphique linéaire d’une ressource spécifique uniquement, placez le pointeur de la souris sur la ressource.

Ajouter une connexion hôte

Pour ajouter une connexion hôte, procédez comme suit :

  1. Cliquez sur Ajouter une connexion sur la page Créer un site avec l’option Créer et déployer un site via une connexion hôte sélectionnée. Vous pouvez également cliquer sur Ajouter une connexion sur la page Connexion hôte.

    Pour accéder à la page Créer un site, sélectionnez Configuration > Gestion des serveurs dans la barre de navigation de gauche du service d’enregistrement de session, puis cliquez sur Créer un site.

    Page Gestion des serveurs

    Pour accéder à la page Connexion hôte, sélectionnez Configuration > Connexion hôte dans la barre de navigation de gauche du service d’enregistrement de session :

    Page Connexion hôte

  2. Sur la page Ajouter une connexion, attribuez un nom et une description à la nouvelle connexion hôte (facultatif). Entrez votre identifiant d’abonnement Azure et les informations requises suivantes concernant l’enregistrement de votre application :

    • ID d’application (client)
    • ID d’objet du principal de service (ID d’objet du principal de service associé à l’application)
    • ID de répertoire (locataire)
    • Clé secrète client
    • Date d’expiration du secret

    Ajouter une page de connexion

    Pour trouver votre identifiant d’abonnement Azure, procédez comme suit :

    1. Connectez-vous au portail Azure.
    2. Dans la section Services Azure, sélectionnez Abonnements.
    3. Trouvez votre abonnement dans la liste et copiez l’ID d’abonnement indiqué dans la deuxième colonne.

      Rechercher l'ID d'abonnement Azure

    Pour obtenir les informations requises concernant l’enregistrement de votre application, procédez comme suit :

    1. (Ignorez cette étape si vous avez déjà enregistré une application.) Enregistrez une application auprès de votre client Azure AD. Une application doit être enregistrée pour déléguer les fonctions de gestion des identités et des accès à Azure AD.

      Il existe deux méthodes pour enregistrer une application.

      Méthode 1 :

      1. Copiez le script suivant, fourni par Citrix, et nommez-le, par exemple 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. Copiez le fichier de rôle personnalisé suivant et nommez-le sessionrecording.json. Ce fichier de rôle personnalisé permet d’attribuer un minimum d’autorisations pour l’enregistrement de l’application.

        {
            "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. Placez AppRegistration.ps1 et sessionrecording.json dans le même dossier.
      4. Exécutez l’une des commandes suivantes selon vos besoins.

      Pour créer une application et lui attribuer le moins d’autorisations possible avec le fichier de rôle personnalisé précédent (sessionrecording.json), exécutez :

      ```
      .\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éthode 2 :

      Accédez au portail Azure et enregistrez vous-même une application. Accordez les autorisations appropriées à l’application. Pour connaître le minimum d’autorisations requises, consultez le fichier sessionrecording.json de la méthode 1.

    2. Cliquez sur le nom d’affichage de votre application.

      Nom d'affichage de l'application

    3. Sur la page d’aperçu, recherchez l’ID d’application (client) et l’ID de répertoire (locataire). Cliquez sur le lien à côté de Application gérée dans le répertoire local pour trouver l’ID d’objet du principal de service associé à l’application. Cliquez sur le lien à côté des informations d’identification du client pour trouver l’ID secret du client et sa date d’expiration.

      Éléments essentiels de l'application

      Par exemple, l’ID d’objet du principal du service associé à l’application :

      ID d'objet du principal de service

      Par exemple, l’ID secret du client et sa date d’expiration :

      ID secret du client et date d'expiration

  3. Cliquez sur Enregistrer pour vérifier si la connexion hôte que vous spécifiez est disponible.

    Si la connexion hôte que vous spécifiez est disponible, vous êtes redirigé vers la page Connexion hôte et vous êtes invité à confirmer que la connexion hôte a été correctement ajoutée.

    Le service d’enregistrement de session vous rappelle les secrets clients expirés et arrivant à expiration à l’aide d’icônes d’erreur et d’avertissement, respectivement. Vous pouvez cliquer sur la connexion hôte correspondante, puis sur Changer le secret sur la page Détails de la connexion pour mettre à jour le secret client et sa date d’expiration.

    Changer le secret

Créer et déployer un site via un modèle ARM

Vous pouvez créer un modèle Azure Resource Manager (modèle ARM) pour déployer des ressources d’enregistrement de session dans Azure. Les principales étapes à suivre pour atteindre cet objectif sont les suivantes :

  1. Créez un modèle ARM dans le service d’enregistrement de session. Le modèle ARM est un fichier JSON (JavaScript Object Notation) indiquant les ressources à déployer et comment les déployer.
  2. Téléchargez et décompressez le modèle ARM. Pour commencer à déployer les ressources spécifiées dans le modèle Azure, exécutez le script de déploiement figurant dans le dossier de modèle décompressé.
  3. Vérifiez la progression du déploiement dans Azure. Une fois le déploiement terminé, configurez l’enregistrement de session pour qu’il soit opérationnel. Pour configurer l’enregistrement de session, vous devez spécifier la version du serveur d’enregistrement de session afin d’installer et charger le fichier resourceInfo.json.

Les étapes spécifiques sont les suivantes :

  1. Sélectionnez Configuration > Gestion des serveurs dans le volet de navigation de gauche du service d’enregistrement de session.

    Page Gestion des serveurs

  2. Sur la page Gestion des serveurs, cliquez sur Créer un site. La page Créer un site s’affiche.

    Page Créer un site

  3. Sélectionnez Créer et déployer un site via un modèle ARM. Les principales étapes sont répertoriées dans la navigation de gauche.

    Créer et déployer un site via un modèle ARM

  4. Entrez le nom et la description du site, puis cliquez sur Suivant.

  5. (Facultatif) Pour obtenir des recommandations concernant les configurations de machines virtuelles et de stockage, fournissez des informations sur vos besoins en matière d’enregistrement.

    Vous pouvez ignorer cette étape en cliquant sur Ignorer cette étape ou en cliquant sur Suivant sans rien sélectionner.

    Vos besoins d'enregistrement

    Lorsque vous sélectionnez une option dans la liste déroulante, une recommandation est présentée en fonction de votre sélection. Un bouton de réinitialisation est disponible à côté de la recommandation. Cela vous permet d’effacer toutes les sélections et les recommandations correspondantes de cette section.

  6. Accédez au portail Azure et créez un réseau virtuel dans la région que vous avez sélectionnée, puis configurez le peering de réseaux virtuels entre le nouveau réseau virtuel et celui auquel vos VDA sont connectés. Ajoutez ensuite un sous-réseau dans le nouveau réseau virtuel. Recherchez et saisissez l’ID de sous-réseau ci-dessous.

    Paramètres réseau

    Pour conserver les connexions entre ressources dans le réseau privé, cochez la case Créer des points de terminaison privés pour le stockage et les bases de données.

    Après avoir coché la case Créer des points de terminaison privés pour le stockage et les bases de données, décidez si vous souhaitez saisir un autre ID de sous-réseau en tenant compte des éléments suivants :

    • Si vous ne prévoyez pas de joindre vos serveurs d’enregistrement de session à un domaine Active Directory, le sous-réseau n’est pas nécessaire. Vous pouvez donc laisser le champ “ID de sous-réseau” vide.
    • Si vous laissez le champ “ID de sous-réseau vide”, vous joignez vos serveurs d’enregistrement de session à un domaine Azure Active Directory.

    Autre identifiant de sous-réseau

  7. (Ignorez cette étape si vous avez déjà enregistré une application.) Enregistrez une application auprès de votre client Azure AD. Une application doit être enregistrée pour déléguer les fonctions de gestion des identités et des accès à Azure AD.

    Il existe deux méthodes pour enregistrer une application.

    Méthode 1 :

    1. Copiez le script suivant, fourni par Citrix, et nommez-le, par exemple 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. Copiez le fichier de rôle personnalisé suivant et nommez-le sessionrecordingdeployment.json. Ce fichier de rôle personnalisé permet d’attribuer un minimum d’autorisations pour l’enregistrement de l’application.

      {
          "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. Placez AppRegistration.ps1 et sessionrecordingdeployment.json dans le même dossier.
    4. Exécutez l’une des commandes suivantes selon vos besoins.

      Pour créer une application et lui attribuer le moins d’autorisations possible avec le fichier de rôle personnalisé précédent (sessionrecordingdeployment.json), exécutez :

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

      Pour créer une application et lui attribuer le rôle Contributeur intégré d’Azure, exécutez :

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

    Méthode 2 :

    Accédez au portail Azure et enregistrez vous-même une application. Accordez les autorisations appropriées à l’application. Pour connaître le minimum d’autorisations requises, consultez le fichier sessionrecordingdeployment.json de la méthode 1.

  8. Spécifiez les configurations de vos serveurs d’enregistrement de session à installer ultérieurement.

    Créer des machines virtuelles en tant que serveurs d'enregistrement de session

    Remarque :

    • Le champ Nombre de VM est prérempli avec le nombre recommandé, le cas échéant. Modifiez ce nombre selon vos besoins.
    • Les coûts estimés sont basés sur la tarification standard et ne tiennent pas compte des remises. Vous pouvez vous attendre à des coûts réels inférieurs aux estimations.
  9. Joignez les serveurs d’enregistrement de session au même domaine que vos VDA et spécifiez un certificat pour les serveurs d’enregistrement de session.

    • Si vos VDA se connectent à un domaine Active Directory, cochez la case Joindre les serveurs à un domaine Active Directory et entrez les informations pertinentes.

    • Si vos VDA se connectent à un domaine Azure Active Directory (Azure AD), désélectionnez la case Joindre les serveurs à un domaine Active Directory. Après avoir créé le site actuel, assurez-vous de joindre manuellement les serveurs d’enregistrement de session au même domaine Azure AD. Notez que le déploiement d’Azure AD pur n’est disponible que pour l’enregistrement de session 2402 et les versions ultérieures.

    Jonction de serveurs à un domaine Active Directory

    Jonction de serveurs à un domaine Azure Active Directory

  10. Configurez un compte de stockage Azure et des partages de fichiers pour stocker vos fichiers d’enregistrement. Pour plus d’informations sur les tarifs, consultez la section Tarification Fichiers Azure.

    Configurer un compte de stockage Azure et des partages de fichiers pour stocker vos fichiers d'enregistrement

  11. Créez deux bases de données SQL dans Azure. L’une est utilisée comme base de données d’enregistrement de session (nommée sessionrecording) et l’autre comme base de données de journalisation de l’administrateur (nommée sessionrecordinglogging).

    Création de deux bases de données SQL pour le modèle ARM

  12. Créez un équilibreur de charge pour répartir la charge de travail entre les machines virtuelles (serveurs d’enregistrement de session). Entrez les adresses IP ou les plages de vos VDA en les séparant par des virgules (,) dans le champ Restreindre l’accès de l’équilibreur de charge aux seules adresses suivantes. Pour plus d’informations sur les prix, consultez la section Tarification Load Balancer.

    Création d'un équilibreur de charge pour le modèle ARM

  13. (Facultatif) Appliquez des balises aux ressources Azure à créer.

    Appliquer des balises aux ressources Azure

  14. Créez un client sécurisé pour intégrer les serveurs d’enregistrement de session au service d’enregistrement de session.

    Cliquez sur Créer un client pour permettre à Citrix de créer un client sécurisé en votre nom. Vous pouvez également créer un client sécurisé via l’onglet Gestion des identités et des accès > Accès aux API de la console Citrix Cloud, puis renseigner les informations ci-dessous.

    Bouton Créer un client

  15. Consultez le résumé des ressources à créer et cliquez sur l’icône en forme de crayon pour modifier vos paramètres, le cas échéant. Cliquez ensuite sur Télécharger le modèle. Un modèle AEM indiquant les ressources à déployer et comment les déployer est ensuite téléchargé dans le dossier Téléchargements de votre machine. Vous pouvez également voir le site récemment créé sur la page Gestion des serveurs.

    Résumé du modèle AEM

  16. Accédez au dossier Téléchargements et décompressez le modèle ARM. Ouvrez le dossier de fichiers décompressé, tapez PowerShell dans la barre d’adresse, puis appuyez sur Entrée. Attendez qu’une fenêtre PowerShell s’ouvre dans ce dossier.

  17. Exécutez le script JavaScript Object Notation (JSON) nommé DeploySessionRecording.ps1. Fournissez des valeurs pour les paramètres demandés. Les paramètres réels varient en fonction des paramètres que vous avez spécifiés lors de la création du modèle. Par exemple :

    Exécution d'un modèle de script ARM

    Paramètres demandés lors de l'exécution d'un script de modèle ARM

  18. Accédez au portail Azure, localisez le groupe de ressources qui contient votre déploiement, puis vérifiez la progression du déploiement. Attendez que l’ensemble du déploiement affiche Réussi.

    Progression du déploiement dans Azure

  19. Retournez à la page Gestion des serveurs du service d’enregistrement de session. Trouvez le site récemment créé et vous constaterez qu’un bouton Configuration est disponible. Cliquez sur Configurer pour configurer l’enregistrement de session afin qu’il soit opérationnel.

    Bouton de configuration à côté du nouveau site

    Vérification des logiciels requis pour configurer l'enregistrement de session

    Pour configurer l’enregistrement de session, vous devez spécifier la version du serveur d’enregistrement de session afin d’installer et charger le fichier resourceInfo.json.

    Sélection de la version du serveur d'enregistrement de session

    Téléchargement des informations sur les ressources

    Saisissez les informations d’identification de vos bases de données.

    Saisie des informations d'identification pour les bases de données

    Cliquez sur Lancer le démarrage. Vous pouvez ensuite vérifier la progression de la configuration sur la page Gestion des serveurs.

    Configuration en cours

    Étapes de configuration

    Vous pouvez consulter la progression de l’installation de chaque serveur dans la liste des serveurs.

    Progression de l'installation d'un serveur individuel

    Lorsque tous les serveurs d’enregistrement de session apparaissent disponibles dans la liste, la création de votre site est terminée et les ressources spécifiées sont déployées sur Azure.

    Déploiement via un modèle ARM terminé

Déployer des ressources d’enregistrement de session sur un abonnement cloud