Share via


在 Azure DevTest Labs 中設定及使用遠端桌面閘道

本文說明如何在 Azure DevTest Labs 中設定及使用閘道,以安全地從遠端桌面存取實驗室虛擬機器 (VM)。 使用閘道可改善安全性,因為不需要向網際網路公開 VM 的遠端桌面通訊協定 (RDP) 連接埠。 此遠端桌面閘道解決方案也支援權杖驗證。

DevTest Labs 讓實驗室使用者集中一處來檢視和連線到其 VM。 在實驗室 VM 的 [概觀] 頁面上選取 [連線]>[RDP] 會建立機器特定的 RDP 檔案,使用者可以開啟此檔案來連線至 VM。

遠端桌面閘道可讓實驗室使用者透過閘道機器來連線至 VM。 使用者直接向閘道機器進行驗證,而且可以在已加入網域的電腦上使用公司提供的認證。 權杖驗證提供額外一層安全性。

想要安全地存取實驗室 VM 又不公開連接埠或 IP 位址,另一種方式是透過瀏覽器並使用 Azure Bastion。 如需詳細資訊,請參閱使用 Azure Bastion 啟用與 DevTest Labs VM 的瀏覽器連線

架構

下圖顯示遠端桌面閘道如何套用權杖驗證和連線至 DevTest Labs VM。

Diagram that shows the remote desktop gateway architecture.

  1. 從實驗室 VM 選取 [連線]>[RDP] 會叫用 getRdpFileContents REST 命令:

    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} 是要連線的 VM 名稱。
    • {port-number} 是用於連線的連接埠。 此連接埠通常是 3389,但如果實驗室 VM 使用共用 IP,連接埠號碼會不同。
  3. 遠端桌面閘道使用 https://{function-app-uri}/api/host/{lab-machine-name}/port/{port-number} 來延遲呼叫 Azure Functions 函數應用程式。

    注意

    要求標頭自動包含從實驗室的金鑰保存庫取得的函式金鑰。 在實驗室的 [實驗室設定] 頁面上,[閘道權杖祕密] 就是函式金鑰祕密的名稱。

  4. Azure 函式在閘道機器上產生並傳回憑證式驗證的權杖。

  5. getRdpFileContents 動作傳回完整的 RDP 檔案,包括驗證權杖。

當 RDP 連線程式開啟 RDP 檔案時,遠端桌面閘道會驗證權杖,而連線會轉向實驗室 VM。

注意

並非所有 RDP 連線程式都支援權杖驗證。

重要

Azure 函式會設定驗證權杖的到期日。 使用者必須在權杖到期之前連線到 VM。

組態需求

在閘道機器、Azure Functions 和網路使用 DevTest Labs RDP 存取和權杖驗證之前,有一些組態需求:

閘道機器需求

閘道機器必須具有下列設定:

  • 用來處理 HTTPS 流量的 TLS/SSL 憑證。 憑證必須符合閘道機器 (如果只有一部機器) 的完整網域名稱 (FQDN),或閘道伺服器陣列中負載平衡器的 FQDN。 萬用字元 TLS/SSL 憑證沒有作用。

  • 簽署憑證。 您可以使用 Create-SigningCertificate.ps1 PowerShell 指令碼來建立簽署憑證。

  • 支援權杖驗證的插入式驗證模組。 例如隨附 System Center Virtual Machine Manager (VMM) 映像的 RDGatewayFedAuth.msi

  • 能夠將要求轉向 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 Functions 需求

Azure Functions 函數應用程式以 https://{function-app-uri}/app/host/{lab-machine-name}/port/{port-number} 格式處理要求,並根據閘道機器的簽署憑證建立和傳回驗證權杖。 {function-app-uri} 是用來存取函式的 URI。

要求標頭必須傳遞從實驗室的金鑰保存庫取得的函式金鑰。

相關範例函式,請參閱 CreateToken.cs

網路需求

  • 閘道機器 TLS/SSL 憑證相關聯 FQDN 的 DNS 必須將流量導向閘道機器,或閘道機器伺服器陣列的負載平衡器。

  • 如果實驗室 VM 使用私人 IP 位址,則必須有從閘道機器到實驗室機器的網路路徑。 這兩部機器必須共用相同的虛擬網路,或使用對等互連的虛擬網路。

建立遠端桌面閘道

Azure DevTest Labs GitHub 存放庫中有 Azure Resource Manager (ARM) 範本,可協助設定 DevTest Labs 權杖驗證和遠端桌面閘道資源。 也有閘道機器建立、實驗室設定和函數應用程式的範本。

注意

使用範例範本即表示您同意遠端桌面閘道授權條款

請遵循下列步驟來設定範例遠端桌面閘道伺服器陣列。

  1. 建立簽署憑證。

    執行 Create-SigningCertificate.ps1。 記錄所建立憑證的指紋、密碼和 Base64 編碼,以供稍後使用。

  2. 取得 TLS/SSL 憑證。 與 TLS/SSL 憑證相關聯的 FQDN 必須是您控制的網域。

  3. 記錄 TLS/SSL 憑證的密碼、指紋和 Base64 編碼,以供稍後使用。

    • 若要取得指紋,請使用下列 PowerShell 命令:

      $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 複製到儲存體帳戶中的 Blob 容器。

  5. https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/GatewaySample/arm/gateway 開啟 azuredeploy.json,然後填寫下列參數:

    參數 必要 描述
    adminUsername 必要 閘道機器的系統管理員使用者名稱。
    adminPassword 必要 閘道機器系統管理員帳戶的密碼。
    instanceCount 要建立的閘道機器數目。
    alwaysOn 是否要讓建立的 Azure Functions 應用程式保持待命狀態。 將應用程式保持為開啟可在使用者第一次嘗試連線到其實驗室 VM 時避免延遲,但會增加成本。
    tokenLifetime 建立的權杖有效的時間長度 (HH:MM:SS 格式)。
    sslCertificate 必要 閘道機器 TLS/SSL 憑證的 Base64 編碼。
    sslCertificatePassword 必要 閘道機器 TLS/SSL 憑證的密碼。
    sslCertificateThumbprint 必要 在簽署憑證的本機憑證存放區中,用於識別的憑證指紋。
    signCertificate 必要 閘道機器簽署憑證的 Base64 編碼。
    signCertificatePassword 必要 閘道機器簽署憑證的密碼。
    signCertificateThumbprint 必要 在簽署憑證的本機憑證存放區中,用於識別的憑證指紋。
    _artifactsLocation 必要 用於尋找此範本所需成品的 URI 位置。 此值必須是完整 URI,而不是相對路徑。 成品包括其他範本、PowerShell 指令碼,以及支援權杖驗證的遠端桌面閘道插入式驗證模組 (名稱應該是 RDGatewayFedAuth.msi)。
    _artifactsLocationSasToken 必要 _artifactsLocation 是 Azure 儲存體帳戶時,用於存取成品的共用存取簽章 (SAS) 權杖。
  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}"
    
    • 執行 az storage account show --name {storage-account-name} --query primaryEndpoints.blob 以取得 {storage-account-endpoint}

    • 執行 az storage container generate-sas --name {container-name} --account-name {storage-account-name} --https-only –permissions drlw –expiry {utc-expiration-date} 以取得 {sas-token}

      • {storage-account-name} 是保存您所上傳檔案的儲存體帳戶名稱。
      • {container-name}{storage-account-name} 中保存您所上傳檔案的容器。
      • {utc-expiration-date} 是 SAS 權杖到期而無法再用來存取儲存體帳戶的日期 (UTC)。
  7. 從範本部署輸出中記錄 gatewayFQDNgatewayIP 的值。 也要儲存新建立函式的金鑰值,這可以在函數應用程式的應用程式設定索引標籤中找到。

  8. 設定 DNS,讓 TLS/SSL 憑證的 FQDN 導向 gatewayIP IP 位址。

建立遠端桌面閘道伺服器陣列並更新 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. 在 [遠端桌面] 區段中:

    • 針對 [閘道主機名稱] 欄位,輸入遠端桌面服務閘道機器或伺服器陣列的 FQDN 或 IP 位址。 此值必須符合閘道機器上所使用 TLS/SSL 憑證的 FQDN。

    • 針對 [閘道權杖],輸入您稍早記錄的秘密名稱。 此值不是函式金鑰本身,而是保存函式金鑰的金鑰保存庫秘密的名稱。

    Screenshot of Remote desktop options in Lab settings.

  4. 選取 [儲存]

    注意

    選取 [儲存] 即表示您同意遠端桌面閘道授權條款

設定閘道和實驗室之後,實驗室使用者選取 [連線] 時所建立的 RDP 連線檔案會包含連線到閘道及使用權杖驗證的必要資訊。

自動化實驗室設定

  • PowerShell:Set-DevTestLabGateway.ps1 是可自動設定閘道主機名稱閘道權杖秘密設定的範例 PowerShell 指令碼。

  • ARM:使用 Azure DevTest Labs GitHub 存放庫中的閘道範例 ARM 範本來建立或更新具有閘道主機名稱和閘道權杖機密設定的實驗室。

設定網路安全性群組

若要進一步確保實驗室安全,請將網路安全性群組 (NSG) 新增至虛擬網路,實驗室 VM 會使用,如建立、變更或刪除網路安全性群組中所述。 例如,NSG 只允許流量先通過閘道才能到達實驗室 VM。 規則來源是閘道機器或伺服器陣列中負載平衡器的 IP 位址。

Screenshot of a Network security group rule.

下一步