Konfigurieren und Verwenden eines Remotedesktopgateways in Azure DevTest Labs
In diesem Artikel wird beschrieben, wie Sie ein Gateway für den sicheren Remotedesktopzugriff auf Lab-VMs in Azure DevTest Labs einrichten und verwenden. Die Verwendung eines Gateways verbessert die Sicherheit, da Sie die RDP-Ports (Remotedesktopprotokoll) der VMs nicht für das Internet verfügbar machen. Diese Remotedesktopgatewaylösung unterstützt auch Tokenauthentifizierung.
DevTest Labs ist ein zentraler Ort, an dem Lab-Benutzer ihre VMs anzeigen und eine Verbindung mit ihnen herstellen können. Wenn Sie Verbinden>RDP auf der Seite Übersicht einer Lab-VM auswählen, wird eine computerspezifische RDP-Datei erstellt, und Benutzer können die Datei öffnen, um eine Verbindung mit der VM herzustellen.
Mit einem Remotedesktopgateway stellen Lab-Benutzer über einen Gatewaycomputer eine Verbindung mit ihren VMs her. Benutzer authentifizieren sich direkt beim Gatewaycomputer und können vom Unternehmen bereitgestellte Anmeldeinformationen auf Computern verwenden, die in die Domäne eingebunden sind. Tokenauthentifizierung bietet eine zusätzliche Sicherheitsebene.
Eine weitere Möglichkeit, sicher auf Lab-VMs zuzugreifen, ohne Ports oder IP-Adressen verfügbar zu machen, ist ein Browser mit Azure Bastion. Weitere Informationen finden Sie unter Aktivieren der Browserverbindung zu DevTest Labs-VMs.
Aufbau
Die folgende Abbildung zeigt, wie ein Remotedesktopgateway Tokenauthentifizierung anwendet und eine Verbindung mit DevTest Labs-VMs herstellt.
Wenn Sie Verbinden>RDP von einer Lab-VM auswählen, wird der REST-Befehl getRdpFileContents aufgerufen:
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DevTestLab/labs/{labName}/virtualmachines/{name}/getRdpFileContents
Wenn für das Lab ein Gateway konfiguriert ist, ruft die
getRdpFileContents
-Aktionhttps://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}
auf, um ein Authentifizierungstoken anzufordern.{gateway-hostname}
(oder{lb-uri}
für einen Lastenausgleich) ist der Gatewayhostname, der auf der Seite Lab-Einstellungen für das Lab angegeben wird.{lab-machine-name}
ist der Name der VM, mit der eine Verbindung hergestellt werden soll.{port-number}
ist der Port, der für die Verbindung verwendet werden soll. Normalerweise ist dies Port 3389, aber wenn die Lab-VM eine freigegebene IP-Adresse verwendet, unterscheidet sich die Portnummer.
Das Remotedesktopgateway verwendet
https://{function-app-uri}/api/host/{lab-machine-name}/port/{port-number}
, um den Aufruf an eine Azure Functions-Funktions-App zu übergeben.Hinweis
Der Anforderungsheader enthält automatisch den Funktionsschlüssel, der aus dem Schlüsseltresor des Labs abgerufen wird. Der Name des Funktionsschlüsselgeheimnisses ist das Gatewaytokengeheimnis auf der Seite Lab-Einstellungen des Labs.
Die Azure-Funktion generiert ein Token für zertifikatbasierte Authentifizierung auf dem Gatewaycomputer und gibt es zurück.
Die
getRdpFileContents
-Aktion gibt die vollständige RDP-Datei einschließlich des Authentifizierungstokens zurück.
Wenn ein RDP-Verbindungsprogramm die RDP-Datei öffnet, authentifiziert das Remotedesktopgateway das Token, und die Verbindung wird an die Lab-VM weitergeleitet.
Hinweis
Nicht alle RDP-Verbindungsprogramme unterstützen Tokenauthentifizierung.
Wichtig
Die Azure-Funktion legt ein Ablaufdatum für das Authentifizierungstoken fest. Ein Benutzer muss eine Verbindung mit der VM herstellen, bevor das Token abläuft.
Konfigurationsanforderungen
Es gibt einige Konfigurationsanforderungen für Gatewaycomputer, Azure Functions und Netzwerke für das Arbeiten mit RDP-Zugriff von DevTest Labs und Tokenauthentifizierung:
Anforderungen an den Gatewaycomputer
Der Gatewaycomputer muss über die folgende Konfiguration verfügen:
Ein TLS/SSL-Zertifikat zur Verarbeitung von HTTPS-Datenverkehr. Das Zertifikat muss mit dem vollqualifizierten Domänennamen (FQDN) des Gatewaycomputers übereinstimmen, wenn nur ein Computer vorhanden ist, oder mit dem Lastenausgleich einer Gatewayfarm. TLS-/SSL-Platzhalterzertifikate funktionieren nicht.
Ein Signaturzertifikat. Sie können ein Signaturzertifikat mithilfe des PowerShell-Skripts Create-SigningCertificate.ps1 erstellen.
Ein austauschbares Authentifizierungsmodul, das Tokenauthentifizierung unterstützt. Ein Beispiel ist RRDGatewayFedAuth.msi. Dieses Modul ist in Images von System Center Virtual Machine Manager (VMM) enthalten.
Die Fähigkeit, Anforderungen an zu
https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}
verarbeiten.
Sie können das Modul „Anwendungsroutinganforderung“ für Internetinformationsdienste (IIS) verwenden, um https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}
-Anforderungen an die Funktions-App umzuleiten.
Azure Functions-Anforderungen
Eine Azure Functions-Funktions-App verarbeitet Anforderungen im Format https://{function-app-uri}/app/host/{lab-machine-name}/port/{port-number}
, erstellt das Authentifizierungstoken basierend auf dem Signaturzertifikat des Gatewaycomputers und gibt es zurück. {function-app-uri}
ist der URI für den Zugriff auf die Funktion.
Der Anforderungsheader muss den Funktionsschlüssel übergeben, der aus dem Schlüsseltresor des Labs abgerufen wird.
Eine Beispielfunktion finden Sie unter CreateToken.cs.
Netzwerkanforderungen
Das DNS für den FQDN, der mit dem TLS/SSL-Zertifikat des Gatewaycomputers verbunden ist, muss den Datenverkehr an den Gatewaycomputer oder an den Lastenausgleich einer Gatewaycomputerfarm weiterleiten.
Wenn die Lab-VM eine private IP-Adresse verwendet, muss ein Netzwerkpfad vom Gatewaycomputer zum Lab-Computer vorhanden sein. Die beiden Computer müssen entweder dasselbe virtuelle Netzwerk gemeinsam nutzen oder virtuelle Netzwerke mit Peering verwenden.
Erstellen eines Remotedesktopgateways
Das Azure DevTest Labs GitHub-Repository verfügt über ARM-Vorlagen (Azure Resource Manager), mit denen DevTest Labs-Tokenauthentifizierung und Remotedesktop-Gatewayressourcen eingerichtet werden können. Es gibt Vorlagen für die Erstellung von Gatewaycomputern, Lab-Einstellungen und eine Funktions-App.
Hinweis
Durch die Verwendung der Beispielvorlagen stimmen Sie den Lizenzbedingungen für das Remotedesktopgateway zu.
Befolgen Sie zum Einrichten einer Remotedesktopgateway-Beispielfarm die folgenden Schritte.
Erstellen Sie ein Signaturzertifikat.
Führen Sie Create-SigningCertificate.ps1 aus. Notieren Sie sich den Fingerabdruck, das Kennwort und die Base64-Codierung des erstellten Zertifikats zur späteren Verwendung.
Rufen Sie ein TLS/SSL-Zertifikat ab. Der FQDN, der dem TLS-/SSL-Zertifikat zugeordnet ist, muss für eine von Ihnen gesteuerte Domäne gelten.
Notieren Sie sich das Kennwort, den Fingerabdruck und die Base64-Codierung des TLS/SSL-Zertifikats zur späteren Verwendung.
Verwenden Sie zum Abrufen des Fingerabdrucks die folgenden PowerShell-Befehle:
$cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate; $cer.Import('path-to-certificate'); $hash = $cer.GetCertHashString()
Um die Base64-Codierung abzurufen, verwenden Sie den folgenden PowerShell-Befehl:
[System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes('path-to-certificate'))
Laden Sie alle Dateien von https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gateway herunter. Kopieren Sie alle Dateien und RDGatewayFedAuth.msi in einem Blobcontainer in einem Speicherkonto.
Öffnen Sie azuredeploy.json unter https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gateway, und geben Sie die folgenden Parameter ein:
Parameter Erforderlich BESCHREIBUNG adminUsername
Erforderlich Administratorbenutzername für die Gatewaycomputer. adminPassword
Erforderlich Kennwort für das Administratorkonto für die Gatewaycomputer. instanceCount
Anzahl der zu erstellenden Gatewaycomputer. alwaysOn
Gibt an, ob die erstellte Azure Functions-App in einem betriebsbereiten Zustand („warm“) bleiben soll. Wenn Sie die App aktiv lassen, vermeiden Sie Verzögerungen, wenn Benutzer zum ersten Mal versuchen, eine Verbindung mit ihren Lab-VMs herzustellen, aber dies hat Auswirkungen auf die Kosten. tokenLifetime
Die Zeitspanne im Format HH:MM:SS, während der das erstellte Token gültig ist. sslCertificate
Erforderlich Die Base64-Codierung des TLS-/SSL-Zertifikats für den Gatewaycomputer. sslCertificatePassword
Erforderlich Das Kennwort des TLS-/SSL-Zertifikats für den Gatewaycomputer. sslCertificateThumbprint
Erforderlich Der Zertifikatfingerabdruck für die Identifizierung im lokalen Zertifikatspeicher des Signaturzertifikats. signCertificate
Erforderlich Die Base64-Codierung des Signaturzertifikats für den Gatewaycomputer. signCertificatePassword
Erforderlich Das Kennwort für das Signaturzertifikat für den Gatewaycomputer. signCertificateThumbprint
Erforderlich Der Zertifikatfingerabdruck für die Identifizierung im lokalen Zertifikatspeicher des Signaturzertifikats. _artifactsLocation
Erforderlich Der URI-Speicherort zum Suchen nach Artefakten, die für diese Vorlage erforderlich sind. Dieser Wert muss ein vollqualifizierter URI sein (kein relativer Pfad). Zu den Artefakten gehören weitere Vorlagen, PowerShell-Skripts und das Authentifizierungsmodul-Plug-In des Remotedesktopgateways, das den Namen RDGatewayFedAuth.msi tragen sollte und die Tokenauthentifizierung unterstützt. _artifactsLocationSasToken
Erforderlich Das SAS-Token (Shared Access Signature) für den Zugriff auf Artefakte, wenn es sich bei _artifactsLocation
um ein Azure-Speicherkonto handelt.Führen Sie den folgenden Azure CLI-Befehl aus, um azuredeploy.json bereitzustellen:
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}"
Rufen Sie
{storage-account-endpoint}
ab, indem Sieaz storage account show --name {storage-account-name} --query primaryEndpoints.blob
ausführen.Rufen Sie
{sas-token}
ab, indem Sieaz storage container generate-sas --name {container-name} --account-name {storage-account-name} --https-only –permissions drlw –expiry {utc-expiration-date}
ausführen.{storage-account-name}
ist der Name des Speicherkontos mit den Dateien, die Sie hochgeladen haben.{container-name}
ist der Container in{storage-account-name}
, der die Dateien enthält, die Sie hochgeladen haben.{utc-expiration-date}
ist das Datum (in UTC), zu dem das SAS-Token abläuft und nicht mehr für den Zugriff auf das Speicherkonto verwendet werden kann.
Notieren Sie die Werte für
gatewayFQDN
undgatewayIP
in der Ausgabe der Vorlagenbereitstellung. Speichern Sie außerdem den Wert des Schlüssels für die neu erstellte Funktion, den Sie auf der Registerkarte Anwendungseinstellungen der Funktions-App finden.Konfigurieren Sie DNS so, dass der FQDN des TLS/SSL-Zertifikats an die IP-Adresse
gatewayIP
weiterleitet.
Nachdem Sie die Remotedesktop-Gatewayfarm erstellt und DNS aktualisiert haben, konfigurieren Sie Azure DevTest Labs für die Verwendung des Gateways.
Konfigurieren des Labs für die Verwendung der Tokenauthentifizierung
Bevor Sie die Lab-Einstellungen aktualisieren, speichern Sie den Schlüssel für die Authentifizierungstokenfunktion im Schlüsseltresor des Labs. Sie können den Wert des Funktionsschlüssels auf der Seite Funktionsschlüssel der Funktion im Azure-Portal abrufen. Um die ID des Schlüsseltresors des Labs zu ermitteln, führen Sie den folgenden Azure CLI-Befehl aus:
az resource show --name {lab-name} --resource-type 'Microsoft.DevTestLab/labs' --resource-group {lab-resource-group-name} --query properties.vaultName
Erfahren Sie aus dem Artikel Hinzufügen eines Geheimnisses zu Key Vault, wie Sie ein Geheimnis in einem Schlüsseltresor speichern. Notieren Sie sich den Geheimnisnamen auf zum späteren Gebrauch. Dieser Wert ist nicht der Funktionsschlüssel selbst, sondern der Name des Schlüsseltresorgeheimnisses, das den Funktionsschlüssel enthält.
Führen Sie die folgenden Schritte aus, um den Gatewayhostnamen und das Gatewaytokengeheimnis eines Labs für die Verwendung von Tokenauthentifizierung mit den Gatewaycomputern zu konfigurieren:
Wählen Sie auf der Lab-Seite Übersicht im linken Navigationsbereich die Option Konfiguration und Richtlinien aus.
Wählen Sie auf der Seite Konfiguration und Richtlinien im linken Navigationsbereich die Option Lab-Einstellungen im Abschnitt Einstellungen aus.
Gehen Sie im Abschnitt Remotedesktop folgendermaßen vor:
Geben Sie im Feld Gatewayhostname den FQDN oder die IP-Adresse des Gatewaycomputers oder der Farm für die Remotedesktopdienste ein. Dieser Wert muss dem FQDN des auf dem Gatewaycomputer verwendeten TLS-/SSL-Zertifikats entsprechen.
Geben Sie unter Gatewaytoken den Geheimnisnamen ein, den Sie sich zuvor notiert haben. Dieser Wert ist nicht der Funktionsschlüssel selbst, sondern der Name des Schlüsseltresorgeheimnisses, das den Funktionsschlüssel enthält.
Wählen Sie Speichern aus.
Hinweis
Durch Klicken auf Speichern stimmen Sie den Lizenzbedingungen des Remotedesktopgateways zu.
Nachdem Sie sowohl das Gateway als auch das Lab konfiguriert haben, enthält die RDP-Verbindungsdatei, die beim Auswählen von Verbinden durch einen Lab-Benutzer erstellt wird, die erforderlichen Informationen, um eine Verbindung mit dem Gateway herzustellen und Tokenauthentifizierung zu verwenden.
Automatisieren der Labkonfiguration
PowerShell: Set-DevTestLabGateway.ps1 ist ein PowerShell-Beispielskript zum automatischen Festlegen der Einstellungen Gatewayhostname und Gatewaytokengeheimnis.
Verwenden Sie die ARM-Beispielvorlagen für Gateways im Azure DevTest Labs GitHub-Repository, um Labs mit den Einstellungen für Gatewayhostname und Gatewaytokengeheimnis zu erstellen oder zu aktualisieren.
Konfigurieren einer Netzwerksicherheitsgruppe
Fügen Sie zum weiteren Schutz des Labs dem virtuellen Netzwerk, das die Lab-VMs verwenden, eine Netzwerksicherheitsgruppe (NSG) hinzu, wie unter Erstellen, Ändern oder Löschen einer Netzwerksicherheitsgruppe beschrieben. Beispielsweise könnte eine NSG nur Datenverkehr zulassen, der zunächst das Gateway durchläuft, um Lab-VMs zu erreichen. Die Regelquelle ist die IP-Adresse des Gatewaycomputers oder des Lastausgleichs für die Gatewayfarm.