VPC設計でまず作るのが、パブリックとプライベートの2層構造です。なぜ分けるのか、どう作るのかを、基本形として解説します。
なぜ分けるのか
すべてのサーバをインターネットに直接さらすのは危険です。攻撃対象が増えます。そこで、
- 外部からアクセスされる必要があるもの(Webサーバ、ロードバランサ)→ パブリック
- 外部から直接触られたくないもの(DB、内部AP)→ プライベート
と分けて、隠せるものは隠します。これがセキュリティの基本です。
見分け方はルートテーブル
前提のおさらいです。サブネットの公開/非公開は、ルートテーブルにIGWへの経路があるかで決まります。
- パブリック:
0.0.0.0/0 → IGW - プライベート: IGWへの直接経路なし(必要なら
0.0.0.0/0 → NAT GW)
基本の3層(Web/AP/DB)
よくある構成は、こうなります。
パブリックサブネット
└─ ロードバランサ / Webサーバ(IGWで公開)
プライベートサブネット(AP層)
└─ アプリサーバ(NAT GW経由で外に出るだけ)
プライベートサブネット(DB層)
└─ RDS(外に出る必要もなし、最も奥に隔離)
外側から内側へ、だんだん厳しくしていきます。DBは一番奥で、インターネットとは直接やり取りしません。
AZをまたいで冗長化
各層を複数のAZに分けて配置すると、片方のAZ障害でもサービスが続きます。
AZ-a: パブリック(10.0.1.0/24) / プライベート(10.0.11.0/24)
AZ-c: パブリック(10.0.2.0/24) / プライベート(10.0.12.0/24)
ロードバランサが複数AZのWebサーバに振り分け、DBもマルチAZ構成にするのが定番です。
プライベートへの管理アクセス
プライベートのサーバに入りたい時は、
- 踏み台(Bastion)サーバをパブリックに置いて経由する
- または SSM Session Manager を使って、SSHポートを開けずに接続する
最近はSSMを使い、そもそも22番を公開しない設計が推奨されています。
まとめ
VPC設計の基本形は「公開が必要なものだけパブリック、あとはプライベートに隔離し、AZをまたいで冗長化」。外から内へ段階的に守る多層構造にするのが定石です。まずはWeb=パブリック、DB=プライベートの2層から作ると、感覚がつかめます。