AWSの「~ゲートウェイ」系のサービスの中でも、重要なコンポーネントとして
- インターネットゲートウェイ(IGW)
- NATゲートウェイ(NAT GW)
があります。
今回の記事では、インターネットゲートウェイとNATゲートウェイの違いが分かるように、それぞれ分かりやすく説明していきます。
インターネットゲートウェイとは何か
パブリックサブネットとプライベートサブネットの違い
NATゲートウェイとは何か
インターネットゲートウェイとNATゲートウェイの違い
インターネットゲートウェイとは?
インターネットゲートウェイとは、VPCが外部のネットワークと接続するために必要となるAWSのコンポーネントです。
そもそも、VPC内のインスタンスというのは、このインターネットゲートウェイがなければ同じVPC内のインスタンスとしかやり取りすることができません。もちろん、インターネットにもつながりません。
VPC内のインスタンスがインターネットに接続したり、オンプレのシステムと接続したりすることを可能にするゲートウェイが、インターネットゲートウェイなのです。
インターネットゲートウェイと直接やり取りできるのは、パブリックサブネット内のインスタンスで、プライベートサブネット内のインスタンスはインターネットゲートウェイとは直接接続しません。
パブリックサブネットの通信は、インターネットゲートウェイを通る
プライベートサブネットの通信は、インターネットゲートウェイを通らない
インターネットゲートウェイを理解するには、まずパブリックサブネットとプライベートサブネットへの理解が不可欠です。以下で詳しく見ていきましょう。
パブリックサブネットとプライベートサブネットの違い
パブリックサブネットとは?(外部ネットワークへの接続方法)
パブリックサブネットとは、インターネットやVPC外部のネットワークにアクセスすることのできるサブネットのことです。
しかし、VPCにインターネットゲートウェイをアタッチするだけでは、パブリックサブネットが外部ネットワークに接続することはできません。パブリックサブネットのルーティングテーブルに、デフォルトゲートウェイとしてインターネットゲートウェイを追加しなければいけません。
詳しく説明していきます。
まず、パブリックサブネットをもつVPCを作成すると、そのパブリックサブネットのルーティングテーブルに自動的に以下が追加されます。
10.0.0.0/16 | local |
これの意味するところは、VPC内(10.0.0.0/16)インスタンスへの接続は、インターネットゲートウェイを介さない(local)で可能であるということです。
しかし、このままではVPC内への接続しかできません。そこで、ルーティングテーブルにいかを追加します。
10.0.0.0/16 | local |
0.0.0.0/0 | igw |
ここで、インターネットゲートウェイのIDをigwと設定しています。上記の意味するところは、全ての通信(0.0.0.0/0)は、インターネットゲートウェイへ向かう(igw)ということです。
ルーティングテーブルは上から順番に適用されるので、local向け以外の通信はインターネットゲートウェイに向かう設定になりました。これで、パブリックサブネットからインターネットへ接続することが可能になります。
このように、パブリックサブネットとは、ルーティングテーブルにデフォルトゲートウェイとしてインターネットゲートウェイを追加することで、インターネットに接続できるようになったサブネットのことです。
パブリックサブネットとは、ルートテーブルにインターネットゲートウェイへのルートが設定されたサブネット
プライベートサブネットとは?
プライベートサブネットとは、パブリックサブネットの逆つまりインターネットに直接接続できないサブネットのことです。プライベートサブネット内のインスタンスには、同じVPC内のインスタンスからしかアクセスできません。
では、プライベートサブネット内のインスタンスがインターネットに接続したいときどのように接続すればいいのでしょうか。その時に使うのがNATゲートウェイです。
プライベートサブネットとは、VPC外と直接通信できないサブネット
プライベートサブネットが、VPC外と通信するための方法の一つがNATゲートウェイのアタッチ
それでは、NATゲートウェイについて説明します。
NATゲートウェイとは?
NATゲートウェイとは、プライベートサブネット内のインスタンスがVPC外部ネットワークへ接続するために必要なコンポーネントです。プライベートサブネットは、直接インターネットゲートウェイに接続することはできません。その代わり、プライベートサブネット内のNATゲートウェイを経由し、NAT変換を行うことで、インターネットに接続することができるのです。
このときもやはり、プライベートサブネット内のインスタンスのデフォルトゲートウェイにはNATゲートウェイを設定する必要があります。
インターネットゲートウェイとNATゲートウェイの違い
違い①:そもそもの役割
上述したように、インターネットゲートウェイとは、VPCにアタッチしそのVPC内のインスタンスが、インターネットなどVPC外のネットワークと通信するためのコンポーネントです。
そして、インターネットゲートウェイを直接介すのはパブリックサブネットからの通信であり、プライベートサブネットとは直接通信しません。
一方、NATゲートウェイとは、プライベートサブネット内のインスタンスがVPC外のネットワークと通信するためのコンポーネントです。
例として、プライベートサブネットからVPC外ネットワークへの通信を考えます。
プライベートサブネット内のインスタンスのルートテーブルには、VPC外への通信をNATゲートウェイに送る設定をします。(NATゲートウェイはパブリックサブネットにアタッチします)
通信を受けたNATゲートウェイは、VPC外への通信なのでインターネットゲートウェイへ送ります。ちなみに、NATゲートウェイのルートテーブルにも、VPC外への通信をインターネットゲートウェイに送る設定をしておきます。
このように、プライベートサブネットからの通信は、パブリックサブネット上のNATゲートウェイを介してインターネットゲートウェイへ渡り、VPC外へ送ることができます。
違い②:サービスの可用性
ここでは、インターネットゲートウェイとNATゲートウェイの可用性の違いについて解説します。
前述したように、インターネットゲートウェイとはVPCにアタッチして使います。一つのAvailability Zone(AZ)がダウンしてもほかのAZではそのインターネットゲートウェイを利用することができます。つまり、インターネットゲートウェイはVPCに対して一つアタッチされていればVPC内の可用性は保たれます。
一方、NATゲートウェイとはAZにアタッチして使います。NATゲートウェイがアタッチされたあるAZがダウンしたとき、ほかのAZにもNATゲートウェイがアタッチされていなければNAT変換をすることができません。つまり、一つのAZに対して一つのNATゲートウェイがアタッチされていないと、VPC内の可用性は保たれません。
このように、インターネットゲートウェイとNATゲートウェイとでは、アタッチされる場所が違うことから障害に備える対応が異なってきます。
【まとめ】インターネットゲートウェイとNATゲートウェイの違い
今回は、インターネットゲートウェイとNATゲートウェイについて、使い方や可用性の観点から違いを説明してきました。簡単にまとめると以下の通りです。
インターネットゲートウェイはパブリックサブネットがVPC外へ直接通信するためのコンポーネントだが、NATゲートウェイはプライベートサブネットがVPC外と通信するためのコンポーネントの一つ。
インターネットゲートウェイはVPCにアタッチして利用するが、NATゲートウェイはAZにアタッチして利用する。
インターネットゲートウェイは1つのVPC内で冗長化されているが、NATゲートウェイは1つのAZ内でしか冗長化されていない。(各AZにNATゲートウェイが必要)