【入門編】 プライベートサブネットからのインターネット接続を遮断するセキュリティ境界の検証 – クラウドインフラと仮想化ネットワーク実践ガイド

「えっ、ここから繋がっちゃうの?」――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のルートテーブルを一つずつ開いてみてください。「本当にここから外へのルートはないかな?」と確認するその小さな一歩が、明日の大規模障害を防ぐ最大の対策になるはずです。

また次回の記事で、より深いクラウドの旅を楽しみましょう!それでは。

コメント

タイトルとURLをコピーしました