Настройка и использование шлюза удаленных рабочих столов в Azure DevTest Labs

В этой статье описывается, как настроить и использовать шлюз для безопасного доступа удаленного рабочего стола к виртуальным машинам лаборатории в Azure DevTest Labs. Использование шлюза повышает безопасность, так как вы не подвергаете порты удаленного рабочего стола (RDP) виртуальных машин воздействию Интернета. Это решение шлюза удаленных рабочих столов также поддерживает проверку подлинности на основе маркеров.

DevTest Labs предоставляет пользователям лаборатории возможность просматривать виртуальные машины и подключаться к ним. При выборе Подключение>RDP на странице Обзор виртуальной машины лаборатории создается файл RDP для конкретного компьютера и пользователи могут открыть файл для подключения к виртуальной машине.

При использовании шлюза удаленных рабочих столов пользователи лаборатории подключаются к своим виртуальным машинам через шлюз. Пользователи проходят проверку подлинности непосредственно на компьютере шлюза и могут использовать предоставленные компанией учетные данные на компьютерах, присоединенных к домену. Проверка подлинности с помощью маркеров обеспечивает дополнительный уровень безопасности.

Другой способ безопасного доступа к виртуальным машинам лаборатории без предоставления доступа к портам или IP-адресам осуществляется через браузер с Бастионом Azure. Дополнительные сведения см. в статье Включение подключения браузера к виртуальным машинам DevTest Labs с помощью бастиона Azure.

Архитектура

На следующей схеме показано, как шлюз удаленных рабочих столов применяет аутентификацию по маркерам и подключается к виртуальным машинам DevTest Labs.

Схема, показывающая архитектуру шлюза удаленных рабочих столов.

  1. При выборе Подключение>RDP из виртуальной машины лаборатории вызывается команда REST getRdpFileContents.

    POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DevTestLab/labs/{labName}/virtualmachines/{name}/getRdpFileContents
    
  2. Если в лаборатории настроен шлюз, действие getRdpFileContents вызывает https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number} для запроса маркера проверки подлинности.

    • {gateway-hostname} или {lb-uri} для балансировщика нагрузки — это имя узла шлюза, указанное на странице Параметры лаборатории для лаборатории.
    • {lab-machine-name} — это имя виртуальной машины, к которой необходимо подключиться.
    • {port-number} — это порт, используемый для соединения. Обычно это порт 3389, но если виртуальная машина лаборатории использует общий IP-адрес, номер порта будет другим.
  3. Шлюз удаленных рабочих столов использует https://{function-app-uri}/api/host/{lab-machine-name}/port/{port-number} для откладывания вызова приложения функции Azure.

    Примечание

    Заголовок запроса автоматически включает ключ функции, который она получает из хранилища ключей лаборатории. Имя секрета ключа функции — это секрет маркера шлюза на странице Параметры лаборатории лаборатории.

  4. Функция Azure создает и возвращает маркер для проверки подлинности на основе сертификата на компьютере шлюза.

  5. Действие getRdpFileContents возвращает полный файл RDP, включая маркер проверки подлинности.

Когда программа подключения RDP открывает файл RDP, шлюз удаленных рабочих столов проверяет подлинность маркера, а подключение перенаправляется на виртуальную машину лаборатории.

Примечание

Обратите внимание, что не все программы подключения по протоколу RDP поддерживают проверку подлинности через маркеры.

Важно!

Функция Azure задает дату окончания срока действия маркера проверки подлинности. Пользователь должен подключиться к виртуальной машине до истечения срока действия маркера.

Требования настройки

Существуют некоторые требования к конфигурации для компьютеров шлюзов, функций Azure и сетей для работы с DevTest Labs и проверкой подлинности с помощью маркеров.

Проверка требований к шлюзу

Компьютер шлюза должен иметь следующую конфигурацию:

  • Сертификат TLS / SSL для управления трафиком HTTPS. Сертификат должен соответствовать полному доменному имени (FQDN) компьютера шлюза, если имеется только одна машина, или балансировка нагрузки для фермы шлюзов. Сертификаты TLS/SSL с подстановочными знаками не работают.

  • Сертификат для подписи. Сертификат для подписи можно создать с помощью сценария PowerShell Create-SigningCertificate.ps1.

  • Подключаемый модуль проверки подлинности , поддерживающий аутентификацию по маркеру. Примером может быть RDGatewayFedAuth.msi, который поставляется с образами System Center Virtual Machine Manager (VMM).

  • Возможность обработки запросов к https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}.

Для перенаправления запросов в приложение-функцию можно использовать Модуль запросов маршрутизации приложений для Internet Information Server (IIS)https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}.

Требования функций Azure

Приложение-функция Функции Azure обрабатывает запросы в формате https://{function-app-uri}/app/host/{lab-machine-name}/port/{port-number}, а также создает и возвращает маркер проверки подлинности на основе сертификата подписи компьютера шлюза. {function-app-uri} — это универсальный код ресурса (URI), используемый для доступа к функции.

Заголовок запроса должен передать ключ функции, который она получает из хранилища ключей лаборатории.

Пример функции см. в разделе CreateToken.cs.

Требования к сети

  • DNS для полного доменного имени, связанного с сертификатом компьютера шлюза TLS/SSL, должен направлять трафик на машину шлюза или в подсистему балансировки нагрузки фермы машин шлюзов.

  • Если виртуальная машина лаборатории использует частный IP-адрес, должен существовать сетевой путь от компьютера шлюза к компьютеру лаборатории. Два компьютера должны использовать одну и ту же виртуальную сеть или одноранговые виртуальные сети.

Создание шлюза удаленных рабочих столов

Репозиторий GitHub Azure DevTest Labs содержит шаблоны Azure Resource Manager (ARM), которые помогают настроить проверку подлинности маркеров DevTest Labs и шлюза удаленных рабочих столов. Существуют шаблоны для создания компьютера шлюза, параметров лаборатории и приложения-функция.

Примечание

Используя образцы шаблонов, вы принимаете Условия лицензии шлюза удаленных рабочих столов.

Выполните следующие действия, чтобы настроить образец для фермы шлюзов удаленных рабочих столов.

  1. Создание сертификата для подписи.

    Запустите Create-SigningCertificate.ps1. Запишите отпечаток, пароль и кодировку Base64 для созданного сертификата для дальнейшего использования.

  2. Получите сертификат TLS/SSL. Полное доменное имя, связанное с сертификатом TLS / SSL, должно соответствовать домену, которым вы управляете.

  3. Запишите пароль, отпечаток и кодировку Base64 для сертификата TLS / SSL для дальнейшего использования.

    • Чтобы получить отпечаток, выполните следующие команды.

      $cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate;
      $cer.Import('path-to-certificate');
      $hash = $cer.GetCertHashString()
      
    • Чтобы получить кодировку Base64, выполните следующую команду PowerShell.

      [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes('path-to-certificate'))
      
  4. Скачайте все файлы из https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gateway. Скопируйте все файлы из RDGatewayFedAuth.msi в контейнер больших двоичных объектов в учетной записи хранилища.

  5. Откройте azuredeploy.json из https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gateway и заполните следующие параметры:

    Параметр Обязательно Описание
    adminUsername Обязательный Имя пользователя администратора для машин шлюзов.
    adminPassword Обязательно Пароль для учетной записи администратора машин шлюзов.
    instanceCount Количество создаваемых компьютеров шлюза.
    alwaysOn Следует ли оставить созданное Функции Azure приложение подогретым (включено) или нет. Сохранение приложения в сети позволяет избежать задержек при первой попытке пользователей подключиться к виртуальным машинам лаборатории, но это повлияет на затраты.
    tokenLifetime Период времени в формате HH:MM:SS, в течение времени, когда созданный маркер является допустимым.
    sslCertificate Обязательно Сертификат TLS / SSL машины шлюза в кодировке Base64.
    sslCertificatePassword Обязательно Пароль сертификата TLS / SSL для машины шлюза.
    sslCertificateThumbprint Обязательно Отпечаток сертификата для идентификации в локальном хранилище сертификатов подписи.
    signCertificate Обязательно Сертификат подписи в кодировке Base64 для машины шлюза.
    signCertificatePassword Обязательно Пароль сертификата подписи для машины шлюза.
    signCertificateThumbprint Обязательно Отпечаток сертификата для идентификации в локальном хранилище сертификатов подписи.
    _artifactsLocation Обязательно Расположение URI для поиска артефактов, необходимых для этого шаблона. Это значение должно быть полным URI, а не относительным путем. Артефакты включают другие шаблоны, скрипты PowerShell и подключаемый модуль проверки подлинности шлюза удаленных рабочих столов, который должен называться RDGatewayFedAuth.msi , поддерживающий проверку подлинности на основе маркеров.
    _artifactsLocationSasToken Обязательно Маркер подписанного URL-адреса (SAS) для доступа к артефактам, если _artifactsLocation является учетной записью хранения Azure.
  6. Выполните следующую команду Azure CLI, чтобы развернуть файл 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}"
    
    • Получите {storage-account-endpoint}, выполнив az storage account show --name {storage-account-name} --query primaryEndpoints.blob.

    • Получите {sas-token}, выполнив az storage container generate-sas --name {container-name} --account-name {storage-account-name} --https-only –permissions drlw –expiry {utc-expiration-date}.

      • {storage-account-name} — имя учетной записи хранилища, где хранятся отправленные вами файлы.
      • {container-name} — контейнер в {storage-account-name}, который содержит отправленные файлы.
      • {utc-expiration-date} — это дата в формате UTC, когда истекает срок действия маркера SAS, который больше не может использоваться для доступа к учетной записи хранения.
  7. Запишите значения для gatewayFQDN и gatewayIP из выходных данных развертывания шаблона. Также сохраните значение ключа для вновь созданной функции, которую можно найти на вкладке Параметры приложения в приложении-функции.

  8. Настройте DNS таким образом, чтобы полное доменное имя сертификата TLS / SSL направлялось на IP-адрес gatewayIP.

После создания фермы шлюза удаленных рабочих столов и обновления DNS настройте Azure DevTest Labs для использования шлюза.

Настройка тестовой службы для использования проверки подлинности через токены

Перед обновлением параметров лаборатории сохраните ключ для функции маркера проверки подлинности в хранилище ключей лаборатории. Значение ключа функции можно получить на странице Функциональные ключи функции в портал Azure. Чтобы найти идентификатор хранилища ключей тестовой службы, выполните следующую команду Azure CLI:

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

Узнайте, как сохранить секрет в хранилище ключей, в статье Добавление секрета в Key Vault. Запишите имя секрета для дальнейшего использования. Это значение является не ключом функции, а именем секрета в хранилище ключей, где содержится ключ функции.

Чтобы настроить имя узла шлюза и секрет маркера шлюза для использования проверки подлинности через маркеры с компьютерами шлюза, выполните следующие действия.

  1. На странице Обзор в области навигации слева выберите Конфигурация и политики.

  2. На странице Конфигурация и политики выберите Параметры лаборатории из раздела Параметры в левой области навигации.

  3. В разделе Удаленный рабочий стол:

    • В поле Имя узла шлюза введите полное доменное имя или IP-адрес компьютера шлюза служб удаленных рабочих столов или фермы. Это значение должно совпадать с полным доменным именем сертификата TLS/SSL, используемого на машинах шлюзов.

    • В поле Маркер шлюза введите имя секрета, записанное ранее. Это значение является не ключом функции, а именем секрета в хранилище ключей, где содержится ключ функции.

    Снимок экрана: параметры удаленного рабочего стола в параметрах лаборатории.

  4. Щелкните Сохранить.

    Примечание

    Нажимая кнопку Сохранить, вы принимаете Условия лицензии шлюза удаленных рабочих столов.

После настройки шлюза и лаборатории файл подключения RDP, создаваемый при выборе Подключение, включает в себя необходимые сведения для подключения к шлюзу и использования проверки подлинности с помощью маркеров.

Автоматизация настройки лаборатории

  • PowerShell: Set-DevTestLabGateway.ps1 — это пример скрипта PowerShell для автоматической настройки имени узла шлюза и параметров секрета маркера шлюза .

  • ARM. Используйте примеры шаблонов ARM шлюза в репозитории Azure DevTest Labs GitHub для создания или обновления лабораторий с использованием параметров имени узла шлюза и секрета маркера шлюза.

Настройка группы безопасности сети

Чтобы дополнительно защитить лабораторию, добавьте группу безопасности сети (NSG) в виртуальную сеть, используемую виртуальными машинами лаборатории, как описано в разделе Создание, изменение или удаление группы безопасности сети. Например, NSG может разрешить только трафик, который сначала проходит через шлюз для доступа к виртуальным машинам лаборатории. Источник правила — это IP-адрес компьютера шлюза или подсистемы балансировки нагрузки для фермы шлюзов.

Снимок экрана: правило группы безопасности сети.

Дальнейшие действия