Partager via


Configurer et utiliser une passerelle des services Bureau à distance dans Azure DevTest Labs

Cet article explique comment configurer et utiliser une passerelle pour un accès Bureau à distance sécurisé aux machines virtuelles de lab dans Azure DevTest Labs. L’utilisation d’une passerelle améliore la sécurité, car vous n’exposez pas les ports RDP (Remote Desktop Protocol) des machines virtuelles à Internet. Cette solution de passerelle des services Bureau à distance prend également en charge l’authentification par jeton.

DevTest Labs fournit un emplacement central où les utilisateurs du lab peuvent afficher et se connecter à leurs machines virtuelles. La sélection de Connecter>RDP dans la page Vue d’ensemble d’une machine virtuelle de lab crée un fichier RDP propre à la machine, et les utilisateurs peuvent ouvrir le fichier pour se connecter à la machine virtuelle.

Avec une passerelle des services Bureau à distance, les utilisateurs du lab se connectent à leurs machines virtuelles par le biais d’une machine de passerelle. Les utilisateurs s’authentifient directement auprès de la machine de passerelle, et peuvent utiliser des informations d’identification fournies par l’entreprise sur des machines jointes à un domaine. L’authentification par jeton fournit une couche supplémentaire de sécurité.

Une autre façon d’accéder de manière sécurisée aux machines virtuelles de lab sans exposer les ports ou les adresses IP consiste à utiliser un navigateur avec Azure Bastion. Pour plus d’informations, consultez Activer la connexion du navigateur aux machines virtuelles DevTest Labs avec Azure Bastion.

Architecture

Le diagramme suivant montre comment une passerelle des services Bureau à distance applique l’authentification par jeton et se connecte aux machines virtuelles DevTest Labs.

Diagramme montrant l’architecture de la passerelle des services Bureau à distance.

  1. La sélection de Connecter>RDP à partir d’une machine virtuelle de lab appelle la commande REST getRdpFileContents :

    POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DevTestLab/labs/{labName}/virtualmachines/{name}/getRdpFileContents
    
  2. Lorsque le lab a une passerelle configurée, l’action getRdpFileContents appelle https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number} pour demander un jeton d’authentification.

    • {gateway-hostname}, ou {lb-uri} pour un équilibreur de charge, est le nom d’hôte de la passerelle spécifié dans la page Paramètres lab du lab.
    • {lab-machine-name} est le nom de la machine virtuelle à laquelle se connecter.
    • {port-number} est le port à utiliser pour la connexion. Ce port est généralement 3389, mais si la machine virtuelle de lab utilise une adresse IP partagée, le numéro de port est différent.
  3. La passerelle des services Bureau à distance utilise https://{function-app-uri}/api/host/{lab-machine-name}/port/{port-number} pour différer l’appel à une application de fonction Azure Functions.

    Notes

    L’en-tête de la requête comprend automatiquement la clé de fonction, obtenue à partir du coffre de clés du lab. Le nom du secret de la clé de fonction est le Secret du jeton de passerelle mentionné dans la page Paramètres lab du lab.

  4. La fonction Azure génère et retourne un jeton pour l’authentification basée sur les certificats sur la machine de passerelle.

  5. L’action getRdpFileContents retourne le fichier RDP complet, notamment le jeton d’authentification.

Lorsqu’un programme de connexion RDP ouvre le fichier RDP, la passerelle des services Bureau à distance authentifie le jeton, et la connexion est transférée à la machine virtuelle de lab.

Notes

Tous les programmes de connexion RDP ne prennent pas en charge l’authentification par jeton.

Important

La fonction Azure définit une date d’expiration pour le jeton d’authentification. Un utilisateur doit se connecter à la machine virtuelle avant l’expiration du jeton.

Exigences de configuration

Il existe certaines exigences de configuration pour que les machines de passerelle, les fonctions Azure et les réseaux fonctionnent avec l’accès RDP et l’authentification par jeton DevTest Labs :

Configuration requise pour la machine de passerelle

La configuration de la machine de passerelle doit être la suivante :

  • Un certificat TLS/SSL pour gérer le trafic HTTPS. Le certificat doit correspondre au nom de domaine complet (FQDN) de la machine de passerelle s’il n’existe qu’une seule machine, ou de l’équilibreur de charge d’une batterie de serveurs de passerelle. Les certificats TLS/SSL utilisant des caractères génériques ne fonctionnent pas.

  • Un certificat de signature. Vous pouvez créer un certificat de signature à l’aide du script PowerShell Create-SigningCertificate.ps1.

  • Un module d’authentification enfichable qui prend en charge l’authentification par jeton. RDGatewayFedAuth.msi, qui est fourni avec des images System Center Virtual Machine Manager (VMM), est un exemple de ce type de module.

  • Capacité à gérer les requêtes à destination de https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}.

Vous pouvez utiliser le module Application Routing Request pour Internet Information Server (IIS) afin de rediriger les requêtes https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number} vers l’application de fonction.

Configuration requise pour Azure Functions

Une application de fonction Azure Functions gère les requêtes au format https://{function-app-uri}/app/host/{lab-machine-name}/port/{port-number}, et crée et retourne le jeton d’authentification basé sur le certificat de signature de la machine de passerelle. {function-app-uri} est l’URI utilisé pour accéder à la fonction.

L’en-tête de requête doit passer la clé de fonction, qu’il obtient à partir du coffre de clés du lab.

Pour obtenir un exemple de fonction, consultez CreateToken.cs.

Configuration requise pour le réseau

  • Le système DNS pour le nom de domaine complet (FQDN) associé au certificat TLS/SSL de la machine de passerelle doit diriger le trafic vers la machine de passerelle ou vers l’équilibreur de charge d’une batterie de serveurs de machines de passerelle.

  • Si la machine virtuelle de lab utilise une adresse IP privée, il doit y avoir un chemin réseau de la machine de passerelle à la machine de lab. Les deux machines doivent partager le même réseau virtuel ou utiliser des réseaux virtuels appairés.

Créer une passerelle des services Bureau à distance

Le dépôt GitHub Azure DevTest Labs contient des modèles ARM (Azure Resource Manager) qui aident à configurer l’authentification par jeton DevTest Labs et les ressources de passerelle des services Bureau à distance. Il existe des modèles pour la création de machine de passerelle, des paramètres de lab et d’une application de fonction.

Notes

En utilisant les exemples de modèles, vous acceptez les Termes du contrat de licence de la passerelle des services Bureau à distance.

Suivez ces étapes afin de configurer un exemple de batterie de serveurs de passerelle des services Bureau à distance.

  1. Créez un certificat de signature.

    Exécutez Create-SigningCertificate.ps1. Prenez note de l’empreinte, du mot de passe et de l’encodage en Base64 du certificat créé ; vous en aurez besoin ultérieurement.

  2. Obtenez un certificat TLS/SSL. Le nom de domaine complet (FQDN) associé au certificat TLS/SSL doit correspondre à un domaine que vous contrôlez.

  3. Prenez note du mot de passe, de l’empreinte et de l’encodage en Base64 du certificat TLS/SSL ; vous en aurez besoin ultérieurement.

    • Pour obtenir l’empreinte, utilisez les commandes PowerShell suivantes :

      $cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate;
      $cer.Import('path-to-certificate');
      $hash = $cer.GetCertHashString()
      
    • Pour obtenir l’encodage en Base64, utilisez la commande PowerShell suivante :

      [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes('path-to-certificate'))
      
  4. Téléchargez tous les fichiers à partir de https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gateway. Copiez tous les fichiers à partir de RDGatewayFedAuth.msi vers un conteneur d’objets blob dans un compte de stockage.

  5. Ouvrez azuredeploy.json à partir de https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gateway et renseignez les paramètres suivants :

    Paramètre Obligatoire Description
    adminUsername Obligatoire Nom d’utilisateur de l’administrateur des machines de passerelle.
    adminPassword Obligatoire Mot de passe du compte administrateur pour les machines de passerelle.
    instanceCount : nombre de machines de passerelle à créer.
    alwaysOn Indique s’il faut maintenir l’application Azure Functions créée dans un état actif ou non. Maintenir l’application active permet d’éviter des retards quand les utilisateurs tentent de se connecter pour la première fois à leur machine virtuelle de lab, mais cela a des implications en termes de coût.
    tokenLifetime Durée au format HH:MM:SS pendant laquelle le jeton créé sera valide.
    sslCertificate Obligatoire Encodage en Base64 du certificat TLS/SSL pour la machine de passerelle.
    sslCertificatePassword Obligatoire Mot de passe du certificat TLS/SSL pour la machine de passerelle.
    sslCertificateThumbprint Obligatoire Empreinte du certificat pour l’identification dans le magasin de certificats local du certificat de signature.
    signCertificate Obligatoire Encodage en Base64 du certificat de signature pour la machine de passerelle.
    signCertificatePassword Obligatoire Mot de passe du certificat de signature pour la machine de passerelle.
    signCertificateThumbprint Obligatoire Empreinte du certificat pour l’identification dans le magasin de certificats local du certificat de signature.
    _artifactsLocation Obligatoire Emplacement URI où rechercher les artefacts requis par ce modèle. Cette valeur doit être un URI complet, et non un chemin relatif. Les artefacts incluent les autres modèles, les scripts PowerShell et le module d’authentification enfichable de passerelle Bureau à distance, censé être nommé RDGatewayFedAuth.msi, qui prend en charge l’authentification par jeton.
    _artifactsLocationSasToken Obligatoire Jeton de signature d’accès partagé (SAS) pour accéder aux artefacts, si _artifactsLocation est un compte Stockage Azure.
  6. Exécutez la commande Azure CLI suivante pour déployer azuredeploy.json :

    az deployment group create --resource-group {resource-group} --template-file azuredeploy.json --parameters @azuredeploy.parameters.json -–parameters _artifactsLocation="{storage-account-endpoint}/{container-name}" -–parameters _artifactsLocationSasToken = "?{sas-token}"
    
    • Obtenez {storage-account-endpoint} en exécutant az storage account show --name {storage-account-name} --query primaryEndpoints.blob.

    • Obtenez {sas-token} en exécutant az storage container generate-sas --name {container-name} --account-name {storage-account-name} --https-only –permissions drlw –expiry {utc-expiration-date}.

      • {storage-account-name} est le nom du compte de stockage contenant les fichiers que vous avez chargés.
      • {container-name} est le conteneur dans {storage-account-name} qui contient les fichiers que vous avez chargés.
      • {utc-expiration-date} est la date, en UTC, à laquelle le jeton SAS expire et ne peut plus être utilisé pour accéder au compte de stockage.
  7. Prenez note des valeurs gatewayFQDN et gatewayIP mentionnées dans la sortie de déploiement de modèle. Prenez également note de la valeur de la clé pour la fonction que vous venez de créer ; vous la trouverez sous l’onglet Paramètres de l’application de l’application de fonction.

  8. Configurez DNS pour que le nom de domaine complet du certificat TLS/SSL soit dirigé vers l’adresse IP gatewayIP.

Une fois que vous avez créé la batterie de serveurs de passerelle Bureau à distance et mis à jour le système DNS, configurez Azure DevTest Labs de façon à utiliser la passerelle.

Configurer le labo pour utiliser une authentification du jeton

Avant de mettre à jour les paramètres du lab, stockez la clé de la fonction de jeton d’authentification dans le coffre de clés du lab. Vous pouvez obtenir la valeur de la clé de fonction dans la page Clés de fonction de la fonction dans le portail Azure. Pour rechercher l’ID du coffre de clés du labo, exécutez la commande Azure CLI suivante :

az resource show --name {lab-name} --resource-type 'Microsoft.DevTestLab/labs' --resource-group {lab-resource-group-name} --query properties.vaultName

Découvrez comment enregistrer un secret dans un coffre de clés dans l’article Ajouter un secret au coffre de clés. Prenez note du nom du secret ; vous l’utiliserez ultérieurement. Cette valeur n’est pas la clé de fonction proprement dite, mais le nom du secret dans le coffre de clés qui contient la clé de fonction.

Pour configurer le Nom d’hôte de passerelle et le Secret du jeton de passerelle d’un lab de façon à utiliser l’authentification par jeton avec les machines de passerelle, effectuez les étapes suivantes :

  1. Dans la page Vue d’ensemble du laboratoire, sélectionnez Configuration et stratégies dans le volet de navigation de gauche.

  2. Dans la page Configuration et stratégies, sélectionnez Paramètres lab dans la section Paramètres de la navigation de gauche.

  3. Dans la section Bureau à distance :

    • Dans le champ Nom d’hôte de passerelle, entrez le nom de domaine complet ou l’adresse IP de la machine ou de la batterie de serveurs de passerelle des services Bureau à distance. Cette valeur doit correspondre au nom de domaine complet (FQDN) du certificat TLS/SSL utilisé sur les machines de passerelle.

    • Pour Jeton de passerelle, entrez le nom du secret noté précédemment. Cette valeur n’est pas la clé de fonction proprement dite, mais le nom du secret dans le coffre de clés qui contient la clé de fonction.

    Capture d’écran des options Bureau à distance dans les paramètres du labo.

  4. Sélectionnez Enregistrer.

    Notes

    En sélectionnant Enregistrer, vous acceptez les Termes du contrat de licence de la passerelle des services Bureau à distance.

Une fois que vous avez configuré la passerelle et le lab, le fichier de connexion RDP créé lorsque l’utilisateur du lab sélectionne Connecter contient les informations nécessaires pour se connecter à la passerelle et utiliser l’authentification par jeton.

Automatiser la configuration du lab

  • PowerShell : Set-DevTestLabGateway.ps1 est un exemple de script PowerShell permettant de définir automatiquement les paramètres Nom d’hôte de passerelle et Secret du jeton de passerelle.

  • ARM : utilisez les exemples de modèles ARM de passerelle dans le référentiel Azure DevTest Labs GitHub pour créer ou mettre à jour des labs avec les paramètres Nom d’hôte de passerelle et Secret du jeton de passerelle.

Configurer un groupe de sécurité réseau

Pour sécuriser davantage le lab, ajoutez un groupe de sécurité réseau (NSG) au réseau virtuel utilisé par les machines virtuelles du lab, comme décrit dans Créer, modifier ou supprimer un groupe de sécurité réseau. Par exemple, un groupe de sécurité réseau peut autoriser uniquement le trafic qui passe d’abord par la passerelle pour atteindre des machines virtuelles de lab. La source de la règle est l’adresse IP de la machine de passerelle ou de l’équilibreur de charge de la batterie de serveurs de passerelle.

Capture d’écran d’une règle de groupe de sécurité réseau.

Étapes suivantes