Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【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> 80curl <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 ranges0.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-tagsmywebserverというタグが追加される。

VMにタグが適用されると、先ほど作成したファイアウォールルールがこのVMに適用されるようになる。再びtelnet <EXTERNAL_IP> 80curl <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だけに最小限のアクセス許可を与える「最小権限の原則」を適用しやすくなり、全体のセキュリティレベルを大幅に向上させることができる。本番環境でシステムを運用する際には、常にタグやサービスアカウントのような仕組みを利用して、ファイアウォールルールの適用範囲を限定することが、セキュリティと運用の両面で最善のプラクティスとされている。

関連コンテンツ

関連IT用語

【ITニュース解説】Part-52: 🚀Google Cloud VPC Firewall Rules – Target as Specified Target Tags | いっしー@Webエンジニア