WindowsFirewallの設定をユーザーデータを使用して無効にする方法
どうもさいちゃんです。以前、SSM や RDP を使えない状態で WindowsFirewall の設定を無効にする方法についてご紹介しました。
ユーザーデータを使用してインスタンス作成時に WindowsFirewall を無効化する方法をご紹介します。
前回のブログの様に、WindowsFirewall の設定のせいでどうにも EC2 へアクセス出来なくなってしまった場合、インスタンスの作り直しが可能ならば対象インスタンスの AMI を取得、ユーザーデータを使用して WindowsFirewall を無効にできるのでは?と思いやってみることにしました。
結論から言うと、上記の条件下ではこのユーザーデータを使用した方法での WindowsFirewall の無効化は難しいことが分かりましたが、AWS が提供している AWS が提供している AMI から立ち上げた Windows インスタンスではデフォルトで WindowsFirewall がオンになっているので、何らかの理由で起動時にオフにしてしまいたい時(推奨はされません)等にご活用いただければと思います。
やりたいこと
今回は、前回同様WindowsFirewall をオンにした状態で内部ネットワークやドメインネットワークの外からの通信をブロックします。
これで EC2 へのアクセスができない状態になっています。この後は以下の想定で進めます。
- アクセスできないインスタンスの AMI を取得する
- AMI からインスタンスを作成
- ユーザーデータで WindowsFirewall を無効にする
- 作成されたインスタンスは WindowsFirewall が無効になっているのでアクセスできるようになっている(はず)
ではさっそくやってみます。
やってみた
前回もご紹介したのでインスタンスにアクセスできない事象の再現方法は省略します。
以下はアクセスできないインスタンスの AMI を作成してある前提で話を進めます。
では作成した AMI からインスタンスを起動していきます。
ネットワークやセキュリティグループは適切に割り当ててあげます。
画面下部の 高度な詳細をクリックして一番下のユーザーデータに以下を記載します。
<powershell>
Set-NetFirewallProfile -Profile Domain,Private,Public -Enabled False
</powershell>
元の AMI が Windows Server 2016 および 2019 か、Windows Server 2022 および 2025 AMI かによって EC2 Launch のバージョンが異なるためユーザーデータの記載方法に若干の違いが出てくることがあります。
今回は Windows Server 2016 を使用しています。
下記のブログとドキュメントで詳しく説明されていますので、参考にしていただければと思います。
インスタンスを起動します。
この後アクセスしてみたんですが、あれ・・・アクセス出来ない。
なぜでしょう??
AMI の複製時に Sysprep をしていなかった事が原因でした。
Sysprep をしないと SID が変わらないから色々不具合が起こるみたいな情報は聞いたことがあったんですが、ユーザーデータの実行にも影響があるんですね。
気を取り直して元のインスタンスにアクセスして(検証用なので頑張ればアクセスできる)Sysprep をしてから AMI を複製して再度ユーザーデータを設定してからインスタンスを起動しました。
無事インスタンスへ接続できました。
WindowsFirewall もオフになっています。
最後に
WindowsFirewall が原因でどうにもインスタンスへのアクセスが出来なくなってしまった場合、インスタンスの作り直しが可能な状況であれば AMI を取得しユーザーデータで起動時に WindowsFirewall をオフにするように設定するのが一番手取り早いかもとおもってこの検証を行いました。
しかし先述した通り、この検証を行うにあたり、初回の AMI 取得時に Sysprep をせずに同一サブネットへと EC2 を作成したところうまくユーザーデータが実行されないという事象が発生しました。
つまりアクセスできなくなった Windows インスタンスにアクセスして Sysprep を行わなければユーザーデータを使用した WindowsFirewall の無効化はできないです。いい方法だと思ったんですが、やはり一切インスタンスにアクセスできない場合は最後の手段として前回お伝えしたように EBS ボリュームの付け変えを行う必要がありそうですね。
また、このブログを書いていて、Sysprep を実行せずにインスタンスを複製しようとするとなにが起こりどんな影響があるのかについて気になったので、後日別のブログにまとめる予定なのでそちらも併せて確認してみて下さい。