【ITニュース解説】Part-52: 🚀Google Cloud VPC Firewall Rules – Target as Specified Target Tags
2025年09月14日に「Dev.to」が公開したITニュース「Part-52: 🚀Google Cloud VPC Firewall Rules – Target as Specified Target Tags」について初心者にもわかりやすく解説しています。
ITニュース概要
Google CloudのVPCファイアウォールルールは、「Target Tags」を使うと特定のタグ付きVMにのみ通信を許可し、セキュリティを高める。全てのVMに適用するよりも安全で、本番環境での推奨設定だ。
ITニュース解説
ファイアウォールルールは、ネットワークを流れるデータ(トラフィック)の許可・拒否を制御するセキュリティの仕組みだ。ウェブサイトへのアクセスなど、外部からの接続を許可したり、内部から外部への特定の通信を制限したりする役割を持つ。Google CloudのVPC(Virtual Private Cloud)では、このファイアウォールルールを使って、仮想マシン(VMインスタンス)への通信を細かく制御できる。
これまで、ファイアウォールルールを適用する際、VPC内の「すべてのVMインスタンス」を対象とすることも可能だった。この方法は設定が簡単だが、特定の機能を持つVMだけでなく、関係のないすべてのVMが影響を受けてしまうため、セキュリティ上のリスクや管理の複雑さが増す可能性がある。例えば、ウェブサーバー用のVMとデータベースサーバー用のVMが同じVPC内にあったとして、「すべてのインスタンス」にウェブサーバーへのアクセスを許可するルールを設定してしまうと、データベースサーバーにも意図しないアクセス経路ができてしまう恐れがある。そこで今回注目するのが、「ターゲットタグ」を利用してファイアウォールルールを特定のVMにのみ適用する方法だ。これにより、よりきめ細かく、そして安全にネットワークアクセスを制御できるようになる。
まず、実際にVMインスタンスを作成し、ウェブサーバーをデプロイする手順から見ていこう。ここでは、Cloud ShellというGoogle Cloudのブラウザベースのシェル環境を利用する。nginx-webserver.shというシェルスクリプトは、VMインスタンス上でNginxというウェブサーバーソフトウェアをインストールし、簡単なHTMLページを作成してウェブコンテンツとして表示させるためのものだ。このスクリプトは、VMが起動する際に自動的に実行されるよう設定される。具体的には、Nginxのインストール、システム起動時の自動実行設定、そしてVMのホスト名やIPアドレスを含むシンプルなウェブページを/var/www/html/index.htmlに作成する。
VMインスタンスはgcloud compute instances createコマンドを使って作成される。myvm2-target-tagsという名前のVMをus-central1-aゾーンに、e2-microという小さなマシンタイプで作成し、事前に用意したmysubnet1というサブネットに接続する。ここで重要なのは、--metadata-from-file=startup-script=nginx-webserver.shというオプションで、先ほどのウェブサーバー設定スクリプトをVM起動時に実行させる点だ。
VMが作成され、ウェブサーバーがデプロイされても、この時点ではまだ外部からこのウェブサーバーにアクセスすることはできない。これは、Google CloudのVPCファイアウォールルールにおいて、「明示的に許可されない限り、すべての受信(Ingress)トラフィックは拒否される」というセキュリティ原則(暗示的な受信拒否、implied ingress deny)が働いているためだ。telnet <EXTERNAL_IP> 80やcurl <EXTERNAL_IP>といったコマンドを使ってVMの外部IPアドレス(ウェブサーバーが通常使用するポート80番)にアクセスしようとすると、接続が拒否されることを確認できる。
次に、このウェブサーバーに外部からアクセスできるようにするためのファイアウォールルールを作成する。このルールはGoogle Cloudコンソール(VPCネットワークの「ファイアウォール」セクション)またはgcloudコマンドで設定できる。
ルール設定の主な項目は以下の通りだ。
- 名前 (Name):
fw-ingress-80-target-tags。ルールを識別しやすい名前を付ける。 - 説明 (Description):
Allow inbound port 80 for specified target tags。このルールの目的を説明する。 - ネットワーク (Network):
vpc2-custom。このルールを適用するVPCネットワークを指定する。 - 優先度 (Priority):
1000。複数のルールがある場合、数値の低いルールほど優先される。 - 方向 (Direction):
Ingress。外部からVMへの通信(受信)を制御する。 - 一致した場合の処理 (Action on match):
Allow。ルールに合致するトラフィックを許可する。 - ターゲット (Targets): ここが最も重要だ。「
Specified target tags(指定されたターゲットタグ)」を選択し、具体的なタグ名としてmywebserverを設定する。これにより、このルールは、mywebserverというタグが付与されたVMインスタンスにのみ適用されることになる。 - 送信元フィルタ (Source filter):
IPv4 ranges。0.0.0.0/0は「すべてのIPv4アドレス」を意味し、インターネット上のどこからでものアクセスを許可する設定だ。 - プロトコルとポート (Protocols and ports):
TCPプロトコルの80番ポートを指定する。これはHTTP(ウェブサイト閲覧)で一般的に使用されるポートだ。
このファイアウォールルールを作成した時点では、まだVMにmywebserverというタグが付いていないため、ルールは有効にならない。そこで、作成したVMインスタンスにmywebserverタグを適用する。これはgcloud compute instances add-tags myvm2-target-tags --zone us-central1-a --tags mywebserverというコマンドで実行できる。このコマンドにより、VMインスタンスmyvm2-target-tagsにmywebserverというタグが追加される。
VMにタグが適用されると、先ほど作成したファイアウォールルールがこのVMに適用されるようになる。再びtelnet <EXTERNAL_IP> 80やcurl <EXTERNAL_IP>を試すと、今回は接続が成功し、ウェブサーバーが返したHTMLコンテンツが表示されることを確認できる。ウェブブラウザでVMの外部IPアドレスにアクセスしても、作成したウェブページが正常に表示されるはずだ。これは、ファイアウォールルールがmywebserverタグを持つVMからのポート80への受信トラフィックを許可するようになったためだ。
一連の作業が終わったら、不要なリソースを削除することが重要だ。これにより、Google Cloudの利用料金が無駄にかかるのを防ぎ、セキュリティ上のリスクも軽減できる。具体的には、gcloud compute firewall-rules delete fw-ingress-80-target-tagsコマンドでファイアウォールルールを削除し、gcloud compute instances delete myvm2-target-tags --zone=us-central1-a --delete-disks=allコマンドでVMインスタンスとそのディスクを削除する。
今回の学習の鍵は、「ターゲット=すべてのインスタンス」と「ターゲット=タグ」の違いを理解することだ。「すべてのインスタンス」をターゲットとする方法は、設定が単純だが、VPC内のすべてのVMにルールが適用されてしまうため、セキュリティ面で脆弱になりやすく、管理も大雑把になりがちだ。一方、「ターゲット=タグ」を使用する方法は、どのVMにファイアウォールルールを適用するかを、VMに付与されたタグによって非常に細かく制御できる。これにより、必要なVMだけに最小限のアクセス許可を与える「最小権限の原則」を適用しやすくなり、全体のセキュリティレベルを大幅に向上させることができる。本番環境でシステムを運用する際には、常にタグやサービスアカウントのような仕組みを利用して、ファイアウォールルールの適用範囲を限定することが、セキュリティと運用の両面で最善のプラクティスとされている。