Dela via


Konfigurera och använda en fjärrskrivbordsgateway i Azure DevTest Labs

Den här artikeln beskriver hur du konfigurerar och använder en gateway för säker fjärrskrivbordsåtkomst till virtuella labbdatorer (VM) i Azure DevTest Labs. Att använda en gateway förbättrar säkerheten eftersom du inte exponerar de virtuella datorernas RDP-portar (Remote Desktop Protocol) för Internet. Den här lösningen för fjärrskrivbordsgateway stöder även tokenautentisering.

DevTest Labs är en central plats där labbanvändare kan visa och ansluta till sina virtuella datorer. Om du väljer Anslut>RDP på en virtuell labbdators översiktssida skapas en datorspecifik RDP-fil och användarna kan öppna filen för att ansluta till den virtuella datorn.

Med en fjärrskrivbordsgateway ansluter labbanvändare till sina virtuella datorer via en gatewaydator. Användare autentiserar direkt till gatewaydatorn och kan använda företagsangivna autentiseringsuppgifter på domänanslutna datorer. Tokenautentisering ger ett extra säkerhetslager.

Ett annat sätt att få säker åtkomst till virtuella labbdatorer utan att exponera portar eller IP-adresser är via en webbläsare med Azure Bastion. Mer information finns i Aktivera webbläsaranslutning till virtuella DevTest Labs-datorer med Azure Bastion.

Arkitektur

Följande diagram visar hur en fjärrskrivbordsgateway tillämpar tokenautentisering och ansluter till virtuella DevTest Labs-datorer.

Diagram som visar arkitekturen för fjärrskrivbordsgatewayen.

  1. Om du väljer Anslut>RDP från en virtuell labbdator anropas kommandot getRdpFileContents REST:

    POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DevTestLab/labs/{labName}/virtualmachines/{name}/getRdpFileContents
    
  2. När labbet har konfigurerat getRdpFileContents en gateway anropas https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number} åtgärden för att begära en autentiseringstoken.

    • {gateway-hostname}, eller {lb-uri} för en lastbalanserare, är gatewayens värdnamn som anges på sidan Labbinställningar för labbet.
    • {lab-machine-name} är namnet på den virtuella datorn som ska anslutas till.
    • {port-number} är porten som ska användas för anslutningen. Den här porten är vanligtvis 3389, men om den virtuella labbdatorn använder en delad IP-adress är portnumret annorlunda.
  3. Fjärrskrivbordsgatewayen använder https://{function-app-uri}/api/host/{lab-machine-name}/port/{port-number} för att skjuta upp anropet till en Azure Functions-funktionsapp.

    Kommentar

    Begärandehuvudet innehåller automatiskt funktionsnyckeln, som den hämtar från labbets nyckelvalv. Funktionsnyckelhemlighetens namn är gatewaytokenhemligheten på labbsidan Labbinställningar.

  4. Azure-funktionen genererar och returnerar en token för certifikatbaserad autentisering på gatewaydatorn.

  5. Åtgärden getRdpFileContents returnerar den fullständiga RDP-filen, inklusive autentiseringstoken.

När ett RDP-anslutningsprogram öppnar RDP-filen autentiserar fjärrskrivbordsgatewayen token och anslutningen vidarebefordras till den virtuella labbdatorn.

Kommentar

Alla RDP-anslutningsprogram stöder inte tokenautentisering.

Viktigt!

Azure-funktionen anger ett förfallodatum för autentiseringstoken. En användare måste ansluta till den virtuella datorn innan token upphör att gälla.

Konfigurationskrav

Det finns vissa konfigurationskrav för gatewaydatorer, Azure Functions och nätverk som ska fungera med DevTest Labs RDP-åtkomst och tokenautentisering:

Krav för gatewaydatorer

Gatewaydatorn måste ha följande konfiguration:

  • Ett TLS/SSL-certifikat för att hantera HTTPS-trafik. Certifikatet måste matcha det fullständigt kvalificerade domännamnet (FQDN) för gatewaydatorn om det bara finns en dator eller lastbalanseraren för en gateway-servergrupp. TLS-/SSL-certifikat med jokertecken fungerar inte.

  • Ett signeringscertifikat. Du kan skapa ett signeringscertifikat med hjälp av PowerShell-skriptet Create-SigningCertificate.ps1 .

  • En pluggbar autentiseringsmodul som stöder tokenautentisering. Ett exempel är RDGatewayFedAuth.msi, som levereras med VMM-avbildningar (System Center Virtual Machine Manager).

  • Möjligheten att hantera begäranden till https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}.

Du kan använda modulen Programroutningsbegäran för Internet Information Server (IIS) för att omdirigera https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number} begäranden till funktionsappen.

Krav för Azure Functions

En Azure Functions-funktionsapp hanterar begäranden med https://{function-app-uri}/app/host/{lab-machine-name}/port/{port-number} formatet och skapar och returnerar autentiseringstoken baserat på gatewaydatorns signeringscertifikat. {function-app-uri} är den URI som används för att komma åt funktionen.

Begärandehuvudet måste skicka funktionsnyckeln, som den hämtar från labbets nyckelvalv.

En exempelfunktion finns i CreateToken.cs.

Nätverkskrav

  • DNS för det FQDN som är associerat med gatewaydatorns TLS/SSL-certifikat måste dirigera trafik till gatewaydatorn eller till lastbalanseraren för en gatewaydatorgrupp.

  • Om den virtuella labbdatorn använder en privat IP-adress måste det finnas en nätverkssökväg från gatewaydatorn till labbdatorn. De två datorerna måste antingen dela samma virtuella nätverk eller använda peer-kopplade virtuella nätverk.

Skapa en fjärrskrivbordsgateway

Azure DevTest Labs GitHub-lagringsplatsen har Azure Resource Manager-mallar (ARM) som hjälper dig att konfigurera DevTest Labs-tokenautentisering och resurser för fjärrskrivbordsgateway. Det finns mallar för att skapa gatewaydatorer, labbinställningar och en funktionsapp.

Kommentar

Genom att använda exempelmallarna godkänner du licensvillkoren för Fjärrskrivbordsgateway.

Följ de här stegen för att konfigurera en exempelservergrupp för fjärrskrivbordsgateway.

  1. Skapa ett signeringscertifikat.

    Kör Create-SigningCertificate.ps1. Registrera tumavtrycket, lösenordet och Base64-kodningen för det skapade certifikatet som ska användas senare.

  2. Hämta ett TLS/SSL-certifikat. Det FQDN som är associerat med TLS/SSL-certifikatet måste vara för en domän som du kontrollerar.

  3. Registrera lösenordet, tumavtrycket och Base64-kodningen för TLS/SSL-certifikatet som ska användas senare.

    • Använd följande PowerShell-kommandon för att hämta tumavtrycket:

      $cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate;
      $cer.Import('path-to-certificate');
      $hash = $cer.GetCertHashString()
      
    • Om du vill hämta Base64-kodningen använder du följande PowerShell-kommando:

      [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes('path-to-certificate'))
      
  4. Ladda ned alla filer från https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gateway. Kopiera alla filer och RDGatewayFedAuth.msi till en blobcontainer i ett lagringskonto.

  5. Öppna azuredeploy.json från https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gatewayoch fyll i följande parametrar:

    Parameter Obligatoriskt Beskrivning
    adminUsername Krävs Administratörsanvändarnamn för gatewaydatorerna.
    adminPassword Krävs Lösenord för administratörskontot för gatewaydatorerna.
    instanceCount Antal gatewaydatorer som ska skapas.
    alwaysOn Om du vill att den skapade Azure Functions-appen ska vara varm (på) eller inte. Att hålla appen på undviker fördröjningar när användarna först försöker ansluta till sina virtuella labbdatorer, men har kostnadskonsekvenser.
    tokenLifetime Hur lång tid i HH:MM:SS-format som den skapade token är giltig.
    sslCertificate Krävs Base64-kodningen av TLS/SSL-certifikatet för gatewaydatorn.
    sslCertificatePassword Krävs Lösenordet för TLS/SSL-certifikatet för gatewaydatorn.
    sslCertificateThumbprint Krävs Certifikatets tumavtryck för identifiering i det lokala certifikatarkivet för signeringscertifikatet.
    signCertificate Krävs Base64-kodningen för signeringscertifikatet för gatewaydatorn.
    signCertificatePassword Krävs Lösenordet för signeringscertifikatet för gatewaydatorn.
    signCertificateThumbprint Krävs Certifikatets tumavtryck för identifiering i det lokala certifikatarkivet för signeringscertifikatet.
    _artifactsLocation Krävs URI-platsen för att hitta artefakter som den här mallen kräver. Det här värdet måste vara en fullständigt kvalificerad URI, inte en relativ sökväg. Artefakterna innehåller andra mallar, PowerShell-skript och modulen Anslutningbar autentisering för Fjärrskrivbordsgateway, som förväntas namnges RDGatewayFedAuth.msi som stöder tokenautentisering.
    _artifactsLocationSasToken Krävs SAS-token (signatur för delad åtkomst) för åtkomst till artefakter, om _artifactsLocation är ett Azure-lagringskonto.
  6. Kör följande Azure CLI-kommando för att distribuera 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}"
    
    • Hämta genom att {storage-account-endpoint} köra az storage account show --name {storage-account-name} --query primaryEndpoints.blob.

    • Hämta genom att {sas-token} köra az storage container generate-sas --name {container-name} --account-name {storage-account-name} --https-only –permissions drlw –expiry {utc-expiration-date}.

      • {storage-account-name} är namnet på lagringskontot som innehåller de filer som du laddade upp.
      • {container-name} är containern i {storage-account-name} som innehåller de filer som du laddade upp.
      • {utc-expiration-date} är datumet i UTC när SAS-token upphör att gälla och inte längre kan användas för att komma åt lagringskontot.
  7. Registrera värdena för gatewayFQDN och gatewayIP från malldistributionens utdata. Spara även värdet för nyckeln för den nyligen skapade funktionen, som du hittar på fliken Programinställningar för funktionsappen.

  8. Konfigurera DNS så att FQDN för TLS/SSL-certifikatet dirigeras till gatewayIP IP-adressen.

När du har skapat servergruppen för fjärrskrivbordsgatewayen och uppdaterat DNS konfigurerar du Azure DevTest Labs för att använda gatewayen.

Konfigurera labbet för att använda tokenautentisering

Innan du uppdaterar labbinställningarna lagrar du nyckeln för funktionen för autentiseringstoken i labbets nyckelvalv. Du kan hämta funktionsnyckelvärdet på funktionens funktionsnycklar i Azure Portal. Kör följande Azure CLI-kommando för att hitta ID:t för labbets nyckelvalv:

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

Lär dig hur du sparar en hemlighet i ett nyckelvalv i artikeln Lägg till en hemlighet i Key Vault. Registrera det hemliga namn som ska användas senare. Det här värdet är inte själva funktionsnyckeln, utan namnet på nyckelvalvets hemlighet som innehåller funktionsnyckeln.

Så här konfigurerar du ett labbs gatewayvärdnamn och gatewaytokenhemlighet för att använda tokenautentisering med gatewaydatorerna:

  1. På labbsidan Översikt väljer du Konfiguration och principer i det vänstra navigeringsfältet.

  2. På sidan Konfiguration och principer väljer du Labbinställningar i avsnittet Inställningar i det vänstra navigeringsfältet.

  3. I avsnittet Fjärrskrivbord :

    • För fältet Gateway-värdnamn anger du FQDN eller IP-adressen för gatewaydatorn eller servergruppen för fjärrskrivbordstjänster. Det här värdet måste matcha FQDN för TLS/SSL-certifikatet som används på gatewaydatorer.

    • För Gateway-token anger du det hemliga namn som du registrerade tidigare. Det här värdet är inte själva funktionsnyckeln, utan namnet på nyckelvalvets hemlighet som innehåller funktionsnyckeln.

    Skärmbild av alternativ för fjärrskrivbord i labbinställningar.

  4. Välj Spara.

    Kommentar

    Genom att välja Spara godkänner du licensvillkoren för Fjärrskrivbordsgateway.

När du har konfigurerat både gatewayen och labbet innehåller RDP-anslutningsfilen som skapades när labbanvändaren väljer Anslut nödvändig information för att ansluta till gatewayen och använda tokenautentisering.

Automatisera labbkonfiguration

  • PowerShell: Set-DevTestLabGateway.ps1 är ett PowerShell-exempelskript för att automatiskt ange inställningar för Gateway-värdnamn och gatewaytokenhemlighet .

  • ARM: Använd ARM-exempelmallarna gateway i GitHub-lagringsplatsen Azure DevTest Labs för att skapa eller uppdatera labb med gatewayens värdnamn och inställningar för gatewaytokenhemlighet .

Konfigurera en nätverkssäkerhetsgrupp

Om du vill skydda labbet ytterligare lägger du till en nätverkssäkerhetsgrupp (NSG) i det virtuella nätverk som de virtuella labbdatorerna använder enligt beskrivningen i Skapa, ändra eller ta bort en nätverkssäkerhetsgrupp. En NSG kan till exempel endast tillåta trafik som först går via gatewayen för att nå de virtuella labbdatorerna. Regelkällan är IP-adressen för gatewaydatorn eller lastbalanseraren för gatewaygruppen.

Skärmbild av en regel för nätverkssäkerhetsgrupp.

Nästa steg