Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 die RDP-Ports (Remote Desktop Protocol) der virtuellen Maschinen nicht dem Internet ausgesetzt werden. 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 Connect>Connect via RDP auf der Übersicht-Seite einer Lab-VM auswählen, wird eine computerspezifische RDP-Datei erstellt, und Benutzer können die Datei öffnen, um eine Verbindung mit dem virtuellen Computer 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>Über RDP verbinden 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}/getRdpFileContentsWenn das Lab mit einem Gateway konfiguriert ist, wird die Aktion
getRdpFileContentsaufgerufen, um ein Authentifizierungstokenhttps://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}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. In der Regel ist dieser Port 3389, aber wenn die Lab-VM eine freigegebene IP-Adresse verwendet, ist die Portnummer unterschiedlich.
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 Funktionstastengeheimnisses ist das Gateway-Tokengeheimnis, das auf der Laboreinstellungsseite des Labors angegeben ist.
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 die Aktivierung von Gatewaycomputern, Azure-Funktionen und Netzwerken für die Arbeit mit DevTest Labs RDP-Zugriffs- 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. Wildcard-TLS/SSL-Zertifikate 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 Anwendungs-Routing-Anforderungsmodul für Internet Information Services (IIS) verwenden, um Anforderungen an die Funktions-App umzuleitenhttps://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}.
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
Die Verwendung der Beispielvorlagen gibt Ihre Vereinbarung mit den Lizenzbedingungen für das Remotedesktopgateway an.
Befolgen Sie zum Einrichten einer Remotedesktopgateway-Beispielfarm die folgenden Schritte.
Erstellen Sie ein Signaturzertifikat.
Führen Sie Create-SigningCertificate.ps1 aus. Notieren Sie den Fingerabdruck, das Kennwort und die Base64-Codierung des neuen Zertifikats, das später verwendet werden soll.
Rufen Sie ein TLS/SSL-Zertifikat ab. Der dem TLS/SSL-Zertifikat zugeordnete FQDN muss für eine Domäne gelten, die Sie steuern.
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 aus https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gateway, und füllen Sie die folgenden Parameter aus:
Parameter Erforderlich? Beschreibung adminUsernameErforderlich Administratorbenutzername für die Gatewaycomputer. adminPasswordErforderlich Kennwort für das Administratorkonto für die Gatewaycomputer. instanceCountAnzahl der zu erstellenden Gatewaycomputer. alwaysOnGibt an, ob die erstellte Azure Functions-App aktiviert bleiben soll. Das Beibehalten der App verhindert Verzögerungen, wenn Benutzer zum ersten Mal versuchen, eine Verbindung mit ihren Lab-VMs herzustellen, hat aber Kostenauswirkungen. tokenLifetimeDie Länge der Zeit im HH:MM:SS-Format, in der das erstellte Token gültig ist. sslCertificateErforderlich Die Base64-Codierung des TLS-/SSL-Zertifikats für den Gatewaycomputer. sslCertificatePasswordErforderlich Das Kennwort des TLS-/SSL-Zertifikats für den Gatewaycomputer. sslCertificateThumbprintErforderlich Der Zertifikatfingerabdruck für die Identifizierung im lokalen Zertifikatspeicher des Signaturzertifikats. signCertificateErforderlich Die Base64-Codierung des Signaturzertifikats für den Gatewaycomputer. signCertificatePasswordErforderlich Das Kennwort für das Signaturzertifikat für den Gatewaycomputer. signCertificateThumbprintErforderlich Der Zertifikatfingerabdruck für die Identifizierung im lokalen Zertifikatspeicher des Signaturzertifikats. _artifactsLocationErforderlich 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 austauschbare Authentifizierungsmodul des Remotedesktopgateways, das den Namen RDGatewayFedAuth.msi tragen sollte und Tokenauthentifizierung unterstützt. _artifactsLocationSasTokenErforderlich Das SAS-Token (Shared Access Signature) für den Zugriff auf Artefakte, wenn es sich bei _artifactsLocationum 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.blobausfü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
gatewayFQDNundgatewayIPin der Ausgabe der Vorlagenbereitstellung. Speichern Sie auch den Wert des Schlüssels für die neu erstellte Funktion, die Sie auf der Registerkarte "App-Einstellungen" der Funktions-App finden können.Konfigurieren Sie DNS so, dass der FQDN des TLS/SSL-Zertifikats an die IP-Adresse
gatewayIPweiterleitet.
Nachdem Sie die Remotedesktopgatewayfarm erstellt und DNS aktualisiert haben, konfigurieren Sie 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 Funktionsschlüsselwert 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 unter 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 Gateway-Hostname und das geheime Gateway-Token-Geheimnis eines Labors zu konfigurieren, damit die Token-Authentifizierung mit dem oder den Gateway-Computern verwendet werden kann:
Wählen Sie auf der Seite "Übersicht " des Labors im linken Bereich die Option "Konfiguration und Richtlinien" aus.
Wählen Sie auf der Seite "Konfiguration und Richtlinien " im Abschnitt "Einstellungen " im linken Bereich die Option " Lab-Einstellungen" aus.
Im Abschnitt "Remotedesktopverbindung" gehen Sie wie folgt vor:
Geben Sie im Feld Gatewayhostname den FQDN oder die IP-Adresse des Gatewaycomputers oder der Farm für Remotedesktopdienste ein. Dieser Wert muss dem FQDN des auf dem Gatewaycomputer verwendeten TLS-/SSL-Zertifikats entsprechen.
Geben Sie im Feld "Geheimer Gatewaytoken " den geheimen Namen ein, den Sie zuvor aufgezeichnet 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
Wenn Sie "Speichern" auswählen, wird angegeben, dass Sie den Lizenzbedingungen des Remotedesktopgateways zustimmen.
Nachdem Sie sowohl das Gateway als auch das Labor konfiguriert haben, enthält die RDP-Verbindungsdatei, die erstellt wurde, wenn der Lab-Benutzer "Verbinden" auswählt, die erforderlichen Informationen, um eine Verbindung mit dem Gateway herzustellen und die Tokenauthentifizierung zu verwenden.
Automatisieren der Labkonfiguration
PowerShell: Set-DevTestLabGateway.ps1 ist ein PowerShell-Beispielskript, mit dem Gatewayhost- und Gatewaytokenschlüsseleinstellungen automatisch konfiguriert werden.
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
Um das Lab weiter zu schützen, fügen Sie dem virtuellen Netzwerk eine Netzwerksicherheitsgruppe (Network Security Group, NSG) hinzu, die von den virtuellen Laborcomputern verwendet wird, wie in "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.


