HTTPS 通信で Azure VM のリモートデスクトップ接続

※ 本記事の内容は [Azure Bastion](https://azure.microsoft.com/ja-jp/services/azure-bastion/) サービスの登場により、新サービスでカバーできる内容となりました。今後 HTTPS 通信にて RDP, SSH 接続を実施したい方は、[Azure Bastion の利用](https://docs.microsoft.com/ja-jp/azure/bastion/bastion-create-host-portal)を推奨します。

#概要
　企業内ネットワークの多くは、外部へのリモートデスクトップ接続 (RDP 3389) を許可していません。このため社内 LAN よりクラウド上の仮想マシン (Windows Server) へ管理接続が張れるずに困る事があります。今回は、仮想ネットワーク上に 1 台の Remote Desktop Gateway (RD Gateway) をデプロイする事で、この問題の解決方法をご案内します。

　[RD Gateway](https://technet.microsoft.com/ja-jp/library/hh708743.aspx) はリモートデスクトップ接続の仲介役として機能し、クライアントからの RDP 要求を HTTPS 443 ポートで受けた後、内部ネットワークにいるターゲットサーバーに RDP 3389 ポートでつなぐ役目をします。これにより内部ネットワークにいる VM はインターネットに直接公開する事なくクライアントからのリモートデスクトップ接続をゲートウェイ経由で受け入れる事が可能となります。
![RD-Gateway.png](https://qiita-image-store.s3.amazonaws.com/0/166732/86952434-6dfa-710e-fb4e-b3435e70196e.png)

#構築手順
　事前の注意点として RD Gateway の構築だけは通常のリモートデスクトップ接続 RDP:3389 が可能なオンプレミス環境から実施する必要があります。一度 RD Gateway の構築さえ完了してしまえば、企業内ネットワークから Azure クラウドへの接続は HTTPS 443 ポート通信のみで管理可能となります。

　ここでは基本的な仮想マシンや仮想ネットワークのデプロイ手順は割愛していますが、新規に環境を構築する場合として、最初に仮想ネットワークにデプロイした Windows Server 2016 を RD Gateway として構成する手順を紹介します。

##RD Gateway の構築
1. RD Gateway は Windows Server の役割と機能の追加より導入します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/9edf494a-7e53-db13-8992-2110296b6f51.png)
　

2. Remote Desktop Services の役割として Remote Desktop Gateway のみ選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/bfcf6c77-4fa7-66aa-e8e8-513f626dcc9d.png)
　

3. その他は全て既定値のまま進みインストールを開始します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/f09c4848-6ff6-0a26-4e66-28414b65432d.png)
　

4. インストールが完了後 Server Manager より Remote Desktop Gateway Manager を起動します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/a2b6b150-5aa6-5e53-14b3-33bdd169d71e.png)
　

5. RD Gateway Manager で、HTTPS 通信用の証明書を構成します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/8bca50cd-fbfe-1c5f-8f01-8c2cd2ad3527.png)
　

6. 今回は自己証明書の作成を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/5e795e4c-265d-1cde-6555-5fd8b1d8c746.png)
　

7. 証明書の FQDN を設定します。これは RDGateway の Public IP に設定した DNS 名と一致させます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/6a317fdb-2bec-5d51-e467-baf167d39f6a.png)
　
※ Azure ポータルにて RDGateway の Public IP に DNS 名を設定するのは下記となります。既に他人に利用されている名前は使用できませんので、先に DNS 名の設定を行った後に自己証明書を作成します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/214a1c67-4f62-36c9-5fea-5543e86f2f8f.png)
　

8. Connection Authorization Policy の設定を行います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/a1093b82-2b51-c0c7-6411-11cb79fa86e9.png)
　
ポリシー名を入れ、RD Gateway への接続許可ユーザーグループを設定します。ここではローカル Administrators グループを設定しています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/2b47e801-9a3d-d1c8-b4a3-80a32bd0c0bd.png)
　

9. 次に Resource Authorization Policy の設定を行います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/1db7d596-d618-244b-0d7a-7fbfe51b4503.png)
　
ポリシー名を入れ、ターゲットのサーバーへアクセスを許可するユーザーグループを指定します。また今回は AD 不在の環境で構築しているため指定ユーザーに全てのネットワーク上のリソースへのアクセスを許可します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/fcaab6a6-b6d8-b4a7-1bc0-fac55d2ed9f4.png)
　

10. 最後に RD Gateway ネットワークの NSG (Network Security Group) 設定にて、受信側の HTTPS(443) を許可します。最終的には RDP(3389) の受信ルールは不要なため削除出来ますが、最終検証が完了してから削除した方がベターかと思われます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/082ab722-6bd4-9ee4-019a-4db2eace3bc3.png)

##管理証明書のエクスポート
　事前にクライアント端末にインストールする SSL 証明書を RDGateway サーバー側でエクスポートします。mmc.exe を起動し、[File] - [Add/Remove Snap-ins] より コンピュータアカウントで [Certificates] を追加します。自己証明書の右クリックメニューよりエクスポートします。エクスポートウィザードは全て既定の設定で実行します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/0b512762-c948-d525-be69-f026ca138340.png)

　.cer ファイルが出力されますので、これをクライアント端末にコピーします。リモートデスクトップ接続では、コピー、ペーストでファイルをリモート端末へコピーできます。

##クライアント端末の構成
1. クライアント端末で mmc.exe を起動し、メニューから [ファイル] - [スナップインの追加と削除] を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/b6798480-57b7-05fd-ef65-bd371c4796d0.png)
　

2. 利用できるスナップインから [証明書] を追加します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/8acafc16-a4cd-2891-f671-512c93d80ad4.png)
　

3. 適用範囲にあわせてユーザーアカウントもしくはコンピューターアカウントを選択します。ここではユーザーアカウントを選択しています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/e20276fe-ade3-62e1-bd5d-6cc13a66936c.png)
　

4. [信頼されたルート証明機関] - [証明書] を選択し、メニューより [操作] - [すべてのタスク] - [インポート] を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/c1a7e7f0-418d-e52e-ec38-5a7bc382b773.png)
　

5. 証明書のインポートウィザードが起動してくるので、事前にエクスポートした .cer ファイルを指定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/25979e86-abef-9b4d-4b53-aaff7e15e913.png)
　

6. 続けて、既定の [信頼されたルート証明機関] のまま続行し、完了します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/d2c4cdc9-b0a4-1f09-cae9-a8bb16e4322d.png)

##接続確認
1. リモートデスクトップ接続 (mstsc.exe) を起動します。オプションの表示をし、[詳細設定] タブを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/c7a442e0-31c6-54f6-102c-2e0f09e0a581.png)
　

2. [設定] ボタンを押し、RD ゲートウェイの指定をします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/c3ca9114-cbcd-b9a0-7ea9-bad360e977d0.png)
　

3. [全般] タブに戻り、接続先のコンピューター名とユーザー名を入力し、[接続] ボタンを押します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/af187054-845f-026a-a142-e07da50a28d4.png)
　

4. 最初に RD ゲートウェイサーバーへの認証情報が聞かれるので、まずはターゲットコンピュータでなく、RD ゲートウェイサーバーへの接続資格情報を入力します。ここではローカルの Administrator （= Azure の場合、RD Gateway VM をデプロイする際に指定したユーザー）を入力します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/75ea974d-ba9c-bfe6-3f84-544594a307e1.png)
　

5. 続けてターゲットサーバーへの資格情報が聞かれます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/f37c621a-1357-1559-1943-654f751bc9d1.png)
　

6. 成功するとリモートデスクトップでの接続が完了します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/9c6e0acd-2d56-a51e-e8b1-807f37345844.png)