Partilhar via


Configurar e usar um gateway de área de trabalho remota no Azure DevTest Labs

Este artigo descreve como configurar e usar um gateway para acesso seguro à área de trabalho remota a máquinas virtuais (VMs) de laboratório no Azure DevTest Labs. O uso de um gateway melhora a segurança porque você não expõe as portas RDP (protocolo de área de trabalho remota) das VMs à Internet. Esta solução de gateway de área de trabalho remota também suporta autenticação de token.

O DevTest Labs fornece um local central para os usuários do laboratório visualizarem e se conectarem às suas VMs. Selecionar Conectar>RDP na página Visão geral de uma VM de laboratório cria um arquivo RDP específico da máquina e os usuários podem abrir o arquivo para se conectar à VM.

Com um gateway de área de trabalho remota, os usuários de laboratório se conectam às suas VMs por meio de uma máquina de gateway. Os usuários se autenticam diretamente na máquina do gateway e podem usar credenciais fornecidas pela empresa em máquinas associadas ao domínio. A autenticação de token fornece uma camada extra de segurança.

Outra maneira de acessar com segurança VMs de laboratório sem expor portas ou endereços IP é por meio de um navegador com o Azure Bastion. Para obter mais informações, consulte Habilitar conexão do navegador com VMs do DevTest Labs com o Azure Bastion.

Arquitetura

O diagrama a seguir mostra como um gateway de área de trabalho remota aplica autenticação de token e se conecta a VMs do DevTest Labs.

Diagrama que mostra a arquitetura do gateway de área de trabalho remota.

  1. Selecionar Conectar>RDP de uma VM de laboratório invoca o comando REST getRdpFileContent:

    POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DevTestLab/labs/{labName}/virtualmachines/{name}/getRdpFileContents
    
  2. Quando o laboratório tem um gateway configurado, a getRdpFileContents ação é chamada para solicitar um token de https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number} autenticação.

    • {gateway-hostname}, ou {lb-uri} para um balanceador de carga, é o nome do host do gateway especificado na página Configurações do laboratório para o laboratório.
    • {lab-machine-name} é o nome da VM à qual se conectar.
    • {port-number} é a porta a ser usada para a conexão. Normalmente, essa porta é 3389, mas se a VM de laboratório usa um IP compartilhado, o número da porta é diferente.
  3. O gateway de área de trabalho remota usa https://{function-app-uri}/api/host/{lab-machine-name}/port/{port-number} para adiar a chamada para um aplicativo de função do Azure Functions.

    Nota

    O cabeçalho da solicitação inclui automaticamente a tecla de função, que ele obtém do cofre de chaves do laboratório. O nome do segredo da chave de função é o segredo do token do Gateway na página de configurações do laboratório do laboratório.

  4. A função do Azure gera e retorna um token para autenticação baseada em certificado na máquina de gateway.

  5. A getRdpFileContents ação retorna o arquivo RDP completo, incluindo o token de autenticação.

Quando um programa de conexão RDP abre o arquivo RDP, o gateway de área de trabalho remota autentica o token e a conexão encaminha para a VM de laboratório.

Nota

Nem todos os programas de conexão RDP suportam autenticação de token.

Importante

A função do Azure define uma data de expiração para o token de autenticação. Um usuário deve se conectar à VM antes que o token expire.

Requisitos de configuração

Há alguns requisitos de configuração para máquinas de gateway, Azure Functions e redes para trabalhar com acesso RDP do DevTest Labs e autenticação de token:

Requisitos da máquina de gateway

A máquina de gateway deve ter a seguinte configuração:

  • Um certificado TLS/SSL para lidar com o tráfego HTTPS. O certificado deve corresponder ao FQDN (nome de domínio totalmente qualificado) da máquina de gateway se houver apenas uma máquina ou ao balanceador de carga de um farm de gateway. Os certificados TLS/SSL curinga não funcionam.

  • Um certificado de assinatura. Você pode criar um certificado de assinatura usando o script PowerShell Create-SigningCertificate.ps1 .

  • Um módulo de autenticação conectável que suporta autenticação de token. Um exemplo é o RDGatewayFedAuth.msi, que vem com imagens do System Center Virtual Machine Manager (VMM).

  • A capacidade de lidar com solicitações para https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}.

Você pode usar o módulo de solicitação de roteamento de aplicativos para o Internet Information Server (IIS) para redirecionar https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number} solicitações para o aplicativo de função.

Requisitos do Azure Functions

Um aplicativo de função do Azure Functions lida com solicitações com o https://{function-app-uri}/app/host/{lab-machine-name}/port/{port-number} formato e cria e retorna o token de autenticação com base no certificado de assinatura da máquina gateway. O {function-app-uri} é o URI usado para acessar a função.

O cabeçalho da solicitação deve passar a tecla de função, que ele obtém do cofre de chaves do laboratório.

Para uma função de exemplo, consulte CreateToken.cs.

Requisitos de rede

  • O DNS do FQDN associado ao certificado TLS/SSL da máquina gateway deve direcionar o tráfego para a máquina gateway ou para o balanceador de carga de um farm de máquinas gateway.

  • Se a VM de laboratório usar um endereço IP privado, deve haver um caminho de rede da máquina de gateway para a máquina de laboratório. As duas máquinas devem compartilhar a mesma rede virtual ou usar redes virtuais emparelhadas.

Criar um gateway de área de trabalho remota

O repositório GitHub do Azure DevTest Labs tem modelos do Azure Resource Manager (ARM) que ajudam a configurar a autenticação de token do DevTest Labs e os recursos do gateway de área de trabalho remota. Há modelos para criação de máquinas de gateway, configurações de laboratório e um aplicativo de função.

Nota

Ao usar os modelos de exemplo, você concorda com os termos de licença do Gateway de Área de Trabalho Remota.

Siga estas etapas para configurar um farm de gateway de área de trabalho remota de exemplo.

  1. Crie um certificado de assinatura.

    Execute Create-SigningCertificate.ps1. Registre a impressão digital, a senha e a codificação Base64 do certificado criado para usar mais tarde.

  2. Obtenha um certificado TLS/SSL. O FQDN associado ao certificado TLS/SSL deve ser para um domínio que você controla.

  3. Registre a senha, a impressão digital e a codificação Base64 para o certificado TLS/SSL usar mais tarde.

    • Para obter a impressão digital, use os seguintes comandos do PowerShell:

      $cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate;
      $cer.Import('path-to-certificate');
      $hash = $cer.GetCertHashString()
      
    • Para obter a codificação Base64, use o seguinte comando do PowerShell:

      [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes('path-to-certificate'))
      
  4. Baixe todos os arquivos do https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gateway. Copie todos os arquivos e RDGatewayFedAuth.msi para um contêiner de blob em uma conta de armazenamento.

  5. Abra azuredeploy.json de https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gatewaye preencha os seguintes parâmetros:

    Parâmetro Necessário Description
    adminUsername Obrigatório Nome de usuário do administrador para as máquinas de gateway.
    adminPassword Obrigatório Senha para a conta de administrador para as máquinas de gateway.
    instanceCount Número de máquinas de gateway a criar.
    alwaysOn Se deve manter o aplicativo Azure Functions criado aquecido (ativado) ou não. Manter o aplicativo ligado evita atrasos quando os usuários tentam se conectar pela primeira vez às suas VMs de laboratório, mas tem implicações de custo.
    tokenLifetime O período de tempo no formato HH:MM:SS em que o token criado é válido.
    sslCertificate Obrigatório A codificação Base64 do certificado TLS/SSL para a máquina gateway.
    sslCertificatePassword Obrigatório A senha do certificado TLS/SSL para a máquina gateway.
    sslCertificateThumbprint Obrigatório A impressão digital do certificado para identificação no armazenamento de certificados local do certificado de assinatura.
    signCertificate Obrigatório A codificação Base64 para o certificado de assinatura para a máquina de gateway.
    signCertificatePassword Obrigatório A senha para o certificado de assinatura para a máquina gateway.
    signCertificateThumbprint Obrigatório A impressão digital do certificado para identificação no armazenamento de certificados local do certificado de assinatura.
    _artifactsLocation Obrigatório O local do URI para localizar artefatos que esse modelo exige. Esse valor deve ser um URI totalmente qualificado, não um caminho relativo. Os artefatos incluem outros modelos, scripts do PowerShell e o módulo de Autenticação Conectável do Gateway de Área de Trabalho Remota, que deve ser nomeado RDGatewayFedAuth.msi que ofereça suporte à autenticação de token.
    _artifactsLocationSasToken Obrigatório O token de assinatura de acesso compartilhado (SAS) para acessar artefatos, se for uma conta de armazenamento do _artifactsLocation Azure.
  6. Execute o seguinte comando da CLI do Azure para implantar 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}"
    
    • Obtenha o {storage-account-endpoint} executando az storage account show --name {storage-account-name} --query primaryEndpoints.blob.

    • Obtenha o {sas-token} executando az storage container generate-sas --name {container-name} --account-name {storage-account-name} --https-only –permissions drlw –expiry {utc-expiration-date}.

      • {storage-account-name} é o nome da conta de armazenamento que contém os ficheiros carregados.
      • {container-name} é o contêiner no {storage-account-name} que contém os arquivos que você carregou.
      • {utc-expiration-date} é a data, em UTC, em que o token SAS expira e não pode mais ser usado para acessar a conta de armazenamento.
  7. Registre os valores para gatewayFQDN e gatewayIP a partir da saída de implantação do modelo. Salve também o valor da chave para a função recém-criada, que você pode encontrar na guia Configurações do aplicativo de função.

  8. Configure o DNS para que o FQDN do certificado TLS/SSL direcione para o gatewayIP endereço IP.

Depois de criar o farm de gateway de área de trabalho remota e atualizar o DNS, configure o Azure DevTest Labs para usar o gateway.

Configurar o laboratório para usar a autenticação de token

Antes de atualizar as configurações do laboratório, armazene a chave para a função de token de autenticação no cofre de chaves do laboratório. Você pode obter o valor da chave de função na página Teclas de Função da função no portal do Azure. Para localizar a ID do cofre de chaves do laboratório, execute o seguinte comando da CLI do Azure:

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

Saiba como guardar um segredo num cofre de chaves no artigo Adicionar um segredo ao Cofre de Chaves. Registre o nome secreto para usar mais tarde. Esse valor não é a chave de função em si, mas o nome do segredo do cofre de chaves que contém a chave de função.

Para configurar o nome de host do gateway de um laboratório e o segredo do token do gateway para usar a autenticação de token com a(s) máquina(s) do gateway, siga estas etapas:

  1. Na página Visão geral do laboratório, selecione Configuração e políticas na navegação à esquerda.

  2. Na página Configuração e políticas, selecione Configurações de laboratório na seção Configurações da navegação à esquerda.

  3. Na secção Ambiente de trabalho remoto:

    • Para o campo Nome do host do gateway, insira o FQDN ou o endereço IP da máquina ou farm do gateway de serviços de área de trabalho remota. Esse valor deve corresponder ao FQDN do certificado TLS/SSL usado em máquinas gateway.

    • Em Gateway token, insira o nome secreto que você registrou anteriormente. Esse valor não é a chave de função em si, mas o nome do segredo do cofre de chaves que contém a chave de função.

    Captura de ecrã das opções do Ambiente de trabalho remoto nas definições do laboratório.

  4. Selecione Guardar.

    Nota

    Ao selecionar Salvar, você concorda com os termos de licença do Gateway de Área de Trabalho Remota.

Depois de configurar o gateway e o laboratório, o arquivo de conexão RDP criado quando o usuário do laboratório seleciona Conectar inclui as informações necessárias para se conectar ao gateway e usar a autenticação de token.

Automatize a configuração do laboratório

  • PowerShell: Set-DevTestLabGateway.ps1 é um exemplo de script do PowerShell para definir automaticamente o nome do host do Gateway e as configurações secretas do token do Gateway.

  • ARM: Use os modelos ARM de exemplo de Gateway no repositório GitHub do Azure DevTest Labs para criar ou atualizar laboratórios com o nome do host do Gateway e as configurações secretas do token do Gateway.

Configurar um grupo de segurança de rede

Para proteger ainda mais o laboratório, adicione um NSG (grupo de segurança de rede) à rede virtual que as VMs do laboratório usam, conforme descrito em Criar, alterar ou excluir um grupo de segurança de rede. Por exemplo, um NSG pode permitir que apenas o tráfego que passa primeiro pelo gateway alcance VMs de laboratório. A origem da regra é o endereço IP da máquina de gateway ou do balanceador de carga do farm de gateways.

Captura de ecrã de uma regra de grupo de segurança de rede.

Próximos passos