はじめる前に
- 必須AWS アカウントを持っていること
- 必須マネジメントコンソールにサインインできること
- 必須サブネットを置く土台となる VPC を用意できること(基本的な VPC を 1 つ作れれば十分です。細かい手順はここでは深く扱わず、ざっくり用意します)
- あると良い「サブネット」が VPC の中を区切った区画である、ということをなんとなく知っている
- あると良い「IP アドレスの範囲(CIDR ブロック)」という言葉を聞いたことがある
※ コマンドラインや SSH などの操作は一切ありません。すべてブラウザのコンソール上で完結します。
参照する公式ドキュメント
手順に迷ったときや、用語の意味を確かめたいときに開きましょう。
※ リンク切れの場合は、ページタイトルで検索してください。
背景・シナリオ
VPC の中をサブネットという区画に分けると、次に出てくるのが「この区画はインターネットにつなげたい/この区画はつなげたくない」という使い分けです。たとえば、外から見せたい Web サーバーはインターネットにつながる区画に、外に隠しておきたいデータベースはインターネットにつながらない区画に——というように配置を分けます。
このとき使われる呼び名が 「パブリックサブネット」(インターネットにつながる区画)と 「プライベートサブネット」(つながらない区画)です。今回はこの 2 つを作り、何が両者の違いを生んでいるのかを手を動かしながら確かめます。
サブネットを作るとき「パブリック」「プライベート」という選択肢があるの?
いいえ。サブネット自体に「これはパブリック」というスイッチがあるわけではありません。そのサブネットがインターネットへの経路を持つルートテーブルに結びついているかどうかで、結果的にパブリックかプライベートかが決まります。今回はその仕組みを実際に組み立てて体感します。
1 つの VPC(例:10.0.0.0/16)の中に パブリックサブネットとプライベートサブネットを 1 つずつ作り、パブリック側はインターネットへの経路(インターネットゲートウェイ向き)を持ち、プライベート側は持たない状態を、ルートテーブルの中身で確認できるようにする。
つくる構成
VPC にインターネットへの出入口(インターネットゲートウェイ)を 1 つ取り付け、2 つのサブネットそれぞれに別々のルートテーブルを結びつけます。パブリック側だけが「インターネット行きの経路」を持つ点がポイントです。CIDR は VPC の範囲内で重ならなければ自由に決めて構いません。
※ 数値は一例です。VPC の範囲内で重ならなければ、CIDR は自由に決められます。
要件
以下の要件を満たす構成を作成してください。
| No | 要件 |
|---|---|
| 1 | リージョンは「東京(ap-northeast-1)」を使用する。 |
| 2 | 土台となる VPC を 1 つ用意する。すでにあればそれを利用し、なければ「VPC のみ」でざっくり作成する。VPC の CIDR は任意でよい(例:10.0.0.0/16)。 |
| 3 | その VPC の中にサブネットを 2 つ作成する。片方をパブリック用、もう片方をプライベート用とする。各 CIDR は VPC 内で重ならないように自由に決める(例:10.0.1.0/24 と 10.0.2.0/24)。名前タグは public-subnet / private-subnet、アベイラビリティーゾーンは ap-northeast-1a とする。 |
| 4 | インターネットゲートウェイを 1 つ作成し、上記の VPC にアタッチする。 |
| 5 | パブリック用のルートテーブルを作成し、宛先 0.0.0.0/0(すべてのインターネット向き)のルートをインターネットゲートウェイに向けて追加する。このルートテーブルを パブリックサブネットに関連付ける。 |
| 6 | プライベートサブネットは、インターネットへの経路を持たないルートテーブル(VPC 内 local のみ)に関連付けた状態にする。 |
| 7 | パブリックサブネットの設定で「自動割り当てパブリック IPv4 アドレス」を有効にする。 |
構築の進め方
下のステップは「どの順で進めると迷いにくいか」の道しるべです。各ステップで「なぜそうするのか」を意識しながら進めると、理解が定着しやすくなります。
-
マネジメントコンソールにサインインし、リージョンを合わせる
ブラウザで AWS マネジメントコンソールにサインインします。画面右上のリージョン名をクリックして、「アジアパシフィック(東京)ap-northeast-1」になっていることを確認してください。
リージョンを最初に決める理由VPC・サブネット・インターネットゲートウェイ・ルートテーブルは、すべて作成したリージョンにしか表示されません。「あとから見つからない」を防ぐため、最初にそろえておきましょう。
-
土台となる VPC と 2 つのサブネットを用意する
VPC コンソールの左メニュー「お使いの VPC」に使えそうな VPC があればそれを使い、無ければ「VPC を作成」→「VPC のみ」で 1 つ作ります(CIDR は任意、例:
10.0.0.0/16)。続けて左メニュー「サブネット」→「サブネットを作成」で、その VPC の中にサブネットを 2 つ作ります。名前タグは
public-subnet/private-subnet、アベイラビリティーゾーンはどちらもap-northeast-1a、CIDR は重ならないように決めます(例:10.0.1.0/24と10.0.2.0/24)。この時点では 2 つは同じ作りたてのサブネットは、まだどちらもパブリック/プライベートの区別がありません。これから設定で差をつけていきます。名前は分かりやすさのために先に付けておくだけです。
-
インターネットゲートウェイを作成し、VPC にアタッチする
左メニュー「インターネットゲートウェイ」→「インターネットゲートウェイの作成」で 1 つ作成します(名前は例:
my-igw)。作成直後は 「Detached(未接続)」の状態です。作ったゲートウェイを選び、「アクション」→「VPC にアタッチ」から、ステップ 2 の VPC に取り付けます。
なぜアタッチが必要なの?インターネットゲートウェイは、VPC とインターネットの間の「出入口」です。VPC に取り付けて初めて、その VPC からインターネットへ出る道が物理的に用意されます。ただし、取り付けただけでは通信は始まりません。次のステップで「その道を通る」という案内(ルート)を書きます。
-
パブリック用ルートテーブルを作り、インターネット行きの経路を書く
左メニュー「ルートテーブル」→「ルートテーブルを作成」で、ステップ 2 の VPC を指定して 1 つ作ります(名前は例:
public-rt)。作ったルートテーブルを選び、「ルート」タブ →「ルートを編集」→「ルートを追加」で次を追加して保存します。
送信先(Destination) 0.0.0.0/0ターゲット(Target) 「Internet Gateway」を選び、ステップ 3 で作った my-igwを指定送信先 0.0.0.0/0 のターゲット
インターネットゲートウェイVPC とインターネットの間の出入口に向けるNAT ゲートウェイプライベートサブネット側から外へ出る経路用↳パブリックサブネットを直接インターネットに出すので、インターネットゲートウェイを選びます
0.0.0.0/0 ってどういう意味?「VPC の中(local)以外のすべての宛先」を表す書き方です。これをインターネットゲートウェイに向けることで、「知らない宛先=外の世界へはゲートウェイ経由で行く」という案内になります。これがパブリックサブネットの正体です。
-
パブリック用ルートテーブルをパブリックサブネットに関連付ける
同じ
public-rtの「サブネットの関連付け」タブ →「サブネットの関連付けを編集」を開き、public-subnetにチェックを入れて保存します。関連付けて初めて効くルートテーブルは「どのサブネットに結びつけたか」で効果が決まります。インターネット行きの経路を書いても、サブネットに関連付けなければそのサブネットには影響しません。ここで
public-subnetをパブリックにします。 -
プライベートサブネットを「外への経路なし」に保つ
プライベートサブネットには、インターネット行きの経路を書きません。確実にするため、もう 1 つルートテーブルを作り(名前は例:
private-rt、ルートは追加しない)、private-subnetに関連付けておくと分かりやすいです。このルートテーブルには
localのルート(VPC 内だけの通信)しかないため、プライベートサブネットからインターネットへ出る道はありません。何もしないことが設定になるプライベートにするコツは「インターネット行きのルートを足さないこと」です。専用のルートテーブルを用意して関連付けておくと、あとから誤って外向きルートが付くのを防げて、状態も読み取りやすくなります。
-
パブリックサブネットの「パブリック IPv4 自動割り当て」を有効にする
「サブネット」一覧で
public-subnetを選び、「アクション」→「サブネットの設定を編集」から「パブリック IPv4 アドレスの自動割り当てを有効化」にチェックを入れて保存します。経路とアドレスはセットインターネットと直接やり取りするには、外から見えるパブリック IP アドレスが必要です。この設定を有効にすると、このサブネットで起動したサーバーに自動でパブリック IP が付くようになります。プライベートサブネットでは有効にしません。
-
2 つのルートテーブルを見比べて確認する
「ルートテーブル」一覧で
public-rtとprivate-rtをそれぞれ開き、「ルート」タブを見比べます。public-rtには0.0.0.0/0 → インターネットゲートウェイがあり、private-rtにはlocalしか無い——という違いが見えれば完成です。各ルートテーブルの「サブネットの関連付け」タブで、想定どおりのサブネットに結びついているかも確認しましょう。
つまずきポイント
初学者がよく引っかかる箇所を先回りでまとめました。答えそのものは載せていませんが、「どこを見直せばよいか」の手がかりとして使ってください。
「パブリックサブネットなのに外につながる構成になっていない気がする」
インターネットへ出るには、いくつかの条件がそろう必要があります。①インターネットゲートウェイが VPC にアタッチされているか、②ルートテーブルに 0.0.0.0/0 → インターネットゲートウェイのルートがあるか、③そのルートテーブルがパブリックサブネットに関連付けられているか、④パブリック IP の自動割り当てが有効か——のどれかが欠けていることが多いです。順に見直してみましょう。
「関連付けたつもりが、別のサブネットに付いていた」
サブネットを明示的にルートテーブルへ関連付けていない場合、そのサブネットには VPC の「メインルートテーブル」が自動で効きます。意図せずメインルートテーブルにインターネット行きルートを足してしまうと、関連付けていないサブネットまでパブリックになってしまうことがあります。各ルートテーブルの「サブネットの関連付け」タブを開き、どのサブネットに何が結びついているかを一つずつ確認してみてください。
完了チェック
要件の再確認ではなく、画面のどこを見れば達成を確認できるかをまとめました。VPC コンソールを開いて、次を順に確かめましょう。
- 画面右上のリージョン表示が 「東京 / ap-northeast-1」になっている。
- 「サブネット」一覧に
public-subnetとprivate-subnetの 2 行があり、どちらも状態が 「Available(利用可能)」になっている。 - 「インターネットゲートウェイ」一覧で、作成したゲートウェイの状態が 「Attached」で、アタッチ先が用意した VPC になっている。
public-rtの「ルート」タブに、送信先0.0.0.0/0・ターゲットがインターネットゲートウェイの行がある。public-rtの「サブネットの関連付け」タブにpublic-subnetが表示されている。private-subnetに効いているルートテーブルの「ルート」タブにはlocalしかなく、0.0.0.0/0の行がない。public-subnetの詳細で「パブリック IPv4 アドレスの自動割り当て」が「はい(有効)」になっている。
考えてみよう
手を動かすことに加えて、次の問いに自分の言葉で答えられるようにしておくと、理解がより深まります。
- 2 つのサブネットは、作り方も置き場所もほとんど同じでした。それでも片方がパブリック、もう片方がプライベートになります。両者の違いを生んでいる決め手は何でしょうか。
ヒント
サブネットそのものに「パブリック/プライベート」というスイッチはありませんでした。差がついたのは、サブネットに結びつけたルートテーブルの中身です。「インターネットゲートウェイ行きの経路を持っているかどうか」という観点で振り返ってみましょう。 - プライベートサブネットに置いたサーバーから、インターネット上にある更新プログラムを取りに行きたくなったとします。「自分から外へは出たいが、外からは入ってきてほしくない」という非対称なつながり方は、どうすれば実現できそうでしょうか。
ヒント
今回のプライベートサブネットは、外向きの経路を一切持たない「完全に閉じた」区画でした。外から入られずに外へ出る道だけを用意する仕組みが AWS には用意されています(名前に「NAT」が付くサービスがその役割を担います)。どんな経路を足せば「出るのは可・入るのは不可」になるか、調べて考えてみましょう。答えは 1 つに断定せず、考え方を整理できれば十分です。 - パブリックサブネットで「パブリック IP の自動割り当て」だけを有効にして、ルートテーブルにはインターネット行きの経路を書かなかったとします。そのサブネットのサーバーはインターネットにつながるでしょうか。
ヒント
パブリック IP アドレス(外から見える住所)と、ルートテーブルの経路(外へ向かう道順)は別物です。住所だけあっても道が無ければ進めません。「アドレス」と「経路」が両方そろって初めて通信できる、という関係から考えてみましょう。
後片づけ
作ったものを片づけるところまでが一連の流れです。今回作成したリソースは無料なので、学習を続けるならそのまま残しておいて構いません。整理したい場合は、関連付けや接続を先に外してから本体を消すという順番で進めます。
- ルートテーブルの関連付けを外す:
public-rt/private-rtの「サブネットの関連付け」から、関連付けを解除する。 - ルートテーブルを削除:このハンズオン用に作った
public-rt/private-rtを選び、「アクション」→「ルートテーブルを削除」。 - インターネットゲートウェイをデタッチ → 削除:
my-igwを選び、「アクション」→「VPC からデタッチ」してから、「インターネットゲートウェイを削除」。 - サブネットを削除:
public-subnet/private-subnetを選んで「アクション」→「サブネットを削除」。 - VPC を削除(作った場合のみ):このハンズオン用に新しく VPC を作ったなら、「お使いの VPC」からその VPC を削除する。
削除するのは自分で作ったものだけ
一覧には、最初から用意されている「デフォルト VPC」やそのサブネット・ルートテーブル・インターネットゲートウェイも並んでいます。間違えて削除しないよう、このハンズオンで自分が付けた名前(public-subnet / private-subnet / public-rt / private-rt / my-igw)のものだけを選んで削除してください。もし消してしまっても、同じ手順でいつでも作り直せます。
コストに関する注意: このハンズオンで扱う VPC・サブネット・ルートテーブル・インターネットゲートウェイは、いずれも作成・保有しているだけでは料金はかかりません。今回の範囲では課金されることはありません。ただし、プライベートサブネットから外へ出る経路を作るための NAT ゲートウェイ、それに付ける Elastic IP(割り当てたまま使わない場合も含む)、サブネットの中に起動する EC2 などは料金が発生します。これらを追加した場合は、使い終えたら上の「後片づけ」を参考に削除しておきましょう。