こんにちは!クラウドインフラの世界へようこそ。
Google Cloud(GCP)でシステムを構築するとき、避けては通れないのが「ネットワークのセキュリティ」です。その中核を担うのが「VPCファイアウォールルール」になります。
「ファイアウォールって難しそう…」「パケットとかポート番号とか言われてもピンとこない…」と不安に思う必要はありません。今回は、難しい専門用語をできるだけ身近な「郵便配達」や「ホテルのセキュリティ」に例えて、一歩ずつ丁寧に紐解いていきます。
この記事を読み終える頃には、GCPのファイアウォールがどのように通信をコントロールしているのか、その仕組みがすっきりと頭に入っているはずです。それでは、一緒に学んでいきましょう!
—
1. VPCファイアウォールは「優秀なホテルの門番」
まず、GCPにおける「VPC(Virtual Private Cloud)」は、クラウド上に作られた「あなただけのプライベートな敷地(ホテル)」だと思ってください。
その敷地の中には、仮想サーバー(Compute Engineなど)という「お部屋」がいくつもあります。
この敷地の入り口やお部屋の前に立って、「誰を通して、誰を通さないか」を厳しくチェックしているのが「VPCファイアウォールルール」です。いわば、頼りになる「ホテルの門番」ですね。
門番は、届いた荷物(通信パケット)の宛先や、送ってきた人の名前(IPアドレス)、荷物の種類(ポート番号やプロトコル)を見て、通していいかどうかを判断しています。
—
2. 優先度(Priority)のルール:どちらの命令を信じる?
門番に「こういう人は通してね」「こういう人は通しちゃダメだよ」という指示書(ルール)を渡すとき、指示同士が矛盾してしまうことがあります。
例えば、
- 「Aさんは通していいよ」という指示
- 「怪しい人は全員通しちゃダメだよ」という指示
もし、Aさんがちょっと怪しい格好をして現れたら、門番は迷ってしまいますよね。
これを解決するのが「優先度(Priority)」という仕組みです。
0から65535の数字で決まる「優先順位」
GCPのファイアウォールルールには、必ず 0 から 65535 までの数字が割り当てられます。
ここが一番のポイントなのですが、「数字が小さいほど、優先度が「高い(=偉い)」というルールになっています。
- 優先度
100:超VIPな指示。何よりも最優先。 - 優先度
1000:標準的な指示。 - 優先度
65535:一番下っ端の指示。他に誰も何も言わなかったら、最後にこれに従う。
門番は、数字の小さい(=優先度の高い)指示書から順番にチェックしていきます。そして、「これだ!」と当てはまる指示が見つかった時点で、その荷物を通すか捨てるかを決定し、それより後ろの(数字が大きい)指示書は見ずにチェックを終えます。これを「ファーストマッチ」と呼びます。
最初から用意されている「暗黙のルール」
GCPのVPCを作ると、最初から一番最後の優先度 65535 に、誰も変更できない「暗黙のルール」が2つ用意されています。
| 通信の方向 | ルールの名前 | 優先度 | 挙動 | 門番の心の声 |
| :— | :— | :— | :— | :— |
| 外から中へ (インバウンド) | 暗黙の受信拒否 (implied-deny-ingress) | 65535 | すべて拒否(Deny) | 「基本、知らない人は誰も中に入れないよ!」 |
| 中から外へ (アウトバウンド) | 暗黙の送信許可 (implied-allow-egress) | 65535 | すべて許可(Allow) | 「中から外へ出かける人は、全員自由に行ってらっしゃい!」 |
つまり、あなたが何もルールを追加していない状態だと、「外からの通信はすべてシャットアウトされるけれど、中から外への通信は自由に出ていける」という安全な状態になっているのです。
—
3. ステートフル処理の魔法:「帰り道」は自動で通れる!
ここで、一つの疑問が浮かびませんか?
「中から外へのお出かけは自由(暗黙の送信許可)」だとしても、外にお買い物に行って帰ってきたときや、外のWebサイトにお願いしたデータが戻ってきたとき、「外から中への通信はすべて拒否(暗黙の受信拒否)」に引っかかって、戻ってこられないのでは?
これを解決してくれるのが、「ステートフル(Stateful)処理」という魔法のような仕組みです。
ホテルのオートロックと「一時的な通行証」
ステートフルとは、一言でいうと「門番が、誰が外に出ていったかを覚えている」ということです。
1. あなたがホテルの部屋から、外のコンビニ(外部のWebサーバー)へお買い物に出かけます。(これは送信許可なのでセーフ!)
2. このとき、門番はメモ帳に「〇号室の人が、今コンビニにお出かけしたよ」と記録(コネクションの追跡)します。
3. あなたがコンビニで買い物を終えて戻ってきました。
4. 門番は「外から中への立ち入り」なので、本来なら拒否するところですが、メモ帳を見て「あ、さっき出ていった〇号室の人だね。おかえりなさい!」と、ルールに関係なく自動的に通してくれます。
この仕組みのおかげで、私たちは「出ていくルール」を作るだけでよく、「そのお返事が戻ってくるためのルール」をわざわざ手動で作る必要がないのです。とてもスマートで、設定もシンプルになりますよね!
—
4. 実践!gcloudコマンドでルールを作ってみよう
それでは、実際にGCPのコマンドラインツール(gcloud)を使って、ファイアウォールルールを作る例を見てみましょう。
今回は、Webサーバーによく使われる「HTTP(80番ポート)」と「HTTPS(443番ポート)」の通信を、外から受け入れるためのルールを作ります。
以下のコードブロックを参考にしてください。
# ------------------------------------------------------------------
# Webサーバー(80番と443番ポート)へのアクセスを許可するルールを作成します。
# ------------------------------------------------------------------
gcloud compute firewall-rules create allow-web-traffic \
--network=default \
--action=ALLOW \
--direction=INGRESS \
--priority=1000 \
--source-ranges=0.0.0.0/0 \
--rules=tcp:80,tcp:443 \
--description="外部からのHTTPおよびHTTPS通信を許可します(優先度1000)"
パラメーターの優しい解説
上のコマンドで指定している設定値は、それぞれ以下のような意味を持っています。
allow-web-traffic:このルールに付ける名前です。分かりやすい名前を付けましょう。--network=default:このルールを適用するVPCネットワーク(ホテルの名前)です。--action=ALLOW:条件に合致した通信を「許可(ALLOW)」します。--direction=INGRESS:通信の方向です。今回は「外から中に入る(INGRESS)」通信を対象にしています。--priority=1000:このルールの優先度です。デフォルトの暗黙ルール(65535)よりもずっと小さい数字なので、こちらの許可ルールが最優先で適用されます。--source-ranges=0.0.0.0/0:通信を送ってきた相手のIPアドレスです。0.0.0.0/0は「世界中の誰からでも」という意味になります。--rules=tcp:80,tcp:443:許可する「荷物の種類」です。Webアクセスで使われるTCPの80番と443番のポートを指定しています。
このルールを作っておけば、ステートフル処理のおかげで、サーバーからクライアント(ユーザー)へ返すお返事の通信(アウトバウンド)は、自動的に許可されます!
—
5. まとめ:これだけは覚えておこう!
今回学んだGCPファイアウォールの基本を、ぎゅっと3つにまとめました。
1. 優先度(Priority)は「数字が小さいほど強い」
0が最強、65535が最弱です。- 上から順番にチェックして、当てはまった時点で終了します。
2. 初期状態は「出ていけるけど、入れない」
- 安全のために、外からの通信は暗黙的にすべて拒否されています。必要なものだけピンポイントで許可ルールを追加しましょう。
3. 帰り道は「ステートフル」にお任せ
- 行き(リクエスト)が許可されれば、帰り(レスポンス)のルールは作らなくても、自動的に門番が通してくれます。
ネットワークのセキュリティは、一見難しそうに見えますが、こうして「門番の動き」として捉えると、意外とシンプルで温かみのある仕組みだということが分かりますよね。
まずは自分で簡単なルールを作って、小さな仮想サーバーにアクセスできるか試してみるのが、一番の近道です。一歩ずつ、楽しみながら理解を深めていきましょう!
コメント