「えっ、ここから繋がっちゃうの?」――VPCのプライベートサブネットを“真の孤島”にするための守り方
こんにちは!クラウドの深淵を覗き込み、時にネットワークのパケットと対話するSREの現場からお届けします。
今回は、AWSのVPC(仮想プライベートクラウド)の中でも、特に「プライベートサブネット」の隔離という、エンジニアなら誰もが一度は冷や汗をかくテーマについて深掘りしていきましょう。
「プライベートサブネットなんだから、外の世界からは見えないし、外にも行けないはず……」
そう信じて疑わなかった設定が、実は穴だらけだったとしたら?今日は、郵便配達の仕組みに例えながら、皆さんのインフラを「真の孤島」にするための知恵を授けます。
—
1. そもそも、サブネットの「プライベート」ってどういう意味?
ネットワークの世界を、「大きなマンション」に例えてみましょう。
- VPC:巨大なマンションの敷地全体。
- パブリックサブネット:誰でも入れる「エントランス」。ここには「郵便受け(インターネットゲートウェイ)」があり、外の世界と直接手紙のやり取りができます。
- プライベートサブネット:住人しか入れない「居住区」。ここには外へ繋がる郵便受けがありません。
通常、プライベートサブネットにあるサーバーは、外に手紙(パケット)を出せません。しかし、もし誰かが誤って「居住区からエントランスを通って外へ出るための裏口(ルートテーブルのミス)」を作ってしまったらどうなるでしょう?
本来、隔離されているはずのサーバーが、インターネットという広大な大海原へさらされてしまうのです。これが、私たちが今日防ぎたい「インシデントのリスク」です。
—
2. 「やってしまった!」を防ぐための仕組み
よくある悲劇は、ルートテーブルの設定ミスです。本来は0.0.0.0/0(宛先がどこであれ)という行き先を、NATゲートウェイやローカル内に向けるべきところを、誤ってigw-xxxxxxxx(インターネットゲートウェイ)に向けてしまうケースです。
これだけで、プライベートサブネットは「パブリックサブネット」に成り下がってしまいます。
監査の心得:ルートテーブルを「覗き見」する
AWS CLIを使って、現在設定されているルートテーブルが安全かどうかをチェックする習慣をつけましょう。以下のコマンドは、特定のサブネットがどのルートテーブルを使っているかを確認する第一歩です。
# 特定のサブネットIDから、関連付けられているルートテーブルIDを特定する
aws ec2 describe-route-tables \
--filters "Name=association.subnet-id,Values=subnet-12345678" \
--query "RouteTables[].RouteTableId"
もし結果に igw- から始まるターゲットが含まれていたら、それは「赤い警告灯」が点滅しているのと同じです。
—
3. 「真の孤島」を維持するためのコードによる守護
「手作業で設定するのは怖い」というあなたは、ぜひ Infrastructure as Code (IaC) の力を借りましょう。Terraformを使えば、誤ったルートが追加されることを未然に防ぐ「ガードレール」を敷くことができます。
以下は、プライベートサブネットには「インターネットゲートウェイへのルートを絶対に許可しない」という意思を込めた設定例です。
# プライベートルートテーブルの定義
resource "aws_route_table" "private_rt" {
vpc_id = aws_vpc.main.id
# ここに明示的に igw へのルートを書かないことが最大の防御です
# もし NAT Gateway を使うなら以下のように書きます
route {
cidr_block = "0.0.0.0/0"
nat_gateway_id = aws_nat_gateway.main.id
}
tags = {
Name = "private-rt-do-not-add-igw" # 誰が見ても分かるように警告を含める
}
}
—
4. 現場のSREが教える「最後の砦」
どれだけ設定を慎重にしても、人間はミスをする生き物です。そこで、万が一の設定ミスを即座に検知する「守護神」を配置しましょう。
AWSには 「Config」 というサービスがあります。これを使うと、「ルートテーブルにIGWへのルートが含まれたら即座に通知する」という監視が可能です。
- Configルールの設定ポイント:
restricted-common-portsや、カスタムルールで「ルートテーブル内に0.0.0.0/0を持つルートが含まれる場合、ターゲットはnat-で始まっているか?」をチェックさせます。
もしこのルールに抵触した瞬間、Slackやメールに通知が飛ぶようにしておけば、インシデントが爆発する前に「消火活動」ができますね。
—
最後に:ネットワークは「思い込み」が一番の敵
ネットワークエンジニアとして長く現場にいると、技術的なスキルの差よりも、「自分の設定は正しいはずだ」という思い込みが、一番大きな穴を開けることを痛感します。
プライベートサブネットは、ただの「箱」ではありません。皆さんの大切なアプリケーションやデータを守るための、最後の砦です。
今日から、ご自身のVPCのルートテーブルを一つずつ開いてみてください。「本当にここから外へのルートはないかな?」と確認するその小さな一歩が、明日の大規模障害を防ぐ最大の対策になるはずです。
また次回の記事で、より深いクラウドの旅を楽しみましょう!それでは。
コメント