VPCネットワークとサブネットで、あなた専用のネットワーク空間を作ることができるようになりましたね。でも、そのネットワークの中に建てた仮想マシンやデータベースは、誰でも勝手にアクセスできる状態だったらどうでしょう?それは困りますよね!
そこで登場するのが、「ファイアウォールルール(Firewall Rules)」です。ファイアウォールルールは、あなたのVPCネットワーク内のリソースに対する「通信の許可・不許可」を制御するためのものです。例えるなら、VPCネットワークというあなたの敷地の出入り口に立って、「誰が」「どこへ」「どんな方法で」通信できるかを厳しくチェックする「交通整理係」のような役割を果たします。
ファイアウォールルールとは何か?
ファイアウォールルールは、GCPのVPCネットワークに適用されるルールセットで、ネットワークトラフィックの「許可 (Allow)」または「拒否 (Deny)」を定義します。これにより、セキュリティを強化し、意図しないアクセスを防ぐことができます。
- インバウンド(Ingress): 外からVPCネットワーク内のリソースへの通信(入ってくる通信)
- アウトバウンド(Egress): VPCネットワーク内のリソースから外への通信(出ていく通信)
これらの通信の方向に対して、ルールを設定します。
イメージしてみてください:
あなたの家(GCPリソース)に、誰か(外部からの通信)が訪ねてきたとします。ファイアウォールルールは、その訪問者に対して「あなたはどの扉(ポート)から入ってきていいよ」「あなたはリビング(特定のIP)にだけ入っていいよ」「あなたは泥棒だから絶対に入れないよ」といった指示を出す警備員のようなものです。
ファイアウォールルールの主要な要素
ファイアウォールルールを設定する際には、主に以下の要素を組み合わせて「誰が」「何に」「何ができるか」を定義します。
- 方向 (Direction):
- Ingress(受信): 外部からVPCネットワーク内のリソースへの通信を制御します。
- Egress(送信): VPCネットワーク内のリソースから外部への通信を制御します。
- ポイント: ほとんどの場合、Ingressルールを設定することが多いですが、外部への不正な通信を防ぐためにEgressルールも重要です。
- アクション (Action):
- Allow(許可): 指定された通信を許可します。
- Deny(拒否): 指定された通信を拒否します。
- ポイント: 基本的に、GCPのファイアウォールルールは、明示的に許可されたもの以外は全て拒否されるという「暗黙の拒否」ルールが適用されます。つまり、特定の通信を許可したい場合は、必ずAllowルールを明示的に作成する必要があります。
- プライオリティ (Priority):
- ルールの優先順位です。0が最も高く、65535が最も低いです。
- 複数のルールが競合する場合、プライオリティの数値が小さいルールが優先されます。
- ポイント: 例えば、「全ての通信を拒否するルール」と「HTTP通信を許可するルール」が同時にあった場合、HTTP通信を許可したいなら、HTTP許可ルールのプライオリティを拒否ルールより低く(数値は小さく)設定する必要があります。
- ターゲット (Target):
- どのGCPリソースにこのルールを適用するかを指定します。
- 指定したネットワークタグを持つインスタンス: 最も一般的な方法です。例えば、「
web-server
」というネットワークタグをつけた仮想マシンだけにHTTPアクセスを許可する、といった設定ができます。 - サービスアカウント: 特定のサービスアカウントに紐付けられたリソースに適用することもできます。
- 全てのインスタンス: プロジェクト内の全ての仮想マシンに適用することも可能です。
- ポイント: ネットワークタグを使うと、柔軟かつ安全にルールを適用できます。
- ソース/宛先 (Source/Destination):
- Ingressの場合のソース(Source): どこからの通信を許可/拒否するか。
- IPアドレス範囲(CIDR):
0.0.0.0/0
(全てのIPアドレス)、192.168.1.0/24
(特定のネットワーク範囲)など。 - サービスアカウント: 特定のサービスアカウントを持つリソースからの通信。
- ネットワークタグ: 特定のネットワークタグを持つリソースからの通信。
- IPアドレス範囲(CIDR):
- Egressの場合の宛先(Destination): どこへの通信を許可/拒否するか。
- 同様にIPアドレス範囲などを指定します。
- ポイント:
0.0.0.0/0
は「全世界」を意味します。HTTP/HTTPSのように外部に公開する必要があるサービス以外で、この範囲を許可する場合は注意が必要です。
- Ingressの場合のソース(Source): どこからの通信を許可/拒否するか。
- プロトコルとポート (Protocols and Ports):
- どのプロトコル(TCP、UDP、ICMPなど)と、どのポート番号(HTTPは80、HTTPSは443、SSHは22など)の通信を許可/拒否するか。
- 例: TCPの80番ポート(HTTP)のみを許可する、TCPの22番ポート(SSH)のみを許可するなど。
デフォルトファイアウォールルール
GCPプロジェクトを作成すると、default
VPCネットワークにいくつかのデフォルトファイアウォールルールが自動的に作成されます。
default-allow-internal
: VPCネットワーク内の全てのインスタンスからの内部通信を許可(tcp:all
,udp:all
,icmp
)。これにより、同じVPC内の仮想マシン同士はデフォルトで通信できます。default-allow-ssh
: 全世界からのSSH(TCP 22番ポート)接続を許可。これは開発開始を容易にするためですが、本番環境では特定のIPアドレスからのみSSHを許可するように変更することが推奨されます。default-allow-rdp
: 全世界からのRDP(TCP 3389番ポート)接続を許可(Windows VM用)。default-allow-icmp
: 全世界からのICMP(pingなど)を許可。default-deny-all-ingress
: 明示的に許可されていない全ての受信通信を拒否(暗黙のルール)。default-allow-all-egress
: 全ての送信通信を許可(暗黙のルール)。
これらのデフォルトルールは、学習や簡単なテストには便利ですが、セキュリティの観点から本番環境では見直しが必要です。
ファイアウォールルールの設定例
- WebサーバーへのHTTP/HTTPSアクセスを許可する:
- 方向: Ingress
- アクション: Allow
- ターゲット:
web-server
タグを持つインスタンス - ソース:
0.0.0.0/0
(全世界) - プロトコルとポート:
tcp:80, tcp:443
- 特定のIPアドレスからのみSSH接続を許可する:
- 方向: Ingress
- アクション: Allow
- ターゲット:
ssh-access
タグを持つインスタンス - ソース:
あなたの自宅のグローバルIPアドレス/32
- プロトコルとポート:
tcp:22
まとめ:セキュリティの基本中の基本
ファイアウォールルールは、GCPリソースのセキュリティを確保するための最も基本的な仕組みの一つです。
- 「誰が」「何に」「何ができるか」を通信の観点から厳しく制御します。
- 明示的に許可されたもの以外は全て拒否されるという原則を常に意識しましょう。
- デフォルトルールをそのまま使うのは危険な場合があるため、セキュリティ要件に合わせてカスタマイズする習慣をつけましょう。
- 特に、SSH(22番ポート)やRDP(3389番ポート)は、アクセス元IPアドレスを限定することが非常に重要です。
GCPでシステムを構築する際は、まずファイアウォールルールで必要な通信だけを許可し、不要な通信はブロックするという意識を持つことが、安全なシステム運用の第一歩となります。