Partilhar via


Configurar e utilizar um gateway de ambiente de trabalho remoto no Azure DevTest Labs

Este artigo descreve como configurar e utilizar um gateway para acesso seguro ao ambiente de trabalho remoto a máquinas virtuais de laboratório (VMs) no Azure DevTest Labs. A utilização de um gateway melhora a segurança porque não expõe as portas rdp (remote desktop protocol) das VMs à Internet. Esta solução de gateway de ambiente de trabalho remoto também suporta a autenticação de tokens.

O DevTest Labs fornece um local central para os utilizadores de laboratório verem e ligarem-se às VMs. Selecionar Ligar>RDP na página Descrição Geral de uma VM de laboratório cria um ficheiro RDP específico do computador e os utilizadores podem abrir o ficheiro para se ligarem à VM.

Com um gateway de ambiente de trabalho remoto, os utilizadores de laboratório ligam-se às VMs através de um computador de gateway. Os utilizadores autenticam-se diretamente no computador gateway e podem utilizar credenciais fornecidas pela empresa em máquinas associadas a um domínio. A autenticação de tokens fornece uma camada adicional de segurança.

Outra forma de aceder em segurança a VMs de laboratório sem expor portas ou endereços IP é através de um browser com o Azure Bastion. Para obter mais informações, veja Ativar a ligação do browser às VMs do DevTest Labs com o Azure Bastion.

Arquitetura

O diagrama seguinte mostra como um gateway de ambiente de trabalho remoto aplica a autenticação de tokens e se liga às VMs do DevTest Labs.

Diagrama que mostra a arquitetura do gateway de ambiente de trabalho remoto.

  1. Selecionar Ligar>RDP a partir de uma VM de laboratório invoca o comando REST getRdpFileContents :

    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 invoca https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number} para pedir um token de autenticação.

    • {gateway-hostname}ou {lb-uri} , para um balanceador de carga, é o nome do anfitrião do gateway especificado na página Definições do laboratório.
    • {lab-machine-name} é o nome da VM à qual se deve ligar.
    • {port-number} é a porta a utilizar para a ligação. Normalmente, esta porta é 3389, mas se a VM de laboratório utilizar um IP partilhado, o número da porta é diferente.
  3. O gateway de ambiente de trabalho remoto utiliza https://{function-app-uri}/api/host/{lab-machine-name}/port/{port-number} para adiar a chamada para uma aplicação de funções Funções do Azure.

    Nota

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

  4. A função do Azure gera e devolve um token para autenticação baseada em certificados no computador gateway.

  5. A getRdpFileContents ação devolve o ficheiro RDP completo, incluindo o token de autenticação.

Quando um programa de ligação RDP abre o ficheiro RDP, o gateway de ambiente de trabalho remoto autentica o token e a ligação é reencaminhada para a VM de laboratório.

Nota

Nem todos os programas de ligação RDP suportam a autenticação de tokens.

Importante

A função do Azure define uma data de expiração para o token de autenticação. Um utilizador tem de ligar à VM antes de o token expirar.

Requisitos de configuração

Existem alguns requisitos de configuração para máquinas de gateway, Funções do Azure e redes para trabalhar com o acesso rdP do DevTest Labs e a autenticação de tokens:

Requisitos do computador de gateway

O computador do gateway tem de ter a seguinte configuração:

  • Um certificado TLS/SSL para processar o tráfego HTTPS. O certificado tem de corresponder ao nome de domínio completamente qualificado (FQDN) do computador de gateway se existir apenas um computador ou o balanceador de carga de um farm de gateways. Os certificados TLS/SSL de wild card não funcionam.

  • Um certificado de assinatura. Pode criar um certificado de assinatura com o Create-SigningCertificate.ps1 script do PowerShell.

  • Um módulo de autenticação pluggable que suporta a autenticação de tokens. Um exemplo é RDGatewayFedAuth.msi, que inclui imagens de System Center Virtual Machine Manager (VMM).

  • A capacidade de processar pedidos para https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number}.

Pode utilizar o módulo Pedido de Encaminhamento de Aplicações para o Servidor de Informação Internet (IIS) para redirecionar https://{gateway-hostname}/api/host/{lab-machine-name}/port/{port-number} pedidos para a aplicação de funções.

Funções do Azure requisitos

Uma aplicação de funções Funções do Azure processa os pedidos com o https://{function-app-uri}/app/host/{lab-machine-name}/port/{port-number} formato e cria e devolve o token de autenticação com base no certificado de assinatura do computador gateway. É {function-app-uri} o URI utilizado para aceder à função.

O cabeçalho do pedido tem de passar a chave de função, que obtém do cofre de chaves do laboratório.

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

Requisitos da rede

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

  • Se a VM de laboratório utilizar um endereço IP privado, tem de existir um caminho de rede do computador de gateway para o computador de laboratório. As duas máquinas têm de partilhar a mesma rede virtual ou utilizar redes virtuais em modo de peering.

Criar um gateway de ambiente de trabalho remoto

O Azure DevTest Labs repositório do GitHub tem modelos do Azure Resource Manager (ARM) que ajudam a configurar a autenticação de tokens de DevTest Labs e recursos de gateway de ambiente de trabalho remoto. Existem modelos para criação de máquinas de gateway, definições de laboratório e uma aplicação de funções.

Nota

Ao utilizar os modelos de exemplo, concorda com os termos de licença do Gateway de Ambiente de Trabalho Remoto.

Siga estes passos para configurar um farm de gateways de ambiente de trabalho remoto de exemplo.

  1. Crie um certificado de assinatura.

    Execute Create-SigningCertificate.ps1. Grave o thumbprint, a palavra-passe e a codificação Base64 do certificado criado para utilizar mais tarde.

  2. Obtenha um certificado TLS/SSL. O FQDN associado ao certificado TLS/SSL tem de ser para um domínio que controla.

  3. Grave a codificação de palavra-passe, thumbprint e Base64 para o certificado TLS/SSL utilizar mais tarde.

    • Para obter o thumbprint, utilize 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, utilize o seguinte comando do PowerShell:

      [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes('path-to-certificate'))
      
  4. Transfira todos os ficheiros a partir de https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gateway. Copie todos os ficheiros e RDGatewayFedAuth.msi para um contentor de blobs numa conta de armazenamento.

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

    Parâmetro Necessário Descrição
    adminUsername Necessário Nome de utilizador do administrador para as máquinas de gateway.
    adminPassword Obrigatório Palavra-passe para a conta de administrador dos computadores de gateway.
    instanceCount Número de máquinas de gateway a criar.
    alwaysOn Quer mantenha a aplicação Funções do Azure criada aquecida (ativada) ou não. Manter a aplicação ativada evita atrasos quando os utilizadores tentam ligar-se pela primeira vez às VMs de laboratório, mas tem implicações de custos.
    tokenLifetime O período de tempo no formato HH:MM:SS que o token criado é válido.
    sslCertificate Obrigatório A codificação Base64 do certificado TLS/SSL para o computador de gateway.
    sslCertificatePassword Obrigatório A palavra-passe do certificado TLS/SSL do computador de gateway.
    sslCertificateThumbprint Obrigatório O thumbprint do certificado para identificação no arquivo de certificados local do certificado de assinatura.
    signCertificate Obrigatório A codificação Base64 para o certificado de assinatura do computador gateway.
    signCertificatePassword Obrigatório A palavra-passe do certificado de assinatura do computador de gateway.
    signCertificateThumbprint Obrigatório O thumbprint do certificado para identificação no arquivo de certificados local do certificado de assinatura.
    _artifactsLocation Obrigatório A localização do URI para localizar artefactos necessários para este modelo. Este valor tem de ser um URI completamente qualificado, não um caminho relativo. Os artefactos incluem outros modelos, scripts do PowerShell e o módulo Autenticação Pluggable do Gateway de Ambiente de Trabalho Remoto, que deverá ser nomeado RDGatewayFedAuth.msi que suporta a autenticação de tokens.
    _artifactsLocationSasToken Obrigatório O token de assinatura de acesso partilhado (SAS) para aceder a artefactos, se for uma conta de armazenamento do _artifactsLocation Azure.
  6. Execute o seguinte comando da CLI do 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}"
    
    • Obtenha o {storage-account-endpoint} ao executar az storage account show --name {storage-account-name} --query primaryEndpoints.blob.

    • Obtenha o {sas-token} ao executar 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 que carregou.
      • {container-name} é o contentor no {storage-account-name} que contém os ficheiros que carregou.
      • {utc-expiration-date} é a data, em UTC, em que o token de SAS expira e já não pode ser utilizado para aceder à conta de armazenamento.
  7. Registe os valores para gatewayFQDN e gatewayIP a partir da saída de implementação do modelo. Guarde também o valor da chave para a função recém-criada, que pode encontrar no separador Definições da aplicação de funções.

  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 gateways de ambiente de trabalho remoto e atualizar o DNS, configure Azure DevTest Labs para utilizar o gateway.

Configurar o laboratório para utilizar a autenticação de tokens

Antes de atualizar as definições do laboratório, armazene a chave para a função de token de autenticação no cofre de chaves do laboratório. Pode obter o valor da chave de função na página Teclas de Função na portal do Azure. Para localizar o 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 Key Vault. Grave o nome do segredo para utilizar mais tarde. Este 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 anfitrião do Gateway e o segredo do token de Gateway de um laboratório para utilizar a autenticação de tokens com as máquinas virtuais do gateway, siga estes passos:

  1. Na página Descrição Geral do laboratório, selecione Configuração e políticas no painel de navegação esquerdo.

  2. Na página Configuração e políticas , selecione Definições do laboratório na secção Definições do painel de navegação esquerdo.

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

    • Para o campo Nome de anfitrião do gateway , introduza o FQDN ou o endereço IP do computador ou farm do gateway de serviços de ambiente de trabalho remoto. Este valor tem de corresponder ao FQDN do certificado TLS/SSL utilizado nos computadores de gateway.

    • Para Token de gateway, introduza o nome do segredo que gravou anteriormente. Este 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ã a mostrar as opções do Ambiente de Trabalho Remoto nas definições do Laboratório.

  4. Selecione Guardar.

    Nota

    Ao selecionar Guardar, concorda com os termos de licença do Gateway de Ambiente de Trabalho Remoto.

Depois de configurar o gateway e o laboratório, o ficheiro de ligação RDP criado quando o utilizador do laboratório seleciona Ligar inclui as informações necessárias para ligar ao gateway e utilizar a autenticação de tokens.

Automatizar a configuração do laboratório

  • PowerShell: Set-DevTestLabGateway.ps1 é um script do PowerShell de exemplo para definir automaticamente o nome do anfitrião do gateway e as definições de segredo do token de gateway .

  • ARM: utilize os modelos arm de exemplo do Gateway no Azure DevTest Labs repositório do GitHub para criar ou atualizar laboratórios com as definições de segredo do token de gateway e do nome do gateway.

Configurar um grupo de segurança de rede

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

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

Passos seguintes