Konfigurowanie i używanie bramy pulpitu zdalnego w usłudze Azure DevTest Labs
W tym artykule opisano sposób konfigurowania i używania bramy do bezpiecznego dostępu pulpitu zdalnego do maszyn wirtualnych laboratorium w usłudze Azure DevTest Labs. Użycie bramy zwiększa bezpieczeństwo, ponieważ nie uwidaczniasz portów protokołu RDP (Remote Desktop Protocol) maszyn wirtualnych z Internetem. To rozwiązanie bramy usług pulpitu zdalnego obsługuje również uwierzytelnianie tokenów.
Usługa DevTest Labs zapewnia centralne miejsce dla użytkowników laboratorium w celu wyświetlania maszyn wirtualnych i łączenia się z nimi. Wybranie pozycji Połącz>połączenie RDP na stronie Przegląd maszyny wirtualnej laboratorium powoduje utworzenie pliku RDP specyficznego dla maszyny, a użytkownicy mogą otworzyć plik w celu nawiązania połączenia z maszyną wirtualną.
W przypadku bramy usług pulpitu zdalnego użytkownicy laboratorium łączą się ze swoimi maszynami wirtualnymi za pośrednictwem maszyny bramy. Użytkownicy uwierzytelniają się bezpośrednio na maszynie bramy i mogą używać poświadczeń dostarczonych przez firmę na maszynach przyłączonych do domeny. Uwierzytelnianie tokenem zapewnia dodatkową warstwę zabezpieczeń.
Innym sposobem bezpiecznego uzyskiwania dostępu do maszyn wirtualnych laboratorium bez uwidaczniania portów lub adresów IP jest przeglądarka z usługą Azure Bastion. Aby uzyskać więcej informacji, zobacz Włączanie połączenia przeglądarki z maszynami wirtualnymi usługi DevTest Labs za pomocą usługi Azure Bastion.
Architektura
Na poniższym diagramie pokazano, jak brama usług pulpitu zdalnego stosuje uwierzytelnianie tokenu i łączy się z maszynami wirtualnymi usługi DevTest Labs.
Wybranie pozycji Połącz>protokół RDP z maszyny wirtualnej laboratorium wywołuje polecenie getRdpFileContents REST:
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DevTestLab/labs/{labName}/virtualmachines/{name}/getRdpFileContents
Gdy laboratorium ma skonfigurowaną bramę,
getRdpFileContents
akcja wywołujehttps://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}
żądanie tokenu uwierzytelniania.{gateway-hostname}
, lub{lb-uri}
dla modułu równoważenia obciążenia, to nazwa hosta bramy określona na stronie Ustawienia laboratorium dla laboratorium.{lab-machine-name}
to nazwa maszyny wirtualnej do nawiązania połączenia.{port-number}
jest portem używanym dla połączenia. Zazwyczaj ten port to 3389, ale jeśli maszyna wirtualna laboratorium używa udostępnionego adresu IP, numer portu jest inny.
Brama usług pulpitu zdalnego używa
https://{function-app-uri}/api/host/{lab-machine-name}/port/{port-number}
metody do odroczenia wywołania do aplikacji funkcji usługi Azure Functions.Uwaga
Nagłówek żądania automatycznie zawiera klucz funkcji, który jest pobierany z magazynu kluczy laboratorium. Nazwa wpisu tajnego klucza funkcji to wpis tajny tokenu bramy na stronie ustawień laboratorium.
Funkcja platformy Azure generuje i zwraca token na potrzeby uwierzytelniania opartego na certyfikatach na maszynie bramy.
Akcja
getRdpFileContents
zwraca pełny plik RDP, w tym token uwierzytelniania.
Gdy program połączenia RDP otworzy plik RDP, brama usług pulpitu zdalnego uwierzytelnia token i przekazuje połączenie do maszyny wirtualnej laboratorium.
Uwaga
Nie wszystkie programy połączeń RDP obsługują uwierzytelnianie tokenu.
Ważne
Funkcja platformy Azure ustawia datę wygaśnięcia tokenu uwierzytelniania. Użytkownik musi nawiązać połączenie z maszyną wirtualną przed wygaśnięciem tokenu.
Wymagania dotyczące konfiguracji
Istnieją pewne wymagania dotyczące konfiguracji maszyn bramy, usługi Azure Functions i sieci do pracy z usługą DevTest Labs z dostępem RDP i uwierzytelnianiem tokenu:
Wymagania dotyczące maszyny bramy
Maszyna bramy musi mieć następującą konfigurację:
Certyfikat TLS/SSL do obsługi ruchu HTTPS. Certyfikat musi być zgodny z w pełni kwalifikowaną nazwą domeny (FQDN) maszyny bramy, jeśli istnieje tylko jedna maszyna lub moduł równoważenia obciążenia farmy bramy. Certyfikaty TLS/SSL z symbolami wieloznaczne nie działają.
Certyfikat podpisywania. Certyfikat podpisywania można utworzyć przy użyciu skryptu Create-SigningCertificate.ps1 programu PowerShell.
Podłączany moduł uwierzytelniania obsługujący uwierzytelnianie tokenów. Przykładem jest RDGatewayFedAuth.msi, który jest dostarczany z obrazami programu System Center Virtual Machine Manager (VMM ).
Możliwość obsługi żądań do
https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}
.
Moduł żądania routingu aplikacji dla internetowego serwera informacyjnego (IIS) umożliwia przekierowywanie https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}
żądań do aplikacji funkcji.
Wymagania dotyczące usługi Azure Functions
Aplikacja funkcji usługi Azure Functions obsługuje żądania w https://{function-app-uri}/app/host/{lab-machine-name}/port/{port-number}
formacie i tworzy i zwraca token uwierzytelniania na podstawie certyfikatu podpisywania maszyny bramy. To {function-app-uri}
identyfikator URI używany do uzyskiwania dostępu do funkcji.
Nagłówek żądania musi przekazać klucz funkcji, który jest pobierany z magazynu kluczy laboratorium.
Aby zapoznać się z przykładową funkcją, zobacz CreateToken.cs.
Wymagania dotyczące sieci
Dns dla nazwy FQDN skojarzonej z certyfikatem TLS/SSL maszyny bramy musi kierować ruch do maszyny bramy lub do modułu równoważenia obciążenia farmy maszyn bramy.
Jeśli maszyna wirtualna laboratorium używa prywatnego adresu IP, musi istnieć ścieżka sieciowa z maszyny bramy do maszyny laboratoryjnej. Obie maszyny muszą współużytkować tę samą sieć wirtualną lub używać równorzędnych sieci wirtualnych.
Tworzenie bramy usług pulpitu zdalnego
Repozytorium GitHub usługi Azure DevTest Labs zawiera szablony usługi Azure Resource Manager (ARM), które ułatwiają konfigurowanie uwierzytelniania tokenów usługi DevTest Labs i zasobów bramy usług pulpitu zdalnego. Istnieją szablony tworzenia maszyny bramy, ustawień laboratorium i aplikacji funkcji.
Uwaga
Korzystając z przykładowych szablonów, zgadzasz się na postanowienia licencyjne bramy usług pulpitu zdalnego.
Wykonaj następujące kroki, aby skonfigurować przykładową farmę bram pulpitu zdalnego.
Utwórz certyfikat podpisywania.
Uruchom polecenie Create-SigningCertificate.ps1. Zarejestruj odcisk palca, hasło i kodowanie Base64 utworzonego certyfikatu do późniejszego użycia.
Uzyskiwanie certyfikatu TLS/SSL. Nazwa FQDN skojarzona z certyfikatem TLS/SSL musi być dla domeny, którą kontrolujesz.
Zarejestruj hasło, odcisk palca i kodowanie Base64 dla certyfikatu TLS/SSL do późniejszego użycia.
Aby uzyskać odcisk palca, użyj następujących poleceń programu PowerShell:
$cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate; $cer.Import('path-to-certificate'); $hash = $cer.GetCertHashString()
Aby uzyskać kodowanie Base64, użyj następującego polecenia programu PowerShell:
[System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes('path-to-certificate'))
Pobierz wszystkie pliki z pliku https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gateway. Skopiuj wszystkie pliki i RDGatewayFedAuth.msi do kontenera obiektów blob na koncie magazynu.
Otwórz azuredeploy.json z https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gatewaypliku i wypełnij następujące parametry:
Parametr Wymagania opis adminUsername
Wymagane Nazwa użytkownika administratora dla maszyn bramy. adminPassword
Wymagane Hasło dla konta administratora dla maszyn bramy. instanceCount
Liczba maszyn bramy do utworzenia. alwaysOn
Czy zachować utworzoną aplikację usługi Azure Functions rozgrzaną (włączoną), czy nie. Utrzymywanie włączonej aplikacji pozwala uniknąć opóźnień, gdy użytkownicy po raz pierwszy spróbują nawiązać połączenie z maszynami wirtualnymi laboratorium, ale mają wpływ na koszty. tokenLifetime
Długość czasu w formacie HH:MM:SS, który jest prawidłowy dla utworzonego tokenu. sslCertificate
Wymagane Kodowanie Base64 certyfikatu TLS/SSL dla maszyny bramy. sslCertificatePassword
Wymagane Hasło certyfikatu TLS/SSL dla maszyny bramy. sslCertificateThumbprint
Wymagane Odcisk palca certyfikatu do identyfikacji w lokalnym magazynie certyfikatów certyfikatu podpisywania. signCertificate
Wymagane Kodowanie Base64 dla certyfikatu podpisywania dla maszyny bramy. signCertificatePassword
Wymagane Hasło certyfikatu podpisywania dla maszyny bramy. signCertificateThumbprint
Wymagane Odcisk palca certyfikatu do identyfikacji w lokalnym magazynie certyfikatów certyfikatu podpisywania. _artifactsLocation
Wymagane Lokalizacja identyfikatora URI do znalezienia artefaktów, których wymaga ten szablon. Ta wartość musi być w pełni kwalifikowanym identyfikatorem URI, a nie ścieżką względną. Artefakty obejmują inne szablony, skrypty programu PowerShell i moduł uwierzytelniania podłączanego bramy usług pulpitu zdalnego, który powinien mieć nazwę RDGatewayFedAuth.msi , która obsługuje uwierzytelnianie tokenów. _artifactsLocationSasToken
Wymagane Token sygnatury dostępu współdzielonego (SAS) umożliwiający dostęp do artefaktów, jeśli _artifactsLocation
jest to konto usługi Azure Storage.Uruchom następujące polecenie interfejsu wiersza polecenia platformy Azure, aby wdrożyć 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}"
Pobierz element ,
{storage-account-endpoint}
uruchamiając polecenieaz storage account show --name {storage-account-name} --query primaryEndpoints.blob
.Pobierz element ,
{sas-token}
uruchamiając polecenieaz storage container generate-sas --name {container-name} --account-name {storage-account-name} --https-only –permissions drlw –expiry {utc-expiration-date}
.{storage-account-name}
to nazwa konta magazynu zawierającego przekazane pliki.{container-name}
to kontener w kontenerze{storage-account-name}
, w którym przechowywane są przekazane pliki.{utc-expiration-date}
to data w formacie UTC, gdy token SAS wygaśnie i nie może być już używany do uzyskiwania dostępu do konta magazynu.
Zapisz wartości dla i
gatewayFQDN
gatewayIP
z danych wyjściowych wdrożenia szablonu. Zapisz również wartość klucza dla nowo utworzonej funkcji, którą można znaleźć na karcie Ustawienia aplikacji funkcji.Skonfiguruj system DNS tak, aby nazwa FQDN certyfikatu TLS/SSL była kierowana do
gatewayIP
adresu IP.
Po utworzeniu farmy bramy usług pulpitu zdalnego i zaktualizowaniu systemu DNS skonfiguruj usługę Azure DevTest Labs do korzystania z bramy.
Konfigurowanie laboratorium do korzystania z uwierzytelniania tokenów
Przed zaktualizowaniem ustawień laboratorium zapisz klucz funkcji tokenu uwierzytelniania w magazynie kluczy laboratorium. Wartość klucza funkcji można uzyskać na stronie Klucze funkcji w witrynie Azure Portal. Aby znaleźć identyfikator magazynu kluczy laboratorium, uruchom następujące polecenie interfejsu wiersza polecenia platformy Azure:
az resource show --name {lab-name} --resource-type 'Microsoft.DevTestLab/labs' --resource-group {lab-resource-group-name} --query properties.vaultName
Dowiedz się, jak zapisać wpis tajny w magazynie kluczy w artykule Dodawanie wpisu tajnego do usługi Key Vault. Zarejestruj nazwę wpisu tajnego do późniejszego użycia. Ta wartość nie jest kluczem funkcji, ale nazwą wpisu tajnego magazynu kluczy, który zawiera klucz funkcji.
Aby skonfigurować nazwę hosta bramy laboratorium i klucz tajny tokenu bramy do używania uwierzytelniania tokenu z maszynami bramy, wykonaj następujące kroki:
Na stronie Przegląd laboratorium wybierz pozycję Konfiguracja i zasady w obszarze nawigacji po lewej stronie.
Na stronie Konfiguracja i zasady wybierz pozycję Ustawienia laboratorium w sekcji Ustawienia nawigacji po lewej stronie.
W sekcji Pulpit zdalny:
W polu Nazwa hosta bramy wprowadź nazwę FQDN lub adres IP maszyny lub farmy usług pulpitu zdalnego. Ta wartość musi być zgodna z nazwą FQDN certyfikatu TLS/SSL używanego na maszynach bramy.
W polu Token bramy wprowadź wcześniej zarejestrowaną nazwę wpisu tajnego. Ta wartość nie jest kluczem funkcji, ale nazwą wpisu tajnego magazynu kluczy, który zawiera klucz funkcji.
Wybierz pozycję Zapisz.
Uwaga
Wybierając pozycję Zapisz, zgadzasz się na postanowienia licencyjne bramy usług pulpitu zdalnego.
Po skonfigurowaniu bramy i laboratorium plik połączenia RDP utworzony, gdy użytkownik laboratorium wybierze pozycję Połącz , zawiera informacje niezbędne do nawiązania połączenia z bramą i użycia uwierzytelniania tokenu.
Automatyzowanie konfiguracji laboratorium
PowerShell: Set-DevTestLabGateway.ps1 to przykładowy skrypt programu PowerShell umożliwiający automatyczne ustawianie nazwy hosta bramy i ustawień klucza tajnego tokenu bramy.
ARM: użyj przykładowych szablonów usługi ARM bramy w repozytorium GitHub usługi Azure DevTest Labs, aby utworzyć lub zaktualizować laboratoria z nazwą hosta bramy i ustawieniami klucza tajnego tokenu bramy.
Konfigurowanie sieciowej grupy zabezpieczeń
Aby dodatkowo zabezpieczyć laboratorium, dodaj sieciową grupę zabezpieczeń do sieci wirtualnej, która jest używana przez maszyny wirtualne laboratorium zgodnie z opisem w temacie Tworzenie, zmienianie lub usuwanie sieciowej grupy zabezpieczeń. Na przykład sieciowa grupa zabezpieczeń może zezwalać na ruch, który najpierw przechodzi przez bramę, aby uzyskać dostęp do maszyn wirtualnych laboratorium. Źródłem reguły jest adres IP maszyny bramy lub modułu równoważenia obciążenia dla farmy bramy.