【入門編】 プライベートサブネットの定義と外部接続の遮断 – クラウド&コンテナネットワーク実践ガイド

外部からの侵入を鉄壁ガード!「プライベートサブネット」で守る安全なインフラ設計の基本

こんにちは!クラウドの海を渡り歩く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ゲートウェイ経由で安全に通信させる。

ネットワークの設計は、一度覚えてしまえば一生モノの武器になります。最初は難しく感じるかもしれませんが、まずは「パブリック」と「プライベート」の境界線を意識することから始めてみてください。

みなさんのクラウドライフが、安全で快適なものになりますように!また次の記事でお会いしましょう。

コメント

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