Configuración y uso de una puerta de enlace de Escritorio remoto en Azure DevTest Labs
En este artículo, se describe cómo configurar y usar una puerta de enlace para el acceso seguro a escritorio remoto a máquinas virtuales de laboratorio en Azure DevTest Labs. El uso de una puerta de enlace mejora la seguridad porque no se exponen los puertos del protocolo de escritorio remoto (RDP) de las máquinas virtuales a Internet. Esta solución de puerta de enlace de Escritorio remoto también admite la autenticación de token.
DevTest Labs proporciona una ubicación central para que los usuarios del laboratorio puedan ver y conectarse a sus máquinas virtuales. Al seleccionar Conectar>RDP en la página Información general de una máquina virtual de laboratorio, se crea un archivo RDP específico del equipo y los usuarios pueden abrir el archivo para conectarse a la máquina virtual.
Con una puerta de enlace de Escritorio remoto, los usuarios del laboratorio se conectan a sus máquinas virtuales mediante una máquina de puerta de enlace. Los usuarios se autentican directamente en la máquina de puerta de enlace y pueden usar credenciales proporcionadas por la empresa en máquinas unidas a un dominio. La autenticación de token proporciona una capa adicional de seguridad.
Otra manera de acceder de forma segura a las máquinas virtuales de laboratorio sin exponer puertos o direcciones IP es mediante un explorador con Azure Bastion. Para más información, consulte Habilitación de la conexión de explorador a máquinas virtuales de DevTest Labs con Azure Bastion.
Arquitectura
En el diagrama siguiente se muestra cómo una puerta de enlace de Escritorio remoto aplica la autenticación de token y se conecta a las máquinas virtuales de DevTest Labs.
Al seleccionar Conectar>RDP desde una máquina virtual de laboratorio, se invoca el comando REST getRdpFileContents:
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DevTestLab/labs/{labName}/virtualmachines/{name}/getRdpFileContents
Cuando el laboratorio tiene configurada una puerta de enlace, la acción
getRdpFileContents
invocahttps://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}
para solicitar un token de autenticación.{gateway-hostname}
o{lb-uri}
para un equilibrador de carga, es el nombre de host de puerta de enlace especificado en la página Configuración del laboratorio.{lab-machine-name}
es el nombre de la máquina virtual a la que se va a conectar.{port-number}
es el puerto que se utilizará para la conexión. Normalmente, este puerto es el 3389, pero si la máquina virtual de laboratorio usa una dirección IP compartida, el número de puerto es diferente.
La puerta de enlace de Escritorio remoto usa
https://{function-app-uri}/api/host/{lab-machine-name}/port/{port-number}
para diferir la llamada a una aplicación de funciones de Azure Functions.Nota:
El encabezado de solicitud incluye automáticamente la clave de función, obtenida del almacén de claves del laboratorio. El nombre del secreto de clave de función es el valor de Secreto de token de puerta de enlace, en la página Configuración del laboratorio.
La función de Azure genera y devuelve un token para la autenticación basada en certificados en la máquina de puerta de enlace.
La acción
getRdpFileContents
devuelve el archivo RDP completo, incluyendo el token de autenticación.
Cuando un programa de conexión RDP abre el archivo RDP, la puerta de enlace de Escritorio remoto autentica el token y la conexión se reenvía a la máquina virtual de laboratorio.
Nota
No todos los programas de conexión de RDP admiten la autenticación de token.
Importante
La función de Azure establece una fecha de expiración para el token de autenticación. Un usuario debe conectarse a la máquina virtual antes de que expire el token.
Requisitos de configuración
Hay algunos requisitos de configuración para que las máquinas de puerta de enlace, Azure Functions y las redes funcionen con el acceso RDP de DevTest Labs y la autenticación de token:
Requisitos de la máquina de puerta de enlace
La máquina de puerta de enlace debe tener la siguiente configuración:
Un certificado TLS/SSL para controlar el tráfico HTTPS. El certificado debe coincidir con el nombre de dominio completo (FQDN) de la máquina de puerta de enlace si solo hay una, o con el equilibrador de carga de la granja de servidores de puerta de enlace. Los certificados TLS/SSL de comodín no funcionan.
Un certificado de firma. Puede crear un certificado de firma mediante el script Create-SigningCertificate.ps1 de PowerShell.
Un módulo de autenticación acoplable que admita la autenticación de token. Un ejemplo es RDGatewayFedAuth.msi, que se incluye con las imágenes de System Center Virtual Machine Manager (VMM).
La capacidad de enviar las solicitudes a
https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}
.
Puede usar el módulo de solicitud de enrutamiento de la aplicación para Internet Information Server (IIS) para redirigir las solicitudes https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}
a la aplicación de función.
Requisitos de Azure Functions
Una aplicación de funciones de Azure Functions controla las solicitudes con el formato https://{function-app-uri}/app/host/{lab-machine-name}/port/{port-number}
y crea y devuelve el token de autenticación basado en el certificado de firma de la máquina de puerta de enlace. {function-app-uri}
es el URI que se usa para acceder a la función.
El encabezado de solicitud debe pasar la clave de función, que obtiene del almacén de claves del laboratorio.
Para obtener una función de ejemplo, vea CreateToken.cs.
Requisitos de red
El DNS para el FQDN asociado con el certificado TLS/SSL instalado en las máquinas de puerta de enlace debe dirigir el tráfico a la máquina de puerta de enlace o al equilibrador de carga de la granja de servidores de máquina de puerta de enlace.
Si en la máquina del laboratorio se usan direcciones IP privadas, debe haber una ruta de acceso de red desde la máquina de puerta de enlace a la máquina del laboratorio. Las dos máquinas deben compartir la misma red virtual o usar redes virtuales emparejadas.
Crear una puerta de enlace de Escritorio remoto
El repositorio de GitHub de Azure DevTest Labs cuenta con plantillas de Azure Resource Manager (ARM) que ayudan a configurar la autenticación de token de DevTest Labs y los recursos de puerta de enlace de Escritorio remoto. Hay plantillas para la creación de máquinas de puerta de enlace, la configuración del laboratorio y una aplicación de funciones.
Nota:
Al usar las plantillas de ejemplo, acepta los términos de licencia de la puerta de enlace de Escritorio remoto.
Siga estos pasos para configurar un ejemplo de granja de servidores de puerta de enlace de Escritorio remoto.
Cree un certificado de firma.
Ejecute Create-SigningCertificate.ps1. Registre la huella digital, la contraseña y la codificación Base64 del certificado que se ha creado para usarlas más adelante.
Obtenga un certificado TLS/SSL. El nombre de dominio completo asociado con el certificado TLS/SSL debe ser para un dominio que controla.
Registre la contraseña, la huella digital y la codificación Base64 para que el certificado TLS/SSL lo use más adelante.
Para obtener la huella digital, use los comandos siguientes de PowerShell.
$cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate; $cer.Import('path-to-certificate'); $hash = $cer.GetCertHashString()
Para obtener la codificación Base64, use el comando de PowerShell siguiente:
[System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes('path-to-certificate'))
Descargue todos los archivos de https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gateway. Copie todos los archivos y RDGatewayFedAuth.msi en un contenedor de blobs en una cuenta de almacenamiento.
Abra azuredeploy.json desde https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gateway y rellene los parámetros siguientes:
Parámetro Obligatorio Descripción adminUsername
Obligatorio Nombre de usuario administrador para las máquinas de puerta de enlace. adminPassword
Obligatorio Contraseña de la cuenta de administrador para las máquinas de puerta de enlace. instanceCount
Número de máquinas de puerta de enlace que se van a crear. alwaysOn
Indica si la aplicación de Azure Functions que se ha creado se debe mantener en un estado activo o no. Mantener la aplicación activa evita retrasos cuando los usuarios intentan conectarse por primera vez a su máquina virtual de laboratorio, pero tiene implicaciones de costo. tokenLifetime
El período de tiempo, en formato HH:MM:SS, durante el cual el token creado es válido. sslCertificate
Obligatorio La codificación Base64 del certificado TLS/SSL para la máquina de puerta de enlace. sslCertificatePassword
Obligatorio La contraseña del certificado TLS/SSL para la máquina de puerta de enlace. sslCertificateThumbprint
Obligatorio La huella digital del certificado para la identificación en el almacén de certificados local del certificado de firma. signCertificate
Obligatorio La codificación Base64 del certificado de firma para la máquina de puerta de enlace. signCertificatePassword
Obligatorio La contraseña del certificado de firma para la máquina de puerta de enlace. signCertificateThumbprint
Obligatorio La huella digital del certificado para la identificación en el almacén de certificados local del certificado de firma. _artifactsLocation
Obligatorio Ubicación del URI para buscar artefactos que requiere esta plantilla. Este valor debe ser un identificador URI completo, no una ruta de acceso relativa. Los artefactos incluyen otras plantillas, scripts de PowerShell y el módulo autenticación conectable de puerta de enlace de Escritorio remoto, que se espera que se llame RDGatewayFedAuth.msi y que admite la autenticación mediante token. _artifactsLocationSasToken
Obligatorio Token de firma de acceso compartido (SAS) para acceder a los artefactos, si _artifactsLocation
es una cuenta de almacenamiento de Azure.Ejecute el siguiente comando de la CLI de Azure para implementar 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}"
Obtenga el
{storage-account-endpoint}
mediante la ejecución deaz storage account show --name {storage-account-name} --query primaryEndpoints.blob
.Obtenga el
{sas-token}
mediante la ejecución deaz storage container generate-sas --name {container-name} --account-name {storage-account-name} --https-only –permissions drlw –expiry {utc-expiration-date}
.{storage-account-name}
es el nombre de la cuenta de almacenamiento que contiene los archivos que se han cargado.{container-name}
es el contenedor de{storage-account-name}
que incluye los archivos cargados.{utc-expiration-date}
es la fecha, en formato UTC, en la que caduca el token de SAS. Ya no se podrá usar para acceder a la cuenta de almacenamiento.
Registre los valores de
gatewayFQDN
ygatewayIP
desde la salida de la implementación de la plantilla. Guarde también el valor de la clave de la función recién creada, que puede encontrar en la pestaña Configuración de la aplicación de la aplicación de funciones.Configure el DNS para que el FQDN del certificado TLS/SSL dirija a la dirección IP
gatewayIP
.
Después de crear la granja de puertas de enlace de Escritorio remoto y actualizar el DNS, configure Azure DevTest Labs para que use la puerta de enlace.
Configuración del laboratorio para usar la autenticación de token
Antes de actualizar la configuración del laboratorio, guarde la clave de la función de token de autenticación en el almacén de claves del laboratorio. Puede obtener el valor de clave de función en la página Claves de función de la función en Azure Portal. Para buscar el identificador del almacén de claves del laboratorio, ejecute el siguiente comando de la CLI de Azure:
az resource show --name {lab-name} --resource-type 'Microsoft.DevTestLab/labs' --resource-group {lab-resource-group-name} --query properties.vaultName
Para obtener más información sobre cómo guardar un secreto en un almacén de claves, vea Incorporación de un secreto a Key Vault. Registre el nombre del secreto para usarlo más adelante. Este valor no es la propia clave de función, sino el nombre del secreto del almacén de claves que contiene la clave de función.
Para configurar el valor de Nombre de host de puerta de enlace y Secreto de token de puerta de enlace de un laboratorio para usar la autenticación de token con las máquinas de puerta de enlace, siga estos pasos:
En la página Información general del laboratorio, seleccione Configuración y directivas en el panel de navegación izquierdo.
En la página Configuración y directivas, seleccione Configuración del laboratorio en la sección Configuración del panel de navegación izquierdo.
En la sección Escritorio remoto:
En el campo Nombre de host de puerta de enlace, escriba el FQDN o la dirección IP de la granja o máquina de puerta de enlace de los servicios de Escritorio remoto. Este valor debe coincidir con el FQDN del certificado TLS/SSL que se usa en las máquinas de puerta de enlace.
En Token de puerta de enlace, escriba el nombre del secreto que registró anteriormente. Este valor no es la propia clave de función, sino el nombre del secreto del almacén de claves que contiene la clave de función.
Seleccione Guardar.
Nota
Al hacer clic en Guardar, acepta los términos de licencia de la puerta de enlace de Escritorio remoto.
Una vez configurada la puerta de enlace y el laboratorio, el archivo de conexión RDP que se crea cuando el usuario del laboratorio selecciona Conectar incluye la información necesaria para conectarse a la puerta de enlace y usar la autenticación de token.
Automatizar la configuración del laboratorio
PowerShell: Set-DevTestLabGateway.ps1 es un script de PowerShell de ejemplo para establecer automáticamente la configuración del nombre de host de puerta de enlace y del secreto del token de puerta de enlace.
ARM: use las plantillas de ARM de ejemplo de puerta de enlace en el repositorio de GitHub de Azure DevTest Labs para crear o actualizar laboratorios con la configuración del nombre de host de puerta de enlace y del secreto de token de puerta de enlace.
Configuración de un grupo de seguridad de red
Para proteger aún más el laboratorio, agregue un grupo de seguridad de red (NSG) a la red virtual que usan las máquinas virtuales del laboratorio, como se describe en Creación, cambio o eliminación de un grupo de seguridad de red. Por ejemplo, un grupo de seguridad de red podría permitir que solo el tráfico que pasa primero a través de la puerta de enlace llegue a las máquinas virtuales del laboratorio. El origen de la regla es la dirección IP de la máquina de puerta de enlace o del equilibrador de carga de la granja de puertas de enlace.