Amazon EC2 に Windows 環境を作ってリモートデスクトップ接続してみた

# はじめに

友人（[@digital24s](https://twitter.com/digital24s) さん）に誘われて、EC2 に Windows 環境を作ってリモートデスクトップ接続するまで、一緒にトライしました。
解説する書籍もネットの記事も多くて何とかなるだろうと思っていましたが、思った以上にハマったので記録しておこうと思いました。

# Amazon EC2 に Windows 環境を作ってリモートデスクトップ接続する

以下の記事を参考にしました。

[EC2にWindows環境を作りリモートデスクトップ接続する手順 #AWS - Qiita](https://qiita.com/msymacromill/items/28295d33866700da612e)

[VPC作成からEC2インスタンス起動までを構成図見ながらやってみる（その1） | DevelopersIO](
https://dev.classmethod.jp/articles/creation_vpc_ec2_for_beginner_1/)

## VPC を作成する

### リージョンを選択する

VPC を設定する画面でリージョンを指定すると思い込んでいましたが、リージョンは事前に選択しておいた上で VPC の作成を始めないといけませんでした。

### VPC を作成する

以下の項目を指定して VPC を作成します。

* 名前タグ：任意
* CIDR ブロック：ここでは 10.0.0.0/16
* テナンシー：デフォルト

作成するとデフォルトの「ルートテーブル」と「ネットワーク ACL」が作成されます。

### サブネットを作成する

以下の項目を指定してサブネットを作成します。

* 名前タグ：任意
* VPC：事前に作成した VPC を選択
* アベイラビリティゾーン：選択
* CIDR ブロック：ここでは 10.0.0.0/24

### インターネットゲートウェイを作成する

以下の項目を指定してインターネットゲートウェイを作成します。

* 名前タグ：任意

この画面で VPC を指定するのかと思いましたが、ここでは作成だけしておいて改めて紐付します。
一つのゲートウェイに複数の VPC を紐付できるからでしょうか。
作成したゲートウェイを選択して「アタッチ」を実行します。

* VPC：事前に作成した VPC を選択

### ルートテーブルを作成する

以下の項目を指定してルートテーブルを作成します。

* 名前タグ：任意
* VPC：事前に作成した VPC を選択

この画面でルールを指定するのかと思いましたが、ここでは作成だけしておいて改めてルールを追加します。
作成したルートテーブルを選択して「編集」を実行します。
VPC 内宛「以外」の通信をインターネットゲートウェイに向くよう設定します。

* 送信先：0.0.0.0/0
* ターゲット：事前に作成したインターネットゲートウェイを選択

このルートテーブルを事前に作成したサブネットに適用します。
作成したルートテーブルを選択して「サブネットの関連付の編集」します。

* 関連付られたサブネット：事前に作成したサブネットを選択

## EC2 環境を作成する

### EC2 インスタンスの設定する

以下の項目を指定して EC2 インスタンスを作成します。

* 名前タグ：任意
* Amazon マシンイメージ（AMI）：ここでは「Microsoft Windows Server 2022 Base」を選択
* インスタンスタイプ：ここでは「t2.micro」を選択

* キーペア：後述

* ネットワーク設定：後述

* ストレージ：後述

### ストレージを準備する

参考：[AWSでサーバーを構築してみる~ストレージの追加編~](https://zenn.dev/suiudou/articles/cef32e442a7fdf)

予めストレージを作成しておいて EC2 インスタンスにアタッチすることもできますが、インスタンスの設定の時点でストレージの設定して作成できます。

* ストレージタイプ：EBS（予め指定）
* デバイス名：/dev/sda1（予め指定）
* スナップショット：予め指定されている
* サイズ：任意
* ボリュームタイプ：ここでは「gp3」を選択
* 終了時に削除：はい
* 暗号化済：なし

「終了時に削除」の「終了」は、「EC2 インスタンスの終了」つまり「EC2 インスタンスの設定の削除」のことです。「OS の終了」だと思いましたが違いました。

### ネットワーク設定する

EC2 インスタンスのネットワーク設定を「編集」します。

* VPC：事前に作成した VPC を選択
* サブネット：事前に作成したサブネットを選択
* パブリック IP の自動割当：ここでは「無効」にして Elastic IP サービスで割当する

* ファイアウォール（セキュリティグループ）：後述

### セキュリティグループの設定する

予めセキュリティグループを作成しておいて EC2 インスタンスに適用することもできますが、インスタンスの設定の時点でセキュリティグループの設定して作成できます。

* セキュリティグループ名：任意
* 説明：任意

ルールを追加します。RDP でリモートデスクトップ接続できるようにしておきます。

* タイプ：「rdp」を選択
* プロトコル：タイプに従って設定される
* ポート範囲：タイプに従って設定される
* ソース：ここでは「自分の IP」を指定

### Elastic IP の設定する

「Elastic IP アドレスを割当てる」を実行します。

* ネットワークボーダーグループ：設定したい EC2 インスタンスが作成されているリージョン
* パブリック IPv4 アドレスプール：「Amazon の IPv4 アドレスプール」

上記の指定を確認した上で「割当」を実行します。

作成した IP アドレスを選択して「Elastic IP アドレスの関連付け」を実行します。

* リソースタイプ：「インスタンス」
* インスタンス：設定したい EC2 インスタンスを選択
* プライベート IP アドレス：選択した EC2 インスタンスの IP アドレスが表示される

上記の指定を確認した上で「関連付ける」を実行します。

### EC2 環境を起動する

作成した EC2 インスタンスを選択して「起動」実行します。

## リモートデスクトップ接続する

### キーペアを作成する

以下の項目を指定して「キーペアの作成」します。

* キーペア名：任意
* キーペアのタイプ：「RSA」を選択
* プライベートキーファイル名：ここでは「.pem」を選択

作成するとキーファイルがダウンロードされます。

### 接続の設定を確認する

起動している EC2 インスタンスを選択して「接続」の設定します。
以下のいずれかの方法で接続できます。

* セッションマネージャー
* RDP クライアント
* EC2 シリアルコンソール

このうち「RDP クライアント」を選択します。
設定画面で以下の項目が確認できます。

* パブリック DNS：EC2 インスタンスに割当されたパブリック IP アドレスと同じ
* ユーザ名：「Administrator」
* パスワード：取得できていないと「パスワードを取得」が表示される

ここで「パスワードの取得」を実行します。

### 初期パスワードを取得する

前述の設定画面で「プライベートキーファイルのアップロード」を実行します。事前に作成してダウンロードしてあるキーファイルをアップロードします。

そして「パスワードを復号化」を実行します。起動している EC2 インスタンスの Windows に設定されている、管理者の初期パスワードを取得してくれます。

参考：[Windows Server EC2の管理者パスワードについて調べてみた | DevelopersIO](https://dev.classmethod.jp/articles/about-windows-server-es2-admin-password/) 

### リモートデスクトップ接続する

接続元の環境で RDP クライアントツール（Windows なら「リモートデスクトップ接続」）を起動します。
以下の情報を使って接続してログインします。

* 接続先：前述の設定画面で取得したパブリック DNS または IP アドレス
* ユーザ名：前述の設定画面で取得したユーザ名「Administrator」
* パスワード：前述の設定画面で取得したパスワード

参考：[初めてのEC2ログイン：Windows編 | DevelopersIO](https://dev.classmethod.jp/articles/first-login-to-ec2-windows/) 

### リモートデスクトップ接続できなくなった

友人（[@digital24s](https://twitter.com/digital24s) さん）と一緒に、EC2 に Windows 環境を作ってリモートデスクトップ接続できました。

ところが翌日になるとなぜか、Windows にリモートデスクトップ接続できなくなりました。クライアントツールが「接続できません。次のいずれかが原因です。サーバへのリモートアクセスが有効にされていない。リモートコンピュータの電源が入っていない。リモートコンピュータがネットワークで使用できない」となります。

以下の記事を参考にして復旧してみましたが、接続できないままです。

[Amazon AWSへのリモートデスクトップ接続ができなくなった対処法 - 投資家のための検証サイト](
https://toushika.top/cannot_connect_amazon-aws_by_remote_desktop/)

別の記事を見て確認しましたが、問題ないようです。

[Amazon EC2 リモートデスクトップ接続ができない時に確認する事 | オレンジの国](https://techlive.tokyo/archives/12414)

さらに別の記事を見て確認しました。

[AWS EC2 に SSH 接続できない・繋がらないときの確認項目 - サーバー構築と設定 ～初心者にも分かりやすく解説～](
https://xn--o9j8h1c9hb5756dt0ua226amc1a.com/?p=3583)

問題だったのは「接続元の IP アドレスが許可されているか」でした。
セキュリティグループの設定したとき、ソースに「自分の IP」を指定しました。
設定に使っているパソコンがインターネットに接続している LAN 環境の、WAN 側のパブリック IP アドレスが取得されてセットされるようです。

参考：[AWSで自分のIPを調べることができる「マイIP」機能 - Nothing Behind](
https://nothing-behind.com/2020/03/04/aws%E3%81%A7%E8%87%AA%E5%88%86%E3%81%AEip%E3%82%92%E8%AA%BF%E3%81%B9%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%8C%E3%83%9E%E3%82%A4ip%E3%80%8D%E6%A9%9F%E8%83%BD/)

問題は、設定を実行した時点のものがセットされるだけのようです。翌日に別のインターネット接続環境でアクセスしていました。その環境の WAN 側のパブリック IP アドレスは、事前に設定された IP アドレスと違っているので、接続が許可されなくなってしまいました。
ここをひとまず「任意の場所（Anywhere）」にして、接続できるようにしました。

### ログインパスワードを変更する

リモートデスクトップ接続してログインした後で、Windows の設定画面でログインパスワードを変更できます。以降にログインするときは、変更後のパスワードを使用します。
ところが、前述の EC2 の設定画面で確認できるパスワードは変更されません。注意が必要です。

参考：[EC2 Windowsのパスワード変更したら、マネコンには反映されない？ | DevelopersIO](
https://dev.classmethod.jp/articles/jw-if-i-change-my-ec2-windows-password-wont-it-change-in-my-management-computer/)

ログインパスワードを変更して分からなくなってしまったら、リセットすることができるようです。

参考：[AWS windowsのEC2でパスワードをリセットする | IT王子の技術ブログ](
https://it-ouji.com/2021/11/01/aws-windows%E3%81%AEec2%E3%81%A7%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%82%92%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%E3%81%99%E3%82%8B/)