Amazon EC2 Windows をトラブルから復旧してみる
はじめに
こんにちは。今回は EC2 Windows にトラブルが起こった際に、EC2Rescue を用いて復旧する方法についてご紹介します。Windows ファイアウォールに誤ったルールを設定してしまい、インスタンスにリモートデスクトップ接続できなくなったというシナリオです。
単純に復旧するだけならバックアップからのリストアの方が早く済む場合が多いですが、どうしても作業途中や処理中のデータを失いたくない場合には、EC2Rescue での復旧が役に立つと思います。
今回の環境
次の通り2つのインスタンスを用意します。
復旧対象インスタンス | EC2Rescueインスタンス | OS |
Instance #1 | Instance #2 | Windows Server 2019 |
インスタンスを壊す
先ずは、Instance #1 に Windows ファイアウォールのルールを追加してアクセス不能にします。 PowerShell で以下のコマンドを入力します。
注意:本番環境のインスタンスでは実行しないでください
New-NetFirewallRule ` -DisplayName 'Block-Inbound-TCP-3389' ` -Direction Inbound ` -Protocol TCP ` -LocalPort 3389 ` -Action Block
上記のルールは RDP (3389/tcp) の着信パケットを全て遮断します。[Enter]
キーを押下するとすぐにアクセス不能になり、リモートデスクトップのウィンドウがフリーズします。インスタンスが壊れてしまいましたので、このインスタンスは停止しておきます。
復旧用インスタンスの用意
新たに Instance #2 として、復旧用の Windows Server を立ち上げます(この時同じ AZ 内に立ち上げる必要があります)。インスタンスの起動が完了したら、ログインして PowerShell を実行、EC2Rescue をダウンロード、展開します。
PS C:\Users\Administrator> Invoke-WebRequest https://s3.amazonaws.com/ec2rescue/windows/EC2Rescue_latest.zip -OutFile $env:USERPROFILE\Desktop\EC2Rescue_latest.zip PS C:\Users\Administrator> Expand-Archive -Path $env:USERPROFILE\Desktop\EC2Rescue_latest.zip -DestinationPath $env:USERPROFILE\Desktop\EC2Rescue_latest PS C:\Users\Administrator> Get-ChildItem $env:USERPROFILE\Desktop\EC2Rescue_latest Directory: C:\Users\Administrator\Desktop\EC2Rescue_latest Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2/17/2021 7:21 AM 214504 EC2Rescue.chm -a---- 2/17/2021 7:24 AM 697680 EC2Rescue.exe -a---- 7/29/2020 8:52 AM 1267 EC2Rescue.exe.config -a---- 2/17/2021 7:24 AM 25424 EC2RescueCmd.exe -a---- 7/29/2020 8:52 AM 1267 EC2RescueCmd.exe.config -a---- 2/17/2021 7:24 AM 183120 EC2RescueLib.dll -a---- 2/17/2021 7:19 AM 1223 license.txt -a---- 2/17/2021 7:19 AM 4921 README.txt PS C:\Users\Administrator>
次に、不具合が発生している Instance #1 の EBS ボリュームをデタッチして、Instance #2 のセカンダリボリュームとしてアタッチします。イメージとしては、以下のようになります。
Diagnose and Rescue の実行
問題が発生しているインスタンスの分析と復旧を行います。実施前にはスナップショットや AMI でのバックアップの取得を推奨します。デスクトップ上に展開した EC2Rescue を実行します。
初回実行時はライセンス同意に関するダイアログが表示されますので、[I Agree]
を押下します。その後、EC2Rescue に関する説明が表示される画面に遷移しますので、[Next]
を押下します。
Select mode では、別のインスタンスの復旧を行うため Offline instance
をクリックします。
Select a disk では、復旧対象のディスクを選択して [Next]
を押下します。
選択したディスクでよいかどうか確認ダイアログが表示されますので、[Yes]
を押下します。
Volume successfully loaded. が表示されればディスクのオンライン化が成功です。
その後、システムの概要と各機能の選択画面が表示されますので、Diagnose and Rescue
を選択して [Next]
を押下します。
検出された問題が表示されます。 Windows Firewall について3件表示されています。3件ともチェックして [Next]
を押下します。
復旧内容の確認をして [Rescue]
ボタンを押下します。
選択したディスクの変更を行う旨のダイアログが表示されるので、[OK]
をクリックします。
結果が表示されます。Windows Firewall を無効化したと表示されています。[Next]
を押下して進みます。
終了画面です。[Finish]
を押下して終了します。終了時にディスクがオフラインになりますので、デタッチして、元のインスタンス (Instance #1) のルートボリューム (/dev/sda1) としてアタッチします。
復旧確認
Instance #1 を起動して、リモートデスクトップで接続します。コントロールパネルから Windows ファイアウォールの状態を見ると、全て無効になっていることが確認出来ます。PowerShell からも確認してみます。
PS C:\Users\Administrator> Get-NetFirewallProfile | Format-Table Name Enabled DefaultInboundAction DefaultOutboundAction AllowInboundRules AllowLocalFirewallRules AllowLocalIPsecRul es ---- ------- -------------------- --------------------- ----------------- ----------------------- ------------------ Domain False NotConfigured NotConfigured NotConfigured NotConfigured NotConfigured Private False NotConfigured NotConfigured NotConfigured NotConfigured NotConfigured Public False NotConfigured NotConfigured NotConfigured NotConfigured NotConfigured PS C:\Users\Administrator>
尚、最初に投入した RDP を遮断するルール自体は残っています。このままファイアウォールを有効化すると再度遮断されてしまいます。
PS C:\Users\Administrator> Get-NetFirewallRule | Where-Object DisplayName -Like '*3389' | Format-Table Name DisplayName DisplayGroup Enabled Profile Direction Action ---- ----------- ------------ ------- ------- --------- ------ {46e5713d-7ca0-4153-8b4c-98f24aa7089f} Block-Inbound-TCP-3389 True Any Inbound Block PS C:\Users\Administrator>
そのため、問題となるルールを削除します。
PS C:\Users\Administrator> Remove-NetFirewallRule -DisplayName "Block-Inbound-TCP-3389" PS C:\Users\Administrator> PS C:\Users\Administrator> PS C:\Users\Administrator> Get-NetFirewallRule | Where-Object DisplayName -Like '*3389' | Format-Table PS C:\Users\Administrator>
問題となっていたルールが削除されました。この状態でファイアウォールを有効化すると、遮断されず復旧完了となります。
最後に
今回は手動で EC2Rescue を実行してみましたが、これら一連の操作を Systems Manager を利用して自動化することもできます。以下のページを参照し、いざという時に備えてみてはいかがでしょうか。本記事が読者様の運用のお役に立てれば幸いです。
参考
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/automation-ec2rescue.html
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitterRecommends
こちらもおすすめ
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16