【AWS基礎】よく使うゲートウェイの特徴・違い・料金まとめ
2022.07.22
AWSの各種ゲートウェイについて、それぞれの特徴と利用料金、設定方法をご紹介します。この記事を読むと、各種ゲートウェイの特徴を理解して、AWSで構築したい環境に応じた最適なゲートウェイを選べるようになります。また、AWS環境の構成図を見たときに素早く正確に構成を理解できるようになります。
はじめに
AWSのゲートウェイの種類はとても多いですが、それぞれ異なる役割を担っています。最初に、よく使うゲートウェイの特徴をざっくり確認しましょう。
インターネットゲートウェイとは、パブリックサブネット内のリソースをインターネットと双方向に接続する時に使われる、リソースと外部のインターネットをつなぐトラフィックの出入口のようなものです。
NATゲートウェイとは、サブネット内のリソースからVPC外に向けて一方的にインターネット接続したい時に使われる、トラフィックの出口のようなものです。
仮想プライベートゲートウェイとは、1つのVPCとオンプレミス環境をVPN経由で接続する時にVPCに設置する通信の出入口です。仮想プライベートゲートウェイとVPCの対応は1対1です。
トランジットゲートウェイとは、複数のVPCとオンプレミス環境をVPN経由で接続する時にVPCに設置する通信の出入口です。1つのトランジットゲートウェイに複数のVPCをアタッチでき、同じトランジットゲートウェイにアタッチされたVPC同士で通信することも可能です。
カスタマーゲートウェイは、VPCとオンプレミス環境をVPN経由で接続する時にAWSアカウントに設置する出入口で、オンプレミス側を特定する際に使います。
表にするとこんな感じです。
ゲートウェイの種類 | 接続対象 | 接続方法 | 特徴 |
---|---|---|---|
インターネットゲートウェイ | パブリックサブネット ⇔ 外部 | インターネット(双方向) | サブネットを外部環境と双方向にインターネット接続したい時にVPCにアタッチして使う (インターネットゲートウェイに接続できる状態のサブネットを「パブリックサブネット」と呼ぶ) |
NATゲートウェイ | サブネット ⇒ 外部 | インターネット(外向き一方通行) | サブネット内のリソースを外部環境とアウトバウンドに限ってインターネット接続したい時にサブネットにアタッチして使う |
仮想プライベートゲートウェイ | 1つのVPC ⇔ オンプレミス環境 | VPN(双方向) | 単一VPC内のリソースとオンプレミス環境をVPNで接続したい時にVPCにアタッチして使う |
トランジットゲートウェイ | 1) 複数のVPC ⇔ オンプレミス環境 2) VPC ⇔ VPC |
1) VPN(双方向) 2) AWS内のネットワーク(双方向) |
1)複数VPC内のリソースとオンプレミス環境をVPNで接続したい時にVPCにアタッチして使う 2) アカウント内外問わず、複数のVPCを接続したい時にVPCにアタッチして使う |
カスタマーゲートウェイ | オンプレミス環境 ⇔ VPC | VPN(双方向) | オンプレミス環境とVPCをVPNで接続したい時にAWS環境内に作成して使う |
インターネットゲートウェイ (Internet Gateway)とは
インターネットゲートウェイは、サブネットをインターネット経由で外部環境と相互に通信できるようにしたい場合に使用します。インターネットゲートウェイをアタッチしたVPC内のサブネットのうち、ルートテーブルにインターネットゲートウェイへのルートがある場合は「パブリックサブネット」と呼ばれ、インターネットと相互に接続できます。一方、ルートテーブルにインターネットゲートウェイへのルートがない場合は「プライベートサブネット」と呼ばれ、インターネットに接続できません。
インターネットゲートウェイをVPCにアタッチして、パブリックにしたいサブネットのルートテーブルにインターネットゲートウェイへのルートを追加すると、サブネットがインターネットに接続できる「パブリックサブネット」になります。デフォルトVPCには、自動的にインターネットゲートウェイが付与されます。
インターネットゲートウェイの設置や利用に対して料金は発生しません。(2022年6月時点)
インターネットゲートウェイの設定方法
前提
VPC内に2つのサブネットがあり、そのうち1つのサブネット内にはEC2インスタンスを作成した状態から始めます。EC2インスタンスを作成した方のサブネットにインターネットゲートウェイをアタッチして、パブリックサブネットにしていきます。
補足:VPC内のインスタンスがインターネットと接続するのに必要な4つの条件
[AWS公式ページから引用]1. インターネットゲートウェイが VPC に接続されていること。
2. パブリックサブネットに関連付けられたルートテーブル (カスタムルートテーブルを含む) に、インターネットゲートウェイへのルートがあること。
3. VPC に関連付けられた セキュリティグループが、インターネットとの間で送受信されるトラフィックのフローを許可すること。
4. VPC 内のインスタンスに、パブリック IP アドレスまたは接続済みの Elastic IP アドレスのいずれかがあること。引用元: インターネットゲートウェイを作成して VPC に接続するにはどうすればよいですか?
https://aws.amazon.com/jp/premiumsupport/knowledge-center/create-attach-igw-vpc/
インターネットゲートウェイの作成
まずはインターネットゲートウェイを作成します。インターネットゲートウェイのページを開き、画面右上にある「インターネットゲートウェイの作成」をクリックします。
表示された画面で、インターネットゲートウェイの名前を入力し、画面左下の「インターネットゲートウェイの作成」をクリックします。インターネットゲートウェイの作成が完了しました。
このままではインターネットゲートウェイは、状態が「Detached」となっていてまだ機能しません。インターネットゲートウェイをVPCにアタッチし、さらにパブリックにしたいサブネットが関連付けられているルートテーブルにインターネットゲートウェイへのルートを記述する必要があります。
インターネットゲートウェイをVPCにアタッチ
インターネットゲートウェイの作成が完了したら、VPCにアタッチします。インターネットゲートウェイ作成後すぐの画面では、作成完了画面の右上に「VPCへアタッチ」とポップアップを設置してくれています。ポップアップが見つからない場合には、インターネットゲートウェイのページで対象のゲートウェイにチェックを入れ、画面右上の「アクション」から「VPCにアタッチ」と進みます。
「VPCを選択」の項目をアクティブにすると、選択肢がプルダウン形式で表示されるので、インターネットゲートウェイをアタッチしたいVPCを選択し「インターネットゲートウェイのアタッチ」をクリックします。
無事にアタッチが完了し、状態が「Attached」と表示されています。
インターネットゲートウェイをVPCにアタッチしただけではまだ機能しないので、続いてルートテーブルに記述します。 ルートテーブルの画面でパブリックサブネットにしたいサブネットと関連付けられているルートテーブルにチェックを入れます。画面下半分に表示される「ルート」タブを表示させ、「ルートを編集」をクリックすると下のような画面が表示されます。
表示された画面左下の「ルートを追加」をクリックします。ターゲットの入力項目では、選択肢がプルダウンで表示されるので「インターネットゲートウェイ」を選択します。インターネットゲートウェイの候補が表示されるので、このサブネットに設置したいものを選択します。
送信先を「0.0.0.0/0」と記述すると、インターネットゲートウェイはすべてのIPv4アドレスとの通信が可能になります。必要項目を入力したら「変更を保存」をクリックします。
ルートテーブルにインターネットゲートウェイが追加され、ステータスがアクティブになっていることが確認できました。
これでインターネットゲートウェイの設定がすべて完了しました。パブリックサブネットは、インターネットゲートウェイを介してインターネットと相互に接続できます。
接続確認
Tera TeamからEC2インスタンスにログインして、Googleのサイトにpingを打ってみます。
サーバ名が「ec2-user@ip-10-0-0-211」となっているので、パブリックサブネット内に設置されたEC2であることが確認できます。
pingに対してレスポンスがあるので、インターネットへの接続ができていることが確認できました。
インターネットゲートウェイ設定後のVPCとサブネットは、以下のような状態になりました。
考慮したいこと
セキュリティ
VPCにデフォルトで設定されているセキュリティグループは、すべてのインバウンドトラフィックを許可します。制限を設けたい場合は、セキュリティグループを作成・関連付けしてインバウンドアクセスのルールを設定しましょう。
Elastic IPアドレス
デフォルトで付与されるパブリックIPアドレスは、インスタンスを再起動するたびに変更されます。常に同じIPアドレスで外部からインスタンスにアクセスできるようにしたい場合は、Elastic IPを取得してインターネットゲートウェイに割り当てましょう。Elastic IPは一定条件を満たさない場合、利用料金が発生します。課金条件を確認したうえで作成しましょう。
NATゲートウェイ (NAT Gateway)とは
NATゲートウェイは、VPCをインターネットに対してアウトバウンド通信できるようにしたい場合に使用します。NATゲートウェイは、VPC内のパブリックサブネットやプライベートサブネットにアタッチします。複数のサブネットを1つのNATゲートウェイに接続できます。
料金は、NATゲートウェイが使用可能な時間と処理データ量に対して課金されます。(2022年6月時点)
NATゲートウェイは、アタッチしたサブネットのプライベート IP アドレスを NAT ゲートウェイのパブリック IP アドレスに置き換えることで、VPC外へのアクセスを可能にします。
パブリックサブネットに設置した場合(デフォルト)
プライベートサブネット内のインスタンスは、NATゲートウェイ経由でアウトバウンドのインターネット接続ができるようになります。NATゲートウェイは、プライベートサブネット内からのトラフィックを、VPCにアタッチされたインターネットゲートウェイ経由でインターネットに接続します。その結果、プライベートサブネット内のインスタンスは、NATゲートウェイとインターネットゲートウェイを経由して外部のインターネットにアウトバウンド接続できます。 この場合、Elastic IPをNATゲートウェイに割り当てる必要があります。
プライベートサブネットに設置した場合
NATゲートウェイを使って、プライベートサブネットのインスタンスは、他のVPCまたはオンプレミス環境に接続できます。NATゲートウェイに送られたプライベートサブネットからのトラフィックは、他VPCやオンプレミス環境との通信用に用意したトランジットゲートウェイや仮想プライベートゲートウェイ経由で通信相手のVPCやオンプレミス環境にルーティングされます。この場合、Elastic IPをナットゲートウェイに割り当てることはできません。
NATゲートウェイの設定方法
設定方法の例として、パブリックサブネットにNATゲートウェイをアタッチする方法を紹介します。下記のイラストのような状態から始め、NATゲートウェイをパブリックサブネットにアタッチして、プライベートサブネット内のEC2インスタンスがインターネット接続できる状態にします。
プライベートサブネットからインターネットにアクセスできないことを確認
パブリックサブネット内のEC2インスタンスを踏み台サーバとして、SSH認証でプライベートサブネット内のサーバにログインします。ログイン手順は、【AWS】初の環境構築② ~踏み台サーバー経由でプライベートサブネット内のインスタンスに接続してみた~(外部サイト)で詳しく記述されています。
プライベートサブネット内のEC2インスタンス(プライベートIPアドレス:10.0.1.82)からgoogleのサイトにpingを打っても応答がないことから、インターネットにアクセスできないことが確認できました。
NATゲートウェイの作成
NATゲートウェイを作成します。NATゲートウェイのページを開き、画面右上にある「NATゲートウェイの作成」をクリックします。 Elastic IPは事前に取得していなくても、NATゲートウェイの作成画面で「Elastic IPを割り当て」をクリックするだけで取得できます。
NATゲートウェイ作成後すぐは、状態が「Pending」となっていますが、数分待つと「Available」に代わります。(今回は3分程度で状態が更新されました)
NATゲートウェイをプライベートサブネットのルートテーブルに記述
ルートテーブルの画面でインターネットに接続したいサブネットのルートテーブルにチェックを入れます。画面下半分に表示される「ルート」タブを表示させ、「ルートを編集」をクリックします。表示された画面左下の「ルートを追加」をクリックします。
ターゲットを入力する項目は、選択肢がプルダウンで表示されるので「NATゲートウェイ」を選択します。NATゲートウェイの候補が表示されるので、このサブネットに設置したいものを選択します。
送信先を「0.0.0.0/0」と記述すると、NATゲートウェイはすべてのIPv4アドレスとの通信が可能になります。必要項目を入力したら「変更を保存」をクリックします。
プライベートサブネットと関連付けられたルートテーブルにNATゲートウェイが追加され、ステータスがアクティブになっていることが確認できました。
これでNATゲートウェイの設定がすべて完了しました。プライベートサブネットは、NATゲートウェイとインターネットゲートウェイを介してインターネットに一方的にアウトバウンド接続できます。
接続確認
再びプライベートサブネット内のEC2インスタンス(プライベートIPアドレス:10.0.1.82)にログインして、Googleのサイトにpingを打ってみます。pingに対してレスポンスがあるので、インターネットにアクセスできるようになったことが確認できました。
設定完了後の環境は下記のようになりました。
考慮したいこと
セキュリティ
NAT ゲートウェイにセキュリティグループ関連付けることはできません。セキュリティグループをインスタンスに関連付けて、トラフィックをコントロールします。
冗長性
複数のアベイラビリティーゾーンにリソースがある場合は、アベイラビリティーゾーン別にNAT ゲートウェイを作成することで、単一のアベイラビリティーゾーンがダウンした場合に備えるのがよいとされています。
通信ボリューム
ナットゲートウェイが処理できるデータ量の上限は400万パケット/秒です。制限を超えるとナットゲートウェイがパケットをドロップします。パケット損失を防ぐために、サブネットごとに個別のナットゲートウェイを作成することが推奨されています。ナットゲートウェイの数が増えると利用料金も増えるので、通信量と予算のバランスを考慮して設計しましょう。
Elastic IPの名前
NATゲートウェイ作成時に割り当てたElastic IPは、Nameタグがない(名前がついていない)状態で作成されます。後々識別しづらくなるので、Elastic IPの画面で名前を付けておきましょう。
仮想プライベートゲートウェイ (Virtual Private Gateway)とは
仮想プライベートゲートウェイは、単一のVPCをSite-to-Site VPN経由でオンプレミス環境などVPC外の環境と接続する際に、VPC側にアタッチして使用します。仮想ルーターと説明されることもあります。Site-to-Site VPN接続の通信相手となるオンプレミス環境側にはカスタマーゲートウェイをアタッチします。
仮想プライベートゲートウェイを設置するだけでは、課金されませんが、Site-to-Site VPN接続しないと機能しません。Site-to-Site VPN接続の利用には料金が発生します。
仮想プライベートゲートウェイを使用する際は、VPCにアタッチする必要があります。1つのVPCに接続できる仮想プライベートゲートウェイは1つです。複数のVPCを1つのSite-to-Site VPNに接続したい場合は、仮想プライベートゲートウェイではなく、トランジットゲートウェイを使用することが推奨されています。また、1つの仮想プライベートゲートウェイが接続できるSite-to-Site VPNは、デフォルトでは10個です。それ以上のSite-to-Site VPNに接続が必要な場合は、クォータの引き上げリクエストを行います。
仮想プライベートゲートウェイの設定方法
まずは、仮想プライベートゲートウェイを作成します。
仮想プライベートゲートウェイの作成は完了しましたが、状態が「Detached」となっておりVPCにアタッチされていないので機能しません。
対象VPCに仮想プライベートゲートウェイをアタッチします。画面右上の「アクション」ボタンから「VPCへアタッチ」を選択します。アタッチできるVPCがプルダウンで表示されるので、対象のVPCを選択します。
仮想プライベートゲートウェイのVPCへのアタッチが完了し、状態が「Attached」となっています。
仮想プライベートゲートウェイを使うためには、Site-to-Site VPNの設定を行う必要があります。Site-to-Site VPNの概要については本記事の最後で簡単に記述しますが、設定方法は環境によって異なるので割愛しています。
トランジットゲートウェイ (Transit Gateway) とは
トランジットゲートウェイは、複数のVPCをSite-to-Site VPN経由でオンプレミス環境などVPC外の環境と接続する際や、複数のVPCを接続する際に使われます。VPN接続の相手方となる環境(オンプレミス環境)にはカスタマーゲートウェイをアタッチします。トランジットゲートウェイは、他のリージョンや他のAWSアカウントからもアクセスできます。各VPCやVPNにアタッチされたエンドポイント(各種ゲートウェイ)は、デフォルトでは1つのルートテーブルに関連付けられますが、ルートテーブルを追加して関連付けられたリソースごとのアクセスを制限することも可能です。また、他のAWSアカウントとトランジットゲートウェイを共有することもできます。
複数のVPCを仮想プライベートゲートウェイを使ってそれぞれを別のSite-to-Site VPNで単一のオンプレミス環境に接続することも可能ですが、VPCごとに仮想プライベートゲートウェイやSite-to-Site VPN接続する必要があり、構成や設定が複雑になります。接続するVPCが多い場合にはトランジットゲートウェイを使用すると構成や設定をシンプルにできます。
トランジットゲートウェイは、時間ごとの接続数と、処理されたトラフィック量に対して課金されます。トランジットゲートウェイを所有しているアカウントに対して請求されます。(2022年6月時点)
トランジットゲートウェイを使うと、複数VPCにまたがるアプリケーションを構築する際に、ルートテーブルを大規模に更新しなくてもよくなります。また、VPCとトランジットゲートウェイ間の通信はAWS グローバルプライベートネットワーク上にあるため、パブリックなインターネット上に公開されないのでセキュリティの向上が期待できます。 少ない数のVPC同士を接続したい場合は、VPCピアリングを使う方法もあります。VPCピアリング接続は、VPC CIDR同士が単純なルーティングで通信する方法です。
トランジットゲートウェイの設定方法
設定方法の例として、ふたつのVPC(AとB)をトランジットゲートウェイで接続してみます。下記のイラストのような状態から始めます。
VPC AのEC2インスタンス(プライベートIPアドレス:10.0.0.134)とVPC AのEC2インスタンス(プライベートIPアドレス:10.131.0.139)がお互いにアクセスできないことを確認します。相手にpingを打っても応答がありません。
まずは、トランジットゲートウェイを作成します。VPCページの左側のナビゲーションから「Transit Gateway」を表示させます。今回は、名前タグだけ入力し、他はデフォルトのまま「Transit Gateway を作成」をクリックします。
作成後、少し待つと、状態がAvailableになります。(今回は3分程度でステータスが更新されました)
続いて、Transit Gateway アタッチメントを作成します。
作成時に入力した内容は下記の通りです。
名前タグ | 自分で決めたアタッチメントの名前。2つのVPCに対してそれぞれ作成するので識別できるようにしておく。 |
---|---|
Transit Gateway ID | 先ほど作成したTransit Gatewayをプルダウンから選択 |
アタッチメントタイプ | 今回はVPC同士を接続するのでVPCを選択 |
VPC ID | 作成中のTransit Gateway アタッチメントを設置したいVPCをプルダウンから選択 |
サブネット ID | 作成中のTransit Gateway アタッチメントを設置したいサブネットをプルダウンから選択 |
その他 | デフォルトのまま |
もう一方のVPCに対しても、同様にTransit Gateway アタッチメントの作成を行います。Transit Gatewayに接続するVPCの数だけTransit Gateway アタッチメントを作成します。ふたつのTransit Gateway アタッチメントの作成が完了しました。
ここで、「Transit Gateway ルートテーブル」を確認すると、ルートテーブルが作成されています。さらに「関連付け」では、Transit Gateway アタッチメントの作成で指定したVPCとの関連付けが自動反映されています。
同じくTransit Gateway ルートテーブルの「伝播」を見てみると、Transit Gateway アタッチメントの作成で指定したVPCとの伝播が自動反映されています。
次に、Transit Gateway アタッチメント作成時に指定したサブネットのルートテーブルに、ターゲットゲートウェイがターゲットで、送信先が接続相手のサブネットのアドレスを追加します。(表のルートテーブルの最下行を追加)
VPC Aのルートテーブル
送信先 | ターゲット |
---|---|
10.0.0.0/16 | local |
0.0.0.0/0 | igw-******** |
10.131.0.0/24 | tgw-******** |
ターゲットゲートウェイの送信先は、VPC BのCIDERである10.131.0.0/24とします。
VPC Bにおいても同様にルートテーブルに記述します。
VPC Bのルートテーブル
送信先 | ターゲット |
---|---|
10.0.0.0/16 | local |
0.0.0.0/0 | igw-******** |
10.0.0.0/24 | tgw-******** |
最後に、セキュリティグループを編集し、お互いのVPCからのインバウンド通信を許可します。
VPC Aのセキュリティグループのインバウンドに追加したルールの内容は下記の通りです。
タイプ | ソース |
---|---|
ICMP – IPv4 | 10.131.0.0/24 |
VPC Bも同様にセキュリティグループにインバウンドルールを追加します。
タイプ | ソース |
---|---|
ICMP – IPv4 | 10.0.0.0/24 |
これでTransit Gatewayの設定は完了です。最後に、Transit Gatewayで接続したVPC内にあるEC2インスタンスにログインし、お互いにpingを打ってみます。
VPC AからVPC Bにping
VPC BからVPC Aにping
双方向にpingが返ってきたので、Transit GatewayによってふたつのVPCが接続されていることが確認できました。
トランジットゲートウェイの設定後の環境はこんなイメージです。ふたつのVPCをつなぐトランジットゲートウェイが追加されました。
Transit GatewayをSite-to-Site VPNで使用する場合は、Site-to-Site VPNの設定を行う必要があります。Site-to-Site VPNの概要については本記事の最後で簡単に記述しますが、設定方法は環境によって異なるので割愛しています。
カスタマーゲートウェイ (Customer Gateway)とは
カスタマーゲートウェイは、Site-to-Site VPN接続を行う際に、Site-to-Site VPN接続のオンプレミス側にアタッチして使用します。オンプレミス側のルーターとしての役割を持ちます。作成時にSite-to-Site VPNの接続先となるオンプレミス環境のIPアドレス、ASN、証明書などの情報が必要です。
カスタマーゲートウェイの設置だけでは課金されませんが、Site-to-Site VPN接続しないと機能しません。Site-to-Site VPN接続の利用には料金が発生します。(2022年6月時点)
カスタマーゲートウェイの設定方法
カスタマーゲートウェイを作成します。カスタマーゲートウェイデバイス(オンプレミス側の物理的なデバイス)のIPアドレスを入力します。
証明書ベースのVPNにしたい場合は、事前にAWS Certificate Managerでプライベート証明書を登録しておき、カスタマーゲートウェイ作成画面で選択します。カスタマーゲートウェイ作成後は、証明書を追加できません。
カスタマーゲートウェイを使うためには、Site-to-Site VPN接続の相手方となる仮想プライベートゲートウェイあるいはトランジットゲートウェイの設定とSite-to-Site VPNの設定を行う必要があります。Site-to-Site VPNについて本は次の項目で簡単に記述します。
補足:Site-to-Site VPNとは
Site-to-Site VPNは、AWSが提供するIPsec VPNサービスで、AWS内のリソースとオンプレミス環境境をVPN接続する際に使用します。AWS側の接続先として仮想プライベートゲートウェイかトランジットゲートウェイ、オンプレミス側の接続先としてカスタマーゲートウェイを設置します。トランジットゲートウェイと仮想プライベートゲートウェイをまとめてターゲットゲートウェイと呼ぶこともあります。
VPCとVPCを接続したい場合には、VPCピアリングやトランジットゲートウェイを使う方法もあります。また、VPCとオンプレミス環境をVPNではなく専用の物理回線で接続したい場合は、Direct Connectを使います。
おわりに
AWSには「ゲートウェイ」と名付けられたサービスが多くありますが、どれも何かと何かをつなぐ出入口の働きを持っています。「Gateway」という英単語は、門の外枠や玄関口といった意味なので、名前そのままの役割です。本記事では、主要なゲートウェイの特徴、料金、使い方をまとめました。AWSでの環境構築や勉強のお役に立てれば幸いです。
なお、各ゲートウェイの設定方法を紹介するために作成した環境は、運用効率やセキュリティなどは考慮していません。実運用する場合は、オペレーショナル・エクセレンス、セキュリティ、信頼性、パフォーマンス、コスト最適化、持続性を考慮することが必要です。