【ITニュース解説】Part-51: 🚀To Configure VPC Firewall Rules with Target All Instances in GCP Cloud
2025年09月14日に「Dev.to」が公開したITニュース「Part-51: 🚀To Configure VPC Firewall Rules with Target All Instances in GCP Cloud」について初心者にもわかりやすく解説しています。
ITニュース概要
GCPのVVPCでは、VMへの外部からの通信はデフォルトでブロックされる。Webサーバーなどを公開するには、明示的にファイアウォールルールを設定し、対象のポート(例:80番)への通信を許可する必要がある。これにより、指定したVM群へ外部からアクセスできるようになる。
ITニュース解説
Google Cloud Platform(GCP)で仮想マシンを運用する際、ネットワークの安全を確保するために不可欠なのがファイアウォールである。ここでは、GCPにおける仮想プライベートクラウド(VPC)のファイアウォールルールを設定し、特に「ネットワーク内の全てのインスタンス」を対象とする場合の挙動について詳しく見ていこう。
まず、GCPのVPCにおけるネットワーク通信の基本だが、外部から内部への通信、つまり「Ingressトラフィック」は、デフォルトではすべてブロックされるという暗黙のルールが存在する。これは、セキュリティを最優先するための設定であり、意図しないアクセスを防ぐ上で非常に重要だ。例えば、Webサーバーとして動く仮想マシン(VM)をGCP上にデプロイし、そこにポート80(HTTP通信で一般的に使われるポート)でアクセスしようとしても、明示的にファイアウォールルールで許可しない限り、外部からそのVMに到達することはできない。
今回の検証では、まずNginxというWebサーバーソフトウェアをインストールしたVMをデプロイする手順から始まった。VMを作成する際に、nginx-webserver.shという起動スクリプトを指定する。このスクリプトは、VMが起動するときに自動的に実行され、Nginxのインストール、サービスの有効化、そして簡単なHTMLページを生成して/var/www/html/index.htmlに配置する。このHTMLページには、VMのホスト名やIPアドレス、アプリケーションバージョンといった情報が表示されるように設定されている。具体的には、gcloud compute instances createコマンドを用いて、myvm1-allinstancesという名前のVMをus-central1-aゾーンに、e2-microというタイプで作成し、事前に作成されたmysubnet1というサブネットに接続させ、先ほどの起動スクリプトを適用する。VMが作成されたら、gcloud compute instances listコマンドでその詳細を確認し、特に内部IPアドレスと外部IPアドレスを控えておく。
VMが正常に起動し、Nginxが動作しているはずだが、この時点ではまだファイアウォールルールを設定していない。そこで、外部IPアドレスに対してtelnetコマンドでポート80への接続を試みたり、curlコマンドでHTTPリクエストを送ってみる。結果は予想通り、どちらも接続に失敗する。これは、GCPのVPCに存在するデフォルトの暗黙の拒否ルールが働いているためだ。つまり、外部からの通信は、ファイアウォールが門番のように立ちふさがって、VMに到達する前にブロックされてしまうのである。
次に、この問題を解決するために、外部からのアクセスを許可するファイアウォールルールを作成する。GCPコンソールの「VPCネットワーク」セクションから、対象となるVPCネットワーク(vpc2-custom)を選択し、「ファイアウォール」タブで新しいルールを追加する。ここで設定する項目は以下の通りだ。
- 名前:
fw-ingress-80-allinstancesといった識別しやすい名前を付ける。 - 説明: このルールの目的(例: 「ネットワーク内の全てのインスタンスに対し、インバウンドのポート80を許可」)を記述する。
- ネットワーク: ルールを適用するVPCネットワーク(
vpc2-custom)を選択する。 - 優先度: ルールの適用順序を示す数値で、小さいほど優先度が高い。今回は
1000を設定する。 - トラフィックの方向:
Ingress(外部から内部への通信)を選択する。 - 一致した場合のアクション:
許可を選択し、指定した条件に一致するトラフィックを許可する。 - ターゲット: ここが重要なポイントで、「ネットワーク内のすべてのインスタンス」を選択する。これにより、このVPCネットワーク内に存在する全てのVMが、このファイアウォールルールの対象となる。
- ソースフィルタ:
IPv4の範囲を選択し、0.0.0.0/0を指定する。これは「全てのIPv4アドレスからの通信」を意味し、インターネット上のどこからでもアクセスを許可するという設定になる。 - プロトコルとポート:
指定されたプロトコルとポートを選択し、tcpの80番ポートを指定する。
これらの設定でファイアウォールルールを作成した後、再びVMの外部IPアドレスに対してtelnetやcurlでポート80へのアクセスを試みる。すると、今度は正常に接続でき、curlコマンドではNginxが提供するHTMLの内容が返ってくることが確認できる。さらに、WebブラウザにVMの外部IPアドレスを入力すれば、先ほど作成したWebページが表示されるはずだ。これは、新しいファイアウォールルールが適用され、外部からのHTTP(ポート80)通信がVMに到達できるようになったことを示している。
この一連の作業を通して、いくつかの重要な学習ポイントがある。まず、GCPのVPCでは、明示的に許可しない限り、デフォルトで外部からの通信(Ingressトラフィック)は拒否されるというセキュリティ上の基本原則を理解すること。次に、「ネットワーク内の全てのインスタンス」をターゲットとするファイアウォールルールは、ネットワーク内のどのVMに対しても一律に特定のポートを開放できるため、設定が容易であるという利点がある。しかし、実運用環境では、セキュリティリスクを最小限に抑えるため、「全てのインスタンス」をターゲットにするのではなく、特定のVMグループにのみルールを適用するべきである。具体的には、VMに「ネットワークタグ」を付与したり、「サービスアカウント」を利用したりすることで、より細かくアクセス制御を行うことが推奨される。これにより、必要なVMだけに限定して通信を許可し、不要な露出を避けることが可能になる。
最後に、検証で作成したVMやファイアウォールルールは、費用発生を避けるためにも、必ずクリーンアップしておくことが重要だ。gcloud compute firewall-rules deleteコマンドでファイアウォールルールを削除し、gcloud compute instances deleteコマンドでVMとそのディスクを削除すれば、今回の検証作業で作成したリソースはすべてきれいに削除される。
この一連のプロセスは、GCPのネットワークセキュリティの基礎を理解し、実際にファイアウォールルールを設定する上での重要なステップを示している。初心者であっても、これらの概念と手順を把握することで、より安全で効率的なクラウドインフラを構築する第一歩を踏み出せるだろう。