EC2のWindowsインスタンスは起動すると標準でリモートデスクトップ(RDP)接続できる環境が提供されます。そのため通常はRDPを使って設定・運用を行うのですが、誤ってWindows側のファイアウォールでRDP接続を切ってしまうと、(あたりまえですが)RDPで接続することができなくなってしまいます。

でも、あり得なさそうなそんなトラブルも起こってしまう時は起こってしまう訳で…。
今回はそんなトラブルが発生した場合の対応方法をまとめます。(※ルートデバイスがEBSのもののみこの方法が適用可能です。)

1.対象のWindowsインスタンスを停止する

RDP接続ができなくなったインスタンスを停止し、インスタンスのルートボリュームをデタッチします。
まず、該当するインスタンスの情報からRootデバイスのEBSのIDを確認します。

volume

EBS IDのリンクをクリックするとVolumesの画面に遷移するので対象のVolumeを右クリックして「Detach Volume」を実行します。

2.同じAZで一時的に使用するWindowsインスタンスを起動する

一時的に使用するWindowsインスタンスをストップしたインスタンスと同じアベイラビリティゾーンで起動します。

この時ストップしたWindowsとは異なるバージョンのWindowsを起動した方が良いみたいです。
(ルートボリュームを差し替えた際に発生する問題を回避するため)
今回は復旧対象がWindows 2008 R2だったのでWindows 2012 Serverを起動。

3.起動したインスタンスに先ほどデタッチしたルートボリュームをアタッチする

1でデタッチしたボリュームを2で起動した新しいWindowsインスタンスにアタッチします。

アタッチした後はRDPで新しいWindowsに接続し、Server Managerを開いて、
「File and Storage Services」 -> 「Volumes」 -> 「Disks」
からアタッチされたディスクを右クリックして「Bring Online」でドライブをオンラインにします。
Dドライブとして認識されます。

servermanage

4.レジストリの書き換え

続いて「Regedit」を開き「HKEY_LOCAL_MACHINE」を選択しFileメニューからLoad Hiveを選択します。
ファイルチューザーが表示されるので、オンライン化したドライブのWindows\System32\config\Systemを開きます。
この際キー名の入力を求められますが任意の名称でOKです。

続いてロードしたキーを開いて、ControlSet001 -> services- > SharedAccess -> Parameters -> FirewallPolicy を開きます。
直下にあるDomainProfile、PublicProfile、StandardProfile内のEnableFirewallの設定値を1→0に書き換えます。その後、再度キーを選択して「Unload Hive」を実行します。

最後に再びServer Managerで先ほどオンライン化したドライブを選択して「Take Offline」を実行し、AWSのManagement Consoleから対象のVolumeをデタッチします。
(デタッチしたら新しく起動したインスタンスは不要になるので任意のタイミングでTerminateすればOK)

5.停止していたインスタンスへのアタッチ

4で編集したVolumeを停止していたインスタンスに/dev/sda1としてアタッチします。

rootdevice

アタッチできたらインスタンスを起動します。

インスタンスが起動すると無事RDPで接続できるようになってます!