外部からの侵入を鉄壁ガード!「プライベートサブネット」で守る安全なインフラ設計の基本
こんにちは!クラウドの海を渡り歩くSREとして、日々インフラと格闘している筆者です。
みなさんは、クラウド上にサーバーを立てる時、「このサーバー、インターネットに繋ぐ必要があるんだっけ?」と立ち止まったことはありますか?
実は、何も考えずにすべてのサーバーをインターネットの玄関口に置いてしまうのは、家中のドアを全開にして鍵をかけずに外出するようなもの。非常に危険です。そこで登場するのが「プライベートサブネット」という考え方です。
今日は、初心者の方でもスッキリ理解できるように、郵便配達の仕組みに例えながら、「外部から隔離された安全地帯」の作り方を紐解いていきましょう。
—
インターネットとサブネットの関係を「郵便」でイメージしよう
まず、クラウドにおける「サブネット」を一つの「町」だと考えてみてください。
- パブリックサブネット(開かれた町): 誰でも住所を知っていれば手紙(リクエスト)を届けられるし、住民も自由に出歩ける場所。Webサーバーなどが置かれます。
- プライベートサブネット(要塞化された町): 外部からの立ち入りが一切禁止されている場所。ここにあるシステムは、外からの手紙を直接受け取ることができません。
プライベートサブネットの最大の強みは、「外から直接ノックされない」ことにあります。どれだけ攻撃者が住所(IPアドレス)を知っていても、その場所には物理的に(論理的に)たどり着けないようになっているのです。
—
プライベートサブネットはどうやって作るの?
クラウド(AWSやGCPなど)でこれを作るのは意外とシンプルです。鍵となるのは「ルートテーブル」という設定です。
イメージとしては、「町の出口にある信号機」を操作するようなものですね。
1. 外部への道(インターネットゲートウェイ)を塞ぐ
インターネットへ繋がるための「門(インターネットゲートウェイ)」を設置しない、あるいは、プライベートサブネットのルートテーブルには、その門へ向かうための地図(ルート)を書き込まないようにします。
2. インフラ設定のサンプル(Terraform編)
実際にコードで書くと、こんな雰囲気になります。ここではAWSを例に見てみましょう。
# プライベートサブネットの定義
resource "aws_subnet" "private_subnet" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.2.0/24" # この町の住所範囲
availability_zone = "ap-northeast-1a"
tags = {
Name = "My-Private-Subnet"
}
}
# ルートテーブルの設定(ここが肝!)
# ここにインターネットゲートウェイへのルートを「書かない」ことで、
# 外部から直接アクセスできない安全な孤島が完成します。
resource "aws_route_table" "private_rt" {
vpc_id = aws_vpc.main.id
# 外への道を作らない=外部からは見えない
tags = {
Name = "Private-Route-Table"
}
}
この設定により、プライベートサブネットにあるデータベースやバックエンドサーバーは、インターネットの荒波から守られることになります。
—
「じゃあ、アップデートはどうするの?」という疑問
「外からのアクセスを遮断したら、サーバーのアップデートやログの送信はどうするの?」という鋭い疑問がわきますよね。
ここで登場するのが「NATゲートウェイ」です。
これは「町の住民だけが外に出られる専用の通用門」のようなものです。
- 外からの侵入: 門番が「アポイントのない人は入れません!」と完全に拒否。
- 内からの発信: 住民が「ちょっと買い物に行ってくるね」と外に出ることは許可。
これを使うことで、セキュリティを担保しながら、必要な時だけ外の世界と安全に通信できるという、いいとこ取りの構成ができるんです。
—
現場で守るべき「たった一つの鉄則」
最後に、SREとしてこれだけは伝えておきたいことがあります。
「公開しなくていいものは、絶対にパブリックサブネットに置かない」
これに尽きます。例えば、データベース(RDSやCloud SQLなど)は、プライベートサブネットに置くのが基本中の基本です。万が一、Webサーバーが乗っ取られたとしても、データベースが隔離されていれば、被害を最小限に食い止めることができます。
まとめ:安全な設計への第一歩
1. 分ける: 外部公開が必要なものと、そうでないものを明確に分ける。
2. 閉じ込める: プライベートサブネットには「インターネットへの入り口」を作らない。
3. つなぐ: 必要があれば、NATゲートウェイ経由で安全に通信させる。
ネットワークの設計は、一度覚えてしまえば一生モノの武器になります。最初は難しく感じるかもしれませんが、まずは「パブリック」と「プライベート」の境界線を意識することから始めてみてください。
みなさんのクラウドライフが、安全で快適なものになりますように!また次の記事でお会いしましょう。
コメント