「インターネットから見えない要塞」を作る:プライベートサブネットの真実
こんにちは!インフラエンジニアとして日々クラウドの裏側を覗き込んでいるSREです。
AWSを触り始めると必ずぶつかるのが「サブネット」という概念。「パブリック?プライベート?何が違うの?」と戸惑う方も多いはずです。今回は、このネットワークの「境界線」について、小難しい専門用語を一旦置いておいて、日常の風景に例えながら紐解いていきましょう。
—
郵便配達で考える「インターネットゲートウェイ」
まずは、皆さんが住んでいる「マンション」を想像してみてください。
- パブリックサブネット = マンションの「エントランス(共有部)」
誰でも出入りが可能な場所です。郵便屋さんはここまで荷物を届けに来てくれますよね。AWSの世界では、この「外の世界と繋がる扉」を Internet Gateway (IGW) と呼びます。
- プライベートサブネット = 「各部屋の奥の金庫」
ここには直接外部の人は入れません。マンションの管理人が一度エントランスで受け取った荷物を、個別の部屋へ運ぶ仕組みが必要です。
つまり、プライベートサブネットとは「外部から直接アクセスできない隔離された部屋」のこと。データベースや機密データを扱うサーバーは、この「奥の部屋」に置くのがクラウド設計の鉄則なんです。
—
なぜ「隔離」が必要なのか?
もし、大切な情報を扱うデータベースがエントランスのすぐ横に置いてあったらどうでしょう? 誰でもノックできてしまいますよね。悪意ある攻撃者は、その扉を片っ端から叩いてこじ開けようとします。
プライベートサブネットに配置するということは、「そもそも、外からはあなたのサーバーの場所が見えないし、ノックする手段もない」という状態を作ることです。これがセキュリティの第一歩、「最小権限の原則」というやつですね。
—
どうやって隔離を実現するのか?
AWSでこれを実現するには、大きく分けて2つの「通行手形」を管理します。
1. ルートテーブル(道路の案内板)
パブリックサブネットの案内板には「外に出るには Internet Gateway を使いなさい」と書かれています。一方、プライベートサブネットの案内板からは、この記述を削除します。これで、サーバーは外の世界への出口を見失い、自分から外に出ることも、外から入ってくることもできなくなります。
2. セキュリティグループ(部屋のドアの鍵)
サブネットという境界線の他に、個別のサーバーにも「誰が通信していいか」という鍵をかけます。プライベートサブネットにあっても、この鍵が空いていれば侵入されてしまいます。
—
実践:Terraformで「プライベート」を定義する
実際にインフラコード(Terraform)で定義すると、こんなにシンプルです。ポイントは「 map_public_ip_on_launch 」を false にすることです。
# プライベートサブネットの定義
resource "aws_subnet" "private_subnet" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.2.0/24"
# ここを false にすることで、自動的に外から見えるIPを割り当てないようにする
map_public_ip_on_launch = false
tags = {
Name = "my-private-subnet"
}
}
# プライベートサブネット用のルートテーブル
resource "aws_route_table" "private_rt" {
vpc_id = aws_vpc.main.id
# ここには Internet Gateway へのルートを記述しない!
# これが「外に出られない」ことの証明になります
}
—
「外と話せないと困る」時はどうする?
「プライベートサブネットに置いたサーバーで、アップデートのために外部のサイトを見に行きたい!」という状況はよくありますよね。そんな時の魔法の道具が NAT Gateway です。
これは「マンションの管理人さん」のようなもの。住人(プライベートサーバー)が管理人(NAT Gateway)に「あれ買ってきて!」と頼むと、管理人が代わりに外へ買い出しに行ってくれるイメージです。
- サーバーから外へ:管理人(NAT Gateway)経由で通信可能。
- 外からサーバーへ:管理人(NAT Gateway)は誰からの注文か知っているので、勝手な訪問者はシャットアウト。
この仕組みを使うことで、「セキュリティは堅牢に、でも必要なアップデートは可能に」というバランスを実現できるのです。
—
最後に:ネットワークは「思いやり」
ネットワーク設計は、パケットという「手紙」がどこを通って、誰に届くのかを想像するクリエイティブな作業です。
「このサーバーは外から見える必要があるか?」「このデータは誰に見られるべきか?」と一つずつ問いかけること。それが、あなたの作ったインフラを強固な要塞に変えていきます。
最初は難しく感じるかもしれませんが、まずは「エントランス」と「奥の部屋」の区別をつけるところから始めてみてください。一歩ずつ、着実に。現場のSREとして、皆さんのクラウドデビューを心から応援しています!
コメント