Configurare e usare un gateway desktop remoto in Azure DevTest Labs
Questo articolo descrive come configurare e usare un gateway per proteggere l'accesso desktop remoto alle macchine virtuali del lab in Azure DevTest Labs. L'uso di un gateway migliora la sicurezza perché non si espongono le porte RDP (Remote Desktop Protocol) delle macchine virtuali a Internet. Questa soluzione gateway Desktop remoto supporta anche l'autenticazione token.
DevTest Labs offre una posizione centrale per gli utenti del lab per visualizzare e connettersi alle macchine virtuali. Se si seleziona Connetti>RDP nella pagina Panoramica di una macchina virtuale lab, viene creato un file RDP specifico del computer e gli utenti possono aprire il file per connettersi alla macchina virtuale.
Con un gateway desktop remoto, gli utenti del lab si connettono alle macchine virtuali tramite un computer gateway. Gli utenti eseguono l'autenticazione direttamente nel computer gateway e possono usare le credenziali fornite dall'azienda nei computer aggiunti a un dominio. L'autenticazione basata su token offre un livello di sicurezza aggiuntivo.
Un altro modo per accedere in modo sicuro alle macchine virtuali del lab senza esporre porte o indirizzi IP consiste nell'usare un browser con Azure Bastion. Per altre informazioni, vedere Abilitare la connessione del browser alle macchine virtuali di DevTest Labs con Azure Bastion.
Architettura
Il diagramma seguente illustra come un gateway desktop remoto applica l'autenticazione dei token e si connette alle macchine virtuali di DevTest Labs.
Se si seleziona Connect RDP from a lab VM (Connetti>RDP da una macchina virtuale lab) viene richiamato il comando REST getRdpFileContents:
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DevTestLab/labs/{labName}/virtualmachines/{name}/getRdpFileContents
Quando il lab ha un gateway configurato, l'azione
getRdpFileContents
richiamahttps://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}
per richiedere un token di autenticazione.{gateway-hostname}
, o{lb-uri}
per un servizio di bilanciamento del carico, è il nome host del gateway specificato nella pagina Impostazioni lab per il lab.{lab-machine-name}
è il nome della macchina virtuale a cui connettersi.{port-number}
è la porta da usare per la connessione. In genere questa porta è 3389, ma se la macchina virtuale del lab usa un indirizzo IP condiviso, il numero di porta è diverso.
Il gateway Desktop remoto usa
https://{function-app-uri}/api/host/{lab-machine-name}/port/{port-number}
per rinviare la chiamata a un'app per le funzioni Funzioni di Azure.Nota
L'intestazione della richiesta include automaticamente la chiave della funzione, ottenuta dall'insieme di credenziali delle chiavi del lab. Il nome del segreto della chiave di funzione è il segreto del token gateway nella pagina delle impostazioni lab del lab.
La funzione di Azure genera e restituisce un token per l'autenticazione basata su certificati nel computer gateway.
L'azione
getRdpFileContents
restituisce il file RDP completo, incluso il token di autenticazione.
Quando un programma di connessione RDP apre il file RDP, il gateway Desktop remoto autentica il token e la connessione viene inoltrata alla macchina virtuale del lab.
Nota
Non tutti i programmi di connessione RDP supportano l'autenticazione token.
Importante
La funzione di Azure imposta una data di scadenza per il token di autenticazione. Un utente deve connettersi alla macchina virtuale prima della scadenza del token.
Requisiti di configurazione
Esistono alcuni requisiti di configurazione per i computer gateway, Funzioni di Azure e le reti da usare con l'accesso e l'autenticazione token RDP di DevTest Labs:
Requisiti del computer gateway
Il computer gateway deve avere la configurazione seguente:
Un certificato TLS/SSL per gestire il traffico HTTPS. Il certificato deve corrispondere al nome di dominio completo (FQDN) del computer gateway se è presente un solo computer o il servizio di bilanciamento del carico di una farm del gateway. I certificati TLS/SSL con caratteri jolly non funzionano.
Un certificato di firma. È possibile creare un certificato di firma usando lo script PowerShell Create-SigningCertificate.ps1 .
Modulo di autenticazione collegabile che supporta l'autenticazione tramite token. Un esempio è RDGatewayFedAuth.msi, fornito con immagini di System Center Virtual Machine Manager (VMM).
Possibilità di gestire le richieste a
https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}
.
È possibile usare il modulo Application Routing Request per Internet Information Server (IIS) per reindirizzare https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}
le richieste all'app per le funzioni.
requisiti di Funzioni di Azure
Un'app per le funzioni Funzioni di Azure gestisce le richieste con il https://{function-app-uri}/app/host/{lab-machine-name}/port/{port-number}
formato e crea e restituisce il token di autenticazione in base al certificato di firma del computer gateway. {function-app-uri}
è l'URI usato per accedere alla funzione.
L'intestazione della richiesta deve passare la chiave della funzione, ottenuta dall'insieme di credenziali delle chiavi del lab.
Per una funzione di esempio, vedere CreateToken.cs.
Requisiti di rete
Il DNS per il nome di dominio completo associato al certificato TLS/SSL del computer gateway deve indirizzare il traffico al computer gateway o al servizio di bilanciamento del carico di una farm di macchine gateway.
Se la macchina virtuale del lab usa un indirizzo IP privato, deve essere presente un percorso di rete dal computer gateway al computer lab. Le due macchine devono condividere la stessa rete virtuale o usare reti virtuali con peering.
Creare un gateway Desktop remoto
Il repository GitHub di Azure DevTest Labs include modelli di Azure Resource Manager (ARM) che consentono di configurare l'autenticazione token di DevTest Labs e le risorse del gateway desktop remoto. Sono disponibili modelli per la creazione del computer gateway, le impostazioni del lab e un'app per le funzioni.
Nota
Usando i modelli di esempio, si accettano le condizioni di licenza di Gateway Desktop remoto.
Seguire questa procedura per configurare una farm gateway desktop remoto di esempio.
Creare un certificato di firma.
Eseguire Create-SigningCertificate.ps1. Registrare l'identificazione personale, la password e la codifica Base64 del certificato creato da usare in un secondo momento.
Ottenere un certificato TLS/SSL. Il nome di dominio completo associato al certificato TLS/SSL deve essere per un dominio controllato.
Registrare la password, l'identificazione personale e la codifica Base64 per il certificato TLS/SSL da usare in un secondo momento.
Per ottenere l'identificazione personale, usare i comandi di PowerShell seguenti:
$cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate; $cer.Import('path-to-certificate'); $hash = $cer.GetCertHashString()
Per ottenere la codifica Base64, usare il comando di PowerShell seguente:
[System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes('path-to-certificate'))
Scaricare tutti i file da https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gateway. Copiare tutti i file e RDGatewayFedAuth.msi in un contenitore BLOB in un account di archiviazione.
Aprire azuredeploy.json da https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gatewaye compilare i parametri seguenti:
Parametro Richiesto Descrizione adminUsername
Obbligatorio Nome utente amministratore per i computer gateway. adminPassword
Obbligatorio Password per l'account amministratore per i computer gateway. instanceCount
Numero di computer gateway da creare. alwaysOn
Indica se mantenere attiva o meno l'app Funzioni di Azure creata. Mantenere l'app in evitare ritardi quando gli utenti tentano di connettersi per la prima volta alle macchine virtuali del lab, ma hanno implicazioni sui costi. tokenLifetime
Periodo di tempo nel formato HH:MM:SS che il token creato è valido. sslCertificate
Obbligatorio Codifica Base64 del certificato TLS/SSL per il computer gateway. sslCertificatePassword
Obbligatorio Password del certificato TLS/SSL per il computer gateway. sslCertificateThumbprint
Obbligatorio Identificazione personale del certificato per l'identificazione nell'archivio certificati locale del certificato di firma. signCertificate
Obbligatorio Codifica Base64 per il certificato di firma per il computer gateway. signCertificatePassword
Obbligatorio Password per il certificato di firma per il computer gateway. signCertificateThumbprint
Obbligatorio Identificazione personale del certificato per l'identificazione nell'archivio certificati locale del certificato di firma. _artifactsLocation
Obbligatorio Percorso URI per trovare gli artefatti necessari per questo modello. Questo valore deve essere un URI completo, non un percorso relativo. Gli artefatti includono altri modelli, script di PowerShell e il modulo Autenticazione pluggable del gateway Desktop remoto, che dovrebbe essere denominato RDGatewayFedAuth.msi che supporta l'autenticazione del token. _artifactsLocationSasToken
Obbligatorio Token di firma di accesso condiviso per accedere agli artefatti, se _artifactsLocation
è un account di archiviazione di Azure.Eseguire il comando seguente dell'interfaccia della riga di comando di Azure per distribuire 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}"
Ottenere eseguendo
{storage-account-endpoint}
az storage account show --name {storage-account-name} --query primaryEndpoints.blob
.Ottenere eseguendo
{sas-token}
az storage container generate-sas --name {container-name} --account-name {storage-account-name} --https-only –permissions drlw –expiry {utc-expiration-date}
.{storage-account-name}
è il nome dell'account di archiviazione che contiene i file caricati.{container-name}
è il contenitore in{storage-account-name}
che contiene i file caricati.{utc-expiration-date}
è la data, in formato UTC, alla scadenza del token di firma di accesso condiviso e non può più essere usata per accedere all'account di archiviazione.
Registrare i valori per
gatewayFQDN
egatewayIP
dall'output della distribuzione del modello. Salvare anche il valore della chiave per la funzione appena creata, disponibile nella scheda Impostazioni applicazione dell'app per le funzioni.Configurare IL DNS in modo che il nome di dominio completo del certificato TLS/SSL indirizzi all'indirizzo
gatewayIP
IP.
Dopo aver creato la farm del gateway Desktop remoto e aver aggiornato DNS, configurare Azure DevTest Labs per l'uso del gateway.
Configurare il lab per l'uso dell'autenticazione basata su token
Prima di aggiornare le impostazioni del lab, archiviare la chiave per la funzione del token di autenticazione nell'insieme di credenziali delle chiavi del lab. È possibile ottenere il valore della chiave di funzione nella pagina Chiavi funzione della funzione in portale di Azure. Per trovare l'ID dell'insieme di credenziali delle chiavi del lab, eseguire il comando seguente dell'interfaccia della riga di comando di Azure:
az resource show --name {lab-name} --resource-type 'Microsoft.DevTestLab/labs' --resource-group {lab-resource-group-name} --query properties.vaultName
Informazioni su come salvare un segreto in un insieme di credenziali delle chiavi nell'articolo Aggiungere un segreto a Key Vault. Registrare il nome del segreto da usare in un secondo momento. Questo valore non è la chiave di funzione stessa, ma il nome del segreto dell'insieme di credenziali delle chiavi che contiene la chiave della funzione.
Per configurare il nome host gateway di un lab e il segreto del token del gateway per usare l'autenticazione token con i computer gateway, seguire questa procedura:
Nella pagina Panoramica del lab selezionare Configurazione e criteri nel riquadro di spostamento a sinistra.
Nella pagina Configurazione e criteri selezionare Impostazioni lab nella sezione Impostazioni del riquadro di spostamento a sinistra.
Nella sezione Desktop remoto:
Per il campo Gateway hostname (Nome host gateway) immettere il nome di dominio completo o l'indirizzo IP del computer gateway o della farm dei servizi Desktop remoto. Questo valore deve corrispondere al nome di dominio completo del certificato TLS/SSL usato nei computer gateway.
Per Token gateway immettere il nome del segreto registrato in precedenza. Questo valore non è la chiave di funzione stessa, ma il nome del segreto dell'insieme di credenziali delle chiavi che contiene la chiave della funzione.
Seleziona Salva.
Nota
Selezionando Salva si accettano le condizioni di licenza di Gateway Desktop remoto.
Dopo aver configurato sia il gateway che il lab, il file di connessione RDP creato quando l'utente del lab seleziona Connetti include le informazioni necessarie per connettersi al gateway e usare l'autenticazione token.
Automatizzare la configurazione del lab
PowerShell: Set-DevTestLabGateway.ps1 è uno script di PowerShell di esempio per impostare automaticamente il nome host del gateway e le impostazioni del segreto del token del gateway .
ARM: usare i modelli di Resource Manager di esempio del gateway nel repository GitHub di Azure DevTest Labs per creare o aggiornare lab con le impostazioni del nome host del gateway e del segreto del token del gateway .
Configurare un gruppo di sicurezza di rete
Per proteggere ulteriormente il lab, aggiungere un gruppo di sicurezza di rete alla rete virtuale che le macchine virtuali del lab usano come descritto in Creare, modificare o eliminare un gruppo di sicurezza di rete. Ad esempio, un gruppo di sicurezza di rete potrebbe consentire solo il traffico che passa prima attraverso il gateway per raggiungere le macchine virtuali del lab. L'origine della regola è l'indirizzo IP del computer gateway o del servizio di bilanciamento del carico per la farm del gateway.