Een extern-bureaubladgateway configureren en gebruiken in Azure DevTest Labs
In dit artikel wordt beschreven hoe u een gateway instelt en gebruikt voor beveiligde externe bureaubladtoegang tot virtuele machines (VM's) in Azure DevTest Labs. Het gebruik van een gateway verbetert de beveiliging omdat u de RDP-poorten (Remote Desktop Protocol) van de VM's niet beschikbaar maakt op internet. Deze extern bureaublad-gatewayoplossing ondersteunt ook tokenverificatie.
DevTest Labs biedt een centrale plek waar labgebruikers hun VM's kunnen bekijken en er verbinding mee kunnen maken. Als u Connect>RDP selecteert op de overzichtspagina van een lab-VM, wordt een machinespecifiek RDP-bestand gemaakt en kunnen gebruikers het bestand openen om verbinding te maken met de virtuele machine.
Met een extern bureaublad-gateway maken labgebruikers via een gatewaycomputer verbinding met hun VM's. Gebruikers verifiëren zich rechtstreeks bij de gatewaycomputer en kunnen door het bedrijf opgegeven referenties gebruiken op computers die lid zijn van een domein. Tokenverificatie biedt een extra beveiligingslaag.
Een andere manier om veilig toegang te krijgen tot lab-VM's zonder poorten of IP-adressen weer te geven, is via een browser met Azure Bastion. Zie Browserverbinding met DevTest Labs-VM's inschakelen met Azure Bastion voor meer informatie.
Architectuur
In het volgende diagram ziet u hoe een extern bureaublad-gateway tokenverificatie toepast en verbinding maakt met DevTest Labs-VM's.
Als u Connect>RDP selecteert op een lab-VM, wordt de opdracht getRdpFileContents REST aangeroepen:
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DevTestLab/labs/{labName}/virtualmachines/{name}/getRdpFileContents
Wanneer het lab een gateway heeft geconfigureerd, wordt de
getRdpFileContents
actie aangeroepenhttps://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}
om een verificatietoken aan te vragen.{gateway-hostname}
{lb-uri}
of voor een load balancer is de hostnaam van de gateway die is opgegeven op de pagina Lab-instellingen voor het lab.{lab-machine-name}
is de naam van de virtuele machine waarmee verbinding moet worden gemaakt.{port-number}
is de poort die moet worden gebruikt voor de verbinding. Meestal is deze poort 3389, maar als de lab-VM een gedeeld IP-adres gebruikt, is het poortnummer anders.
De extern bureaublad-gateway gebruikt
https://{function-app-uri}/api/host/{lab-machine-name}/port/{port-number}
om de aanroep naar een Azure Functions-functie-app uit te stellen.Notitie
De aanvraagheader bevat automatisch de functiesleutel, die wordt opgehaald uit de sleutelkluis van het lab. De naam van het functiesleutelgeheim is het gatewaytokengeheim op de pagina Lab-instellingen van het lab.
De Azure-functie genereert en retourneert een token voor verificatie op basis van certificaten op de gatewaycomputer.
De
getRdpFileContents
actie retourneert het volledige RDP-bestand, inclusief het verificatietoken.
Wanneer een RDP-verbindingsprogramma het RDP-bestand opent, verifieert de extern bureaublad-gateway het token en wordt de verbinding doorgestuurd naar de lab-VM.
Notitie
Niet alle RDP-verbindingsprogramma's ondersteunen tokenverificatie.
Belangrijk
De Azure-functie stelt een vervaldatum in voor het verificatietoken. Een gebruiker moet verbinding maken met de virtuele machine voordat het token verloopt.
Configuratievereisten
Er zijn enkele configuratievereisten voor gatewaycomputers, Azure Functions en netwerken om te werken met RdP-toegang en tokenverificatie van DevTest Labs:
Vereisten voor gatewaycomputers
De gatewaycomputer moet de volgende configuratie hebben:
Een TLS/SSL-certificaat voor het verwerken van HTTPS-verkeer. Het certificaat moet overeenkomen met de FQDN-naam (Fully Qualified Domain Name) van de gatewaycomputer als er slechts één computer is, of de load balancer van een gatewayfarm. TLS-/SSL-certificaten met jokertekens werken niet.
Een handtekeningcertificaat. U kunt een handtekeningcertificaat maken met behulp van het PowerShell-script Create-SigningCertificate.ps1 .
Een pluggable-verificatiemodule die tokenverificatie ondersteunt. Een voorbeeld is RDGatewayFedAuth.msi, dat wordt geleverd met System Center Virtual Machine Manager -installatiekopieën (VMM ).
De mogelijkheid om aanvragen naar te
https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}
verwerken.
U kunt de module Aanvraag voor toepassingsroutering voor Internet Information Server (IIS) gebruiken om aanvragen om te leiden https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}
naar de functie-app.
Vereisten voor Azure Functions
Een Azure Functions-functie-app verwerkt aanvragen met de https://{function-app-uri}/app/host/{lab-machine-name}/port/{port-number}
indeling en maakt en retourneert het verificatietoken op basis van het handtekeningcertificaat van de gatewaycomputer. Dit {function-app-uri}
is de URI die wordt gebruikt voor toegang tot de functie.
De aanvraagheader moet de functiesleutel doorgeven, die wordt opgehaald uit de sleutelkluis van het lab.
Zie CreateToken.cs voor een voorbeeldfunctie.
Vereisten voor netwerkfirewall
De DNS voor de FQDN die is gekoppeld aan het TLS/SSL-certificaat van de gatewaycomputer moet verkeer naar de gatewaycomputer of naar de load balancer van een gatewaycomputerfarm leiden.
Als de lab-VM een privé-IP-adres gebruikt, moet er een netwerkpad van de gatewaycomputer naar de labmachine zijn. De twee machines moeten hetzelfde virtuele netwerk delen of gebruikmaken van gekoppelde virtuele netwerken.
Een extern bureaublad-gateway maken
De GitHub-opslagplaats van Azure DevTest Labs bevat ARM-sjablonen (Azure Resource Manager) waarmee u tokenverificatie van DevTest Labs en extern bureaublad-gatewayresources kunt instellen. Er zijn sjablonen voor het maken van gatewaycomputers, labinstellingen en een functie-app.
Notitie
Met behulp van de voorbeeldsjablonen gaat u akkoord met de licentievoorwaarden voor Extern bureaublad-gateway.
Volg deze stappen om een voorbeeld van een extern bureaublad-gatewayfarm in te stellen.
Maak een handtekeningcertificaat.
Voer Create-SigningCertificate.ps1 uit. Noteer de vingerafdruk, het wachtwoord en de Base64-codering van het gemaakte certificaat voor later gebruik.
Haal een TLS/SSL-certificaat op. De FQDN die is gekoppeld aan het TLS/SSL-certificaat moet zijn voor een domein dat u bepaalt.
Noteer het wachtwoord, de vingerafdruk en de Base64-codering voor het TLS/SSL-certificaat dat later moet worden gebruikt.
Gebruik de volgende PowerShell-opdrachten om de vingerafdruk op te halen:
$cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate; $cer.Import('path-to-certificate'); $hash = $cer.GetCertHashString()
Gebruik de volgende PowerShell-opdracht om de Base64-codering op te halen:
[System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes('path-to-certificate'))
Download alle bestanden van https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gateway. Kopieer alle bestanden en RDGatewayFedAuth.msi naar een blobcontainer in een opslagaccount.
Open azuredeploy.json van https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gatewayen vul de volgende parameters in:
Parameter Vereist Beschrijving adminUsername
Vereist Gebruikersnaam van de beheerder voor de gatewaycomputers. adminPassword
Vereist Wachtwoord voor het beheerdersaccount voor de gatewaymachines. instanceCount
Aantal gatewaycomputers dat moet worden gemaakt. alwaysOn
Of de gemaakte Azure Functions-app al dan niet wordt opgewarmd (ingeschakeld). Het bijhouden van de app voorkomt vertragingen wanneer gebruikers voor het eerst verbinding proberen te maken met hun lab-VM's, maar dit heeft gevolgen voor de kosten. tokenLifetime
De tijdsduur in UU:MM:SS-indeling die het gemaakte token geldig is. sslCertificate
Vereist De Base64-codering van het TLS/SSL-certificaat voor de gatewaycomputer. sslCertificatePassword
Vereist Het wachtwoord van het TLS/SSL-certificaat voor de gatewaycomputer. sslCertificateThumbprint
Vereist De vingerafdruk van het certificaat voor identificatie in het lokale certificaatarchief van het handtekeningcertificaat. signCertificate
Vereist De Base64-codering voor het handtekeningcertificaat voor de gatewaycomputer. signCertificatePassword
Vereist Het wachtwoord voor het handtekeningcertificaat voor de gatewaycomputer. signCertificateThumbprint
Vereist De vingerafdruk van het certificaat voor identificatie in het lokale certificaatarchief van het handtekeningcertificaat. _artifactsLocation
Vereist De URI-locatie voor het vinden van artefacten die deze sjabloon vereist. Deze waarde moet een volledig gekwalificeerde URI zijn, niet een relatief pad. De artefacten bevatten andere sjablonen, PowerShell-scripts en de module Pluggable Authentication van extern bureaublad-gateway, die naar verwachting RDGatewayFedAuth.msi heet die tokenverificatie ondersteunt. _artifactsLocationSasToken
Vereist Het SAS-token (Shared Access Signature) voor toegang tot artefacten, als het _artifactsLocation
een Azure-opslagaccount is.Voer de volgende Azure CLI-opdracht uit om azuredeploy.json te implementeren:
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}"
Haal het
{storage-account-endpoint}
door uit te voerenaz storage account show --name {storage-account-name} --query primaryEndpoints.blob
.Haal het
{sas-token}
door uit te voerenaz storage container generate-sas --name {container-name} --account-name {storage-account-name} --https-only –permissions drlw –expiry {utc-expiration-date}
.{storage-account-name}
is de naam van het opslagaccount met de bestanden die u hebt geüpload.{container-name}
is de container in de{storage-account-name}
container waarin de bestanden zijn opgeslagen die u hebt geüpload.{utc-expiration-date}
is de datum in UTC wanneer het SAS-token verloopt en niet meer kan worden gebruikt voor toegang tot het opslagaccount.
Noteer de waarden voor
gatewayFQDN
engatewayIP
uit de uitvoer van de sjabloonimplementatie. Sla ook de waarde van de sleutel voor de zojuist gemaakte functie op, die u kunt vinden op het tabblad Toepassingsinstellingen van de functie-app.Configureer DNS zodat de FQDN van het TLS/SSL-certificaat naar het
gatewayIP
IP-adres wordt verzonden.
Nadat u de extern bureaublad-gatewayfarm hebt gemaakt en DNS hebt bijgewerkt, configureert u Azure DevTest Labs om de gateway te gebruiken.
Het lab configureren voor het gebruik van tokenverificatie
Voordat u labinstellingen bijwerkt, slaat u de sleutel voor de verificatietokenfunctie op in de sleutelkluis van het lab. U kunt de waarde van de functiesleutel ophalen op de pagina Functiesleutels van de functie in Azure Portal. Voer de volgende Azure CLI-opdracht uit om de id van de sleutelkluis van het lab te vinden:
az resource show --name {lab-name} --resource-type 'Microsoft.DevTestLab/labs' --resource-group {lab-resource-group-name} --query properties.vaultName
Meer informatie over het opslaan van een geheim in een sleutelkluis in het artikel, een geheim toevoegen aan Key Vault. Noteer de geheime naam die u later wilt gebruiken. Deze waarde is niet de functiesleutel zelf, maar de naam van het sleutelkluisgeheim dat de functiesleutel bevat.
Voer de volgende stappen uit om de gatewayhostnaam en het gatewaytokengeheim van een lab te configureren voor het gebruik van tokenverificatie met de gatewaycomputer(s):
Selecteer op de pagina Overzicht van het lab configuratie en beleid in de linkernavigatiebalk.
Selecteer op de pagina Configuratie en beleid de optie Lab-instellingen in de sectie Instellingen van het linkernavigatievenster.
In de sectie Extern bureaublad :
Voer voor het veld Gateway-hostnaam de FQDN of het IP-adres van de gatewaycomputer of farm van de extern bureaublad-services in. Deze waarde moet overeenkomen met de FQDN van het TLS/SSL-certificaat dat wordt gebruikt op gatewaycomputers.
Voer voor het gatewaytoken de geheime naam in die u eerder hebt vastgelegd. Deze waarde is niet de functiesleutel zelf, maar de naam van het sleutelkluisgeheim dat de functiesleutel bevat.
Selecteer Opslaan.
Notitie
Als u Opslaan selecteert, gaat u akkoord met de licentievoorwaarden voor Extern bureaublad-gateway.
Zodra u zowel de gateway als het lab hebt geconfigureerd, bevat het RDP-verbindingsbestand dat is gemaakt wanneer de labgebruiker Connect selecteert de benodigde informatie om verbinding te maken met de gateway en tokenverificatie te gebruiken.
Labconfiguratie automatiseren
PowerShell: Set-DevTestLabGateway.ps1 is een PowerShell-voorbeeldscript om instellingen voor de hostnaam van de gateway en het tokengeheim automatisch in te stellen.
ARM: Gebruik de ARM-voorbeeldsjablonen van de gateway in de GitHub-opslagplaats van Azure DevTest Labs om labs te maken of bij te werken met instellingen voor gatewayhostnaam en gatewaytokengeheim.
Een netwerkbeveiligingsgroep configureren
Als u het lab verder wilt beveiligen, voegt u een netwerkbeveiligingsgroep (NSG) toe aan het virtuele netwerk dat de lab-VM's gebruiken, zoals beschreven in Een netwerkbeveiligingsgroep maken, wijzigen of verwijderen. Een netwerkbeveiligingsgroep kan bijvoorbeeld alleen verkeer toestaan dat eerst via de gateway naar lab-VM's gaat. De regelbron is het IP-adres van de gatewaymachine of load balancer voor de gatewayfarm.