はじめに
下記のような問題に2回間違えたので戒めとして供養します。
問題:
プライベートサブネット上のEC2インスタンスがインターネットへアクセスするために、作成する必要がある機能は次のうちどれか。
- VPCエンドポイント、NATゲートウェイ
- AWS Transit Gateway、NATインスタンス
- Amazon API Gateway、NATインスタンス
- インターネットゲートウェイ、NATゲートウェイ
この記事では以下を解説しています。
- プライベートサブネット
- NATゲートウェイ
- インターネットゲートウェイ
結論
上記の答えは4つ目の
インターネットゲートウェイ、NATゲートウェイ
です。
解説
VPC(Virtual Private Cloud)とは
VPCはVirtual Private Cloud(仮想プライベートクラウド)の略で、IBMでは以下のように定義を記載されています。
仮想プライベートクラウド(VPC)は、企業が共有パブリッククラウド・インフラストラクチャー上に独自のプライベートクラウドのようなコンピューティング環境を確立できるようにするパブリッククラウド製品です。
引用: IBM「仮想プライベートクラウド(VPC)とは」
超ザックリ解説としては、個別のネットワークそのものをサービスとしてもらっているものです。これは別のネットワークとは論理的に切り離されており、そのままだとインターネットとはつながっていないことになります。
また、CIDRと併せてルートテーブルについても簡単におさらいしましょう
- メインルートテーブル — VPC に自動的に割り当てられるルートテーブル。これは、他のルートテーブルに明示的に関連付けられていないすべてのサブネットのルーティングを制御します。
- カスタムルートテーブル — VPC 用に作成するルートテーブル。
- [送信先] — トラフィックを送信する IP アドレスの範囲 (送信先 CIDR)。例えば、CIDR 172.16.0.0/12 がある外部企業ネットワークなどです。
- [ターゲット] — 送信先トラフィックの送信に使用するゲートウェイ、ネットワークインターフェイス、または接続 (インターネットゲートウェイなど)。
引用: AWS「ルートテーブルの概念」
つまり、ルートテーブルで定義することで、各通信の宛先を決定できるという仕組みになります。
プライベートサブネット
プライベートサブネットの前に「サブネット」ですがこちらもIBMだと以下のような説明がされています。
TCP/IP のサブネットワーク機能により、1 つのネットワークを複数の論理ネットワーク (サブネット) に分割できます。 例えば、ある組織が 1 つのインターネット・ネットワーク・アドレスを使用し、そのアドレスを組織の外部のユーザーに知らせておく一方、内部ではその組織のネットワークを部門別に 複数のサブネットに構成することもできます。
引用: IBM「サブネット・アドレス」
こちらは一般的なサブネットについてですが、AWSにおけるサブネットもおおよそ同義です。
こちらについて上記のVPCと絡めてザックリ解説をすると、ネットワークを複数の小部屋に分割できるという話です。
その分け方に使用するのが「サブネットマスク」です。
各サブネットのIPアドレスの範囲を示すのに使われるのがCIDR表記です。
この分けられたサブネットにおいてそれぞれがパブリック/プライベートの切り分けは以下のように考えます。
パブリックサブネット: ルートテーブルに 0.0.0.0/0 → IGW が設定されているサブネット
プライベートサブネット:上記状態でない。
NATゲートウェイ
NATゲートウェイを理解する前に、NATを理解する必要があります。
NATはNetwork Address Translationの略で、IPアドレスを変換する役割があります。
その上で以下の説明を読んでみます。
NAT ゲートウェイは、ネットワークアドレス変換 (NAT) サービスです。NAT ゲートウェイを使用すると、プライベートサブネット内のインスタンスは VPC 外のサービスに接続できますが、外部サービスはそれらのインスタンスとの接続を開始できません。
引用: AWS「NAT ゲートウェイ」
問題の解説
上記の情報からVPCのプライベートサブネット上のEC2インスタンスはパブリックサブネットに配置されているNATゲートウェイを経由してインターネットゲートウェイからインターネットにへアクセスする、という経路をたどる必要があるので、それぞれルートテーブルで定義する必要があり、上記の結論となります。
最後に
以下の各キーワードはまた勉強して戒めの記事を書きます。
- VPCエンドポイント
- AWS Transit Gateway
- Amazon API Gateway