【ITニュース解説】Part-55: Google Cloud VPC Firewall Rules with Egress as Deny Rule
2025年09月14日に「Dev.to」が公開したITニュース「Part-55: Google Cloud VPC Firewall Rules with Egress as Deny Rule」について初心者にもわかりやすく解説しています。
ITニュース概要
Google CloudのVMは外部と自由に通信できるが、Egress Denyルールで特定のサイトへの通信をブロックできる。これはセキュリティ、情報漏えい対策、社内ルール遵守のために重要だ。記事ではVMから特定のウェブサイトへの通信を遮断する手順を解説する。
ITニュース解説
クラウド環境でシステムを運用する際、ネットワークのセキュリティは非常に重要になる。Google Cloud Platform(GCP)では、仮想マシン(VMインスタンス)がデフォルトでインターネットに自由に通信できる設定になっている。これは便利な反面、意図しない外部への通信が発生するリスクも伴う。特定の外部サービスへのアクセスを制限したい場合、セキュリティやコンプライアンス(法規制や企業規則の遵守)、あるいはコスト管理のために、このデフォルトの挙動を制御する必要がある。この制御に用いられるのが、「VPCファイアウォールルール」と呼ばれる機能である。
VPCファイアウォールルールは、Google CloudのVPC(Virtual Private Cloud、仮想プライベートクラウド)ネットワーク内で、VMインスタンスへの、またはVMインスタンスからのネットワークトラフィックを監視し、許可または拒否する門番のような役割を果たす。今回注目するのは「Egress Deny Rule」という種類のファイアウォールルールである。Egressとは「出力」、つまりVMインスタンスから外部へ出ていく方向の通信を指し、Denyは「拒否」を意味する。したがって、Egress Deny Ruleは、VMインスタンスから特定の宛先への出力通信をブロックするために使用される。例えば、社内サーバーがソーシャルメディアサイトや特定のドメインにアクセスするのを防ぎたい場合に役立つだろう。
具体的な設定方法と効果を検証するために、まずはテスト用のVMインスタンスを準備することから始める。myvm5-egressという名前のVMインスタンスをus-central1-aゾーンに作成し、mysubnet1というサブネットに配置する。このVMインスタンスは、現時点では何の通信制限も受けていない状態である。VMインスタンスが作成できたら、そのVMにSSHで接続し、通信テストに必要なdnsutilsやtelnetといったパッケージをインストールする。
ファイアウォールルールを設定する前に、目的のウェブサイトであるstacksimplify.comへの通信が可能であることを確認する。まず、nslookup stacksimplify.comコマンドを使って、このドメイン名に対応するIPアドレスを調べる。これにより、ウェブサイトの「住所」を特定する。次に、telnet stacksimplify.com 80およびtelnet stacksimplify.com 443コマンドを実行して、それぞれHTTP(ポート80)とHTTPS(ポート443)の通信が成功するかどうかをテストする。これらはウェブサイトを閲覧する際の基本的な通信プロトコルである。さらに、ping stacksimplify.comコマンドを実行して、基本的なネットワーク疎通確認(ICMPプロトコル)を行う。この時点では、これらのテストはすべて成功し、VMからstacksimplify.comへの通信が自由にできることを確認する。
次に、Egress Denyファイアウォールルールを作成し、stacksimplify.comへの出力通信をブロックする設定を行う。このルールの名前はfw-egress-deny-80-443-icmpとし、ルールに適用されるVPCネットワークはvpc2-customとする。ルールの「優先度」は1000に設定する。優先度は数字が小さいほど高く、複数のルールが競合する場合にどのルールが適用されるかを決定する。「方向」はVMから外へ向かう通信を制御するためEgressを選択し、「アクション」は通信を禁止するDenyを指定する。「ターゲット」はAll Instances in the networkと設定し、このVPCネットワーク内のすべてのVMインスタンスにこのルールを適用する。
最も重要な設定の一つが「宛先フィルタ」である。ここで、どのIPアドレスへの通信をブロックするかを指定する。先ほどnslookupで確認したstacksimplify.comのIPアドレス範囲99.84.160.0/24を指定する。この0/24はIPアドレスの範囲を示す表記で、この範囲内のすべてのIPアドレスが対象となることを意味する。そして、「プロトコル/ポート」では、ブロックしたい通信の種類を指定する。ウェブサイト閲覧に使われるTCPプロトコルの80番ポート(HTTP)と443番ポート(HTTPS)、そしてICMPプロトコル(pingに使用)を指定することで、これらの通信をまとめてブロックする。このように設定することで、VPCネットワーク内のVMインスタンスからstacksimplify.comへの特定の通信が拒否されるようになる。
ファイアウォールルールが作成され、適用された後、再度VMインスタンスに戻り、同じ通信テストを実行する。telnet stacksimplify.com 80、telnet stacksimplify.com 443、そしてping stacksimplify.comの各コマンドを実行する。すると、驚くべきことに、これらのテストはすべて「失敗」する。VMインスタンスはstacksimplify.comとの通信を確立できなくなる。これは、先ほど設定したEgress Denyファイアウォールルールが、期待通りに機能していることを明確に示している。VMインスタンスから指定されたIPアドレスとポートへの出力通信が、VPCファイアウォールによって効果的にブロックされたのである。
テストと検証が完了したら、不要なリソースは削除することが推奨される。これは、クラウド利用におけるコスト削減とセキュリティ維持の基本である。まず、作成したファイアウォールルールfw-egress-deny-80-443-icmpを削除する。次に、テスト用に作成したVMインスタンスmyvm5-egressも削除する。これにより、今回の検証で一時的に作成したリソースがすべてクリーンアップされ、Google Cloud環境が元の状態に戻る。
今回の検証を通して、Google CloudのVMインスタンスはデフォルトで外部への通信が許可されていること、そしてEgress Denyファイアウォールルールを使用することで、特定の宛先への不必要な出力通信を効果的にブロックできることが理解できた。この機能は、システムのセキュリティを強化し、組織のコンプライアンス要件を満たし、さらに不正な通信によるコスト発生を防ぐ上で不可欠な技術である。システムエンジニアにとって、このようなネットワークセキュリティの仕組みを理解し、適切に設定できる能力は、クラウド環境で安全かつ効率的なシステムを構築・運用するために非常に重要だ。