先日、クラウド上で稼働するWindows Serverインスタンスにアクセスできなくなったお客様の対応を行いました。社内のユーザーがWindowsファイアウォールの設定を誤って変更してしまい、その結果、すべてのユーザーがRDPをはじめとするあらゆる手段でマシンに接続できなくなったのです。
こうしたトラブルは想像以上によく起こるものですが、幸いにも復旧は可能です。同じような状況でお困りの方の参考になればと思い、本記事では解決までの手順をシンプルにまとめました。
他の手段ではマシンに接続できなかったため、Google Cloud Web Consoleが提供するシリアルポート接続オプションを利用することにしました。
Windowsインスタンスへのアクセスを復旧する流れは、3つのステップに分かれます。まずマシンに接続し、次にWindowsコマンドプロンプトを開き、最後にファイアウォールを無効化してRDPアクセスを開放します。本記事は、すでにGoogle Cloud Web Consoleにサインインしている状態からスタートします。
本記事の手順を実行するには、以下のGoogle Cloud Platform(GCP)権限が必要です。
- compute.instances.setMetadata
- compute.projects.setCommonInstanceMetadata
ステップ1:シリアルコンソール経由でインスタンスに接続する
Google Cloud Web Consoleにサインインしたら、Compute Engineページに移動し、インスタンス一覧を表示します。対象のインスタンスを検索して選択し、インスタンス詳細ページを開きます。

VMインスタンス詳細
「シリアルポートへの接続を有効にする」属性を確認し、シリアルコンソールアクセスが有効化されているかチェックします。無効になっている場合は有効化が必要です。「編集」ボタンをクリックし、「シリアルポートへの接続を有効にする」属性をオンにして変更を保存してください。

シリアルポート接続の編集
シリアルポートアクセスを有効化すると、「シリアルコンソールに接続」ボタンも使用可能になります。このボタンをクリックすると新しいウィンドウが開き、Windows Special Administration Console(SAC)が表示されます。

VMインスタンス詳細 — シリアルコンソール有効化
Windows SACを使うと、Windowsオペレーティングシステム(OS)を直接操作できます。SACはネットワークが機能していない状況でもOSにアクセスでき、OS管理用の基本的なコマンドも一通り備えています。

Special Administration Console(SAC)
ヒント:SACターミナルについて詳しく知りたい場合は、
?またはhelpコマンドで利用可能なコマンド一覧を表示できます。
ステップ2:Windowsコマンドプロンプトに接続する
ファイアウォール関連のコマンドはSACでは使えないため、お馴染みのWindowsコマンドプロンプトにアクセスできる新しいチャネルを作成します。
SACターミナルでcmdコマンドを実行し、別チャネルを起動します。新しいチャネルが作成されると、システムから確認メッセージが返ってきます。新規チャネル名は「Cmd0001」となるので、ch -sn Cmd0001コマンドで切り替えます。

新しいチャネルの作成と切り替え
システムが新しいチャネルの詳細を表示します。表示されている<esc><tab>の組み合わせ以外の任意のキーを押すと、チャネルが表示されます。
ch -snに続けてチャネル名を入力します(例:ch -sn Cmd0001)。このコマンドにより、シリアルコンソールが指定したチャネルに切り替わります。
Windowsコマンドプロンプトからは、マシンへフルアクセスできます。認証ユーザーとしてログインするための資格情報の入力を求められるので、ユーザー名、ドメイン、パスワードを入力してください。マシンがドメインに参加していない場合は、ドメインは空欄のままで構いません。

コマンドプロンプトの認証
ステップ3:ファイアウォールを無効化する
マシンへの認証が完了したら、最終ステップとしてアクセスをブロックしているファイアウォールルールを無効化します。netsh advfirewall set allprofiles state offコマンドを実行すると、システムから「Ok.」という短いメッセージが返り、ファイアウォールルールが無効化されたことが確認できます。これでマシンに接続でき、設定を本来の状態に戻せるようになります。もちろん、作業後はファイアウォールを再有効化することをお忘れなく。

netshコマンドからの確認メッセージ
まとめ
本記事では、OSのファイアウォールによってブロックされたWindows Serverインスタンスへのアクセスを復旧する手順をご紹介しました。作業が完了したら、リソース保護のためにシリアルコンソールアクセスを無効化することも忘れないようにしましょう。GCPには、すべてのマシンのシリアルコンソールアクセスを一括で保護する仕組みも用意されています。シリアルポートアクセスに関する組織ポリシーを設定すれば、個々のマシン設定よりも優先されます。この機能を使う場合は、組織ポリシーページの「VMシリアルポートアクセスを無効化」を選択してください。
また、GCPはすべてのシリアルコンソールアクセスをクラウドログに記録しています。ログを確認するには、GCP Web Consoleのログメニューに移動し、「GCE VMインスタンス」リソースでフィルタリングしてssh-serialport-googleapis.comで検索します。閲覧にはユーザーアカウントにログ閲覧権限が必要です。
こうした事態を防ぐための基本的な対策もいくつかあります。変更管理プロセスを整備しておけば、操作の履歴を残すことができ、インシデントの原因特定や対応、迅速な復旧に役立ちます。さらに、バックアップを定期的に取得しておくことも重要です。Google Cloud Platformには、インスタンス向けの優れたスナップショットスケジューリング機能が用意されています。
他の記事もぜひご覧ください。Mediumのブログ、またはTwitterのGarrettアカウントをフォローしてみてください。