【AWSサービス 基礎編】NAT ゲートウェイでプライベートサブネットからの外部通信を実現する

目次

概要

プライベートサブネットに配置した EC2 インスタンスやデータベースは、インターネットからの直接アクセスを遮断できるため、セキュリティの観点で重要な役割を果たします。一方で、OS やソフトウェアのアップデート、外部 API の呼び出しなど、プライベートサブネット内のリソースからインターネットへ通信したい場面は数多くあります。

NAT ゲートウェイ(NAT Gateway)は、プライベートサブネット内のリソースがインターネットへアウトバウンド通信を行えるようにする AWS のマネージドサービスです。インターネットからプライベートサブネットへのインバウンド通信は許可しないため、リソースを外部に公開せずに「外に出る通信」だけを実現できます。

本記事では、NAT ゲートウェイの仕組みを理解し、パブリックサブネットに NAT ゲートウェイを作成して、プライベートサブネットからインターネットへのアウトバウンド経路を構成するところまで体験します。

プライベートサブネットの EC2 から NAT ゲートウェイ(パブリックサブネット)→ インターネットゲートウェイ → インターネットへとアウトバウンド通信が流れる構成図を挿入
プライベートサブネットの EC2 から NAT ゲートウェイ(パブリックサブネット)→ インターネットゲートウェイ → インターネットへとアウトバウンド通信が流れる構成図を挿入

この記事のメリット

  • NAT ゲートウェイがプライベートサブネットからの外部通信を実現する仕組みを理解できる
  • パブリック NAT ゲートウェイとプライベート NAT ゲートウェイの違いを把握できる
  • NAT ゲートウェイの配置やルートテーブルの設定方法を習得できる
  • NAT ゲートウェイの料金体系と、利用時に注意すべきポイントを学べる

執筆者とキャラクター紹介

執筆者:土肥(とひ)

株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。

土肥

クラウドおさる

クラウドおさる

はじめましてでござる。弊猿はクラウドおさる。IT インフラが異常に発達した猿山から、雲に乗って地上の AWS を学びに降りてきたのでござる。

クラウドおさる

基礎編や Cloud Practitioner の記事では、とひさんに素朴な疑問をぶつける役でござるな。Security - Specialty などの記事では、要所でワンポイントや注意点をひとこと添えるでござる。

クラウドおさる

猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。

技術解説

NAT ゲートウェイとは

クラウドおさる

とひさん、前回プライベートサブネットに置いたリソースはインターネットに直接アクセスできないって教わりましたよね。でも、サーバーのアップデートとかはどうするんですか?

土肥

いい質問だね!そこで登場するのが NAT ゲートウェイだよ。NAT ゲートウェイは、プライベートサブネット内のリソースがインターネットへ「アウトバウンド通信」をできるようにするマネージドサービスなんだ。

クラウドおさる

アウトバウンド通信って、外に向かって出ていく通信のことですよね。

土肥

そのとおり。ポイントは、プライベートサブネットのリソースから外に向かう通信は許可するけど、インターネット側から勝手に入ってくる通信(未承諾のインバウンド接続)は受け付けないってところなんだ。だから、リソースを外部に公開せずに「外に出る通信」だけを実現できるんだよ。

クラウドおさる

なるほど!外には出られるけど、外から入ってこられないんですね。安全に保ったままアップデートできるってことか。

土肥

そういうこと。NAT は「Network Address Translation(ネットワークアドレス変換)」の略でね。プライベートサブネットのインスタンスが通信を送ると、NAT ゲートウェイが送信元のプライベート IP アドレスを自分のアドレスに置き換えて外に送るんだ。応答が返ってくると、今度は元のインスタンスのアドレスに変換し直して届けてくれる。この変換のおかげで、複数のインスタンスが 1 つの NAT ゲートウェイを共有して外部通信できるんだよ。

NAT ゲートウェイの仕組みと配置

クラウドおさる

NAT ゲートウェイって、どこに置けばいいんですか?プライベートサブネットを助けるものだから、プライベートサブネットの中ですか?

土肥

ここがちょっと意外なところでね。パブリック NAT ゲートウェイは、パブリックサブネットに置くんだ。

クラウドおさる

えっ、プライベートサブネットを助けるのに、置く場所はパブリックサブネットなんですか?

土肥

そうなんだ。NAT ゲートウェイ自身がインターネットと通信できる必要があるからだよ。NAT ゲートウェイはプライベートサブネットからの通信を受け取って、それをインターネットゲートウェイ(IGW)経由で外に出す。だから NAT ゲートウェイ自身は、IGW へのルートを持つパブリックサブネットに置く必要があるんだ。通信の流れを整理するとこうなるよ。

ステップ通信の流れ
1プライベートサブネットの EC2 がインターネット宛てに通信を送る
2プライベートサブネットのルートテーブルが 0.0.0.0/0 を NAT ゲートウェイに転送
3NAT ゲートウェイ(パブリックサブネット)が送信元 IP を変換
4パブリックサブネットのルートテーブルが 0.0.0.0/0 を IGW に転送
5インターネットゲートウェイ経由で外部へ通信、応答は逆順で戻る
プライベートサブネットの EC2 → NAT ゲートウェイ → インターネットゲートウェイ → インターネットへのトラフィックの流れと、各サブネットのルートテーブル設定を示す図解
プライベートサブネットの EC2 → NAT ゲートウェイ → インターネットゲートウェイ → インターネットへのトラフィックの流れと、各サブネットのルートテーブル設定を示す図解
クラウドおさる

なるほど!プライベートサブネットのルートテーブルが NAT ゲートウェイを向いていて、NAT ゲートウェイがいるパブリックサブネットのルートテーブルは IGW を向いている。バトンを渡していくみたいなイメージですね。

土肥

まさにそのイメージだよ。それと、パブリック NAT ゲートウェイには Elastic IP アドレスを関連付ける必要があるんだ。Elastic IP は固定のパブリック IPv4 アドレスで、NAT ゲートウェイがインターネットと通信するときの送信元アドレスとして使われるよ。NAT ゲートウェイを作成するときに、新しい Elastic IP を割り当てるか、既存のものを選ぶことになるんだ。

パブリック NAT ゲートウェイとプライベート NAT ゲートウェイ

クラウドおさる

さっきから「パブリック NAT ゲートウェイ」って言ってますけど、パブリックじゃない NAT ゲートウェイもあるんですか?

土肥

あるよ。NAT ゲートウェイには「パブリック」と「プライベート」の 2 つのタイプがあるんだ。違いをまとめるとこうなるよ。

項目パブリック NAT ゲートウェイプライベート NAT ゲートウェイ
主な用途プライベートサブネットからインターネットへの通信他の VPC やオンプレミスネットワークとの通信
配置先パブリックサブネットプライベートサブネット
Elastic IP必須(作成時に関連付け)関連付け不可
インターネット接続インターネットゲートウェイ経由で可能不可(IGW へのトラフィックはドロップされる)
インバウンド(未承諾)受信不可受信不可
クラウドおさる

プライベート NAT ゲートウェイはインターネットに出られないんですね。それだと何に使うんでしょう?

土肥

プライベート NAT ゲートウェイは、Transit Gateway や仮想プライベートゲートウェイを経由して、他の VPC やオンプレミスのネットワークと通信するときに使うんだ。たとえば、複数の VPC で IP アドレス範囲が重複しているようなケースで、アドレス変換のために使われたりするね。インターネットに出る用途で使うのは、今回扱う「パブリック NAT ゲートウェイ」のほうだよ。

クラウドおさる

なるほど。今回はプライベートサブネットからインターネットに出たいから、パブリック NAT ゲートウェイを使えばいいんですね。

NAT インスタンスとの違い

クラウドおさる

調べていたら「NAT インスタンス」っていう言葉も出てきたんですけど、NAT ゲートウェイとは違うものなんですか?

土肥

いいところに気づいたね。NAT インスタンスは、同じ NAT の役割を EC2 インスタンスで実現する古くからの方式なんだ。NAT ゲートウェイはそれを AWS のマネージドサービスとして提供したものだよ。比較してみよう。

項目NAT ゲートウェイNAT インスタンス
管理AWS が管理(メンテナンス不要)利用者が管理(OS パッチ・ソフト更新)
可用性アベイラビリティーゾーン内で冗長化済みスクリプトで手動フェイルオーバー
帯域幅最大 100 Gbps まで拡張インスタンスタイプの帯域に依存
セキュリティグループ関連付け不可(背後のリソースで制御)関連付け可能
踏み台サーバー利用不可可能
クラウドおさる

NAT ゲートウェイは AWS が面倒を見てくれて、可用性も帯域幅も優れているんですね。

土肥

そうだね。AWS も基本的には NAT ゲートウェイの利用を推奨しているよ。NAT インスタンスは、踏み台サーバーを兼ねたいとか、ポート転送をしたいといった特殊な要件があるときの選択肢って考えるといいかな。新しく構築するなら、まずは NAT ゲートウェイを検討するのが定石だね。

料金に注意

クラウドおさる

マネージドで便利なのはわかったんですけど…NAT ゲートウェイってお金はかかるんですか?

土肥

かかるよ。しかも、NAT ゲートウェイは料金面で注意が必要なサービスなんだ。料金は大きく 2 種類あってね。

料金の種類内容
時間課金NAT ゲートウェイが存在している時間に対して課金される
データ処理料金NAT ゲートウェイを通過したデータ量(GB 単位)に対して課金される
クラウドおさる

時間課金ってことは、通信していなくても置いてあるだけで課金されるんですか?

土肥

そのとおり。NAT ゲートウェイは存在しているだけで時間あたりの料金が発生するんだ。だから、検証で作ったあとに削除を忘れると、使っていなくても課金が続いてしまうんだよ。

クラウドおさる

それは怖いですね…。ハンズオンのあとはちゃんと消さないと。

土肥

そうだね。それともう一つ、データ処理料金にも気をつけたいポイントがあるよ。たとえば、同じリージョン内の S3 や DynamoDB へアクセスするのに NAT ゲートウェイを経由させると、そのデータ量にもデータ処理料金がかかってしまうんだ。こういう AWS サービス向けの通信は、NAT ゲートウェイではなく VPC エンドポイントを使うことで、NAT ゲートウェイのデータ処理料金を回避できるんだ。

クラウドおさる

NAT ゲートウェイは便利だけど、料金を意識して使い分けることが大事なんですね。検証が終わったら削除すること、覚えておきます!

新卒・未経験の方へ
クラウドおさる

AWS を仕事にしたい方へ ── 新卒・未経験から

この記事を書いているのは、AWS の設計・構築を仕事にしている現役エンジニアです。運営元の株式会社ジェニュインでは、新卒・未経験の方を募集しています。プログラミング未経験から入社して活躍しているメンバーもいます。

  • ✓システム開発・WEB エンジニア / インフラ構築などの職種で、未経験から応募できます
  • ✓未経験から入社した社員の声を含む社員アンケートを掲載
  • ✓応募フォームから 1 分で応募できます

実践

NAT ゲートウェイをパブリックサブネットに作成し、プライベートサブネットのルートテーブルを NAT ゲートウェイに向けて、インターネットへのアウトバウンド経路を構成します。

前提条件

以下のリソースが作成済みであることを前提とします。

  • リージョン: ap-northeast-1(東京)
  • IAM ユーザーまたはロールに VPC・EC2 関連リソースの操作権限があること
リソース種別リソース名用途
VPCnat-vpc仮想ネットワーク(CIDR: 10.0.0.0/16)
パブリックサブネットnat-public-subnetNAT ゲートウェイを配置するサブネット(10.0.1.0/24、AZ: ap-northeast-1a)
プライベートサブネットnat-private-subnetEC2 を配置するサブネット(10.0.2.0/24、AZ: ap-northeast-1a)
インターネットゲートウェイnat-igwVPC とインターネットの接続
ルートテーブルnat-public-rtパブリックサブネット用(0.0.0.0/0 → IGW 設定済み)
ルートテーブルnat-private-rtプライベートサブネット用(0.0.0.0/0 ルートは未設定)
EC2 インスタンスnat-private-serverプライベートサブネットに配置されたインスタンス

作成するリソース一覧

リソース種別リソース名用途
Elastic IPnat-eipNAT ゲートウェイ用の固定パブリック IP
NAT ゲートウェイnat-gatewayプライベートサブネットからのアウトバウンド通信
ルート(nat-private-rt 内)0.0.0.0/0 → NAT ゲートウェイ

ステップ1: NAT ゲートウェイ作成前のルーティングを確認する

NAT ゲートウェイを作成する前に、プライベートサブネットのルートテーブルにインターネットへのルートがないことを確認します。

  • AWS マネジメントコンソールにログインし、リージョンが ap-northeast-1(東京)であることを確認します
  • 上部の検索バーに VPC と入力し、表示された「VPC」を選択します
  • 左側ナビゲーションの「ルートテーブル」を選択します
  • プライベートサブネット用のルートテーブル nat-private-rt を選択し、下部の「ルート」タブを選択します
  • 送信先が 10.0.0.0/16(VPC 内通信用の local ルート)のみで、0.0.0.0/0 のルートが存在しないことを確認します
nat-private-rt のルートタブ(local ルートのみで、インターネットへのルートがない状態)
nat-private-rt のルートタブ(local ルートのみで、インターネットへのルートがない状態)

この時点では、プライベートサブネットの nat-private-server はインターネットへの経路を持たないため、外部へ通信できません。

ステップ2: NAT ゲートウェイを作成する

  • 上部の検索バーに VPC と入力し、表示された「VPC」を選択します
  • 左側ナビゲーションの「NAT ゲートウェイ」を選択し、「NAT ゲートウェイを作成」をクリックします
  • 以下の内容を入力します
  • 名前: nat-gateway
  • サブネット: nat-public-subnet を選択
  • 接続タイプ: パブリック(デフォルト)
  • Elastic IP: 「Elastic IP を割り当て」をクリックして新しい Elastic IP を割り当てます
NAT ゲートウェイ作成画面(名前・サブネット・接続タイプ・Elastic IP を入力した状態)
NAT ゲートウェイ作成画面(名前・サブネット・接続タイプ・Elastic IP を入力した状態)
  • 「NAT ゲートウェイを作成」をクリックします
  • NAT ゲートウェイ一覧で、作成した nat-gateway のステータスが 保留中(Pending)から 利用可能(Available)に変わることを確認します
NAT ゲートウェイ一覧画面(ステータスが「利用可能」になっている状態)
NAT ゲートウェイ一覧画面(ステータスが「利用可能」になっている状態)

ステップ3: プライベートサブネットのルートテーブルにルートを追加する

プライベートサブネットのトラフィックを NAT ゲートウェイに向けるため、ルートテーブルにルートを追加します。

  • 左側ナビゲーションの「ルートテーブル」を選択します
  • nat-private-rt を選択し、下部の「ルート」タブを選択します
  • 「ルートを編集」をクリックします
  • 「ルートを追加」をクリックし、以下を入力します
  • 送信先: 0.0.0.0/0
  • ターゲット: NAT ゲートウェイ を選択し、表示された nat-gateway を選択
  • 「変更を保存」をクリックします
ルートテーブルのルート編集画面(`0.0.0.0/0` → NAT ゲートウェイのルートを追加した状態)
ルートテーブルのルート編集画面(`0.0.0.0/0` → NAT ゲートウェイのルートを追加した状態)
  • 「ルート」タブで、0.0.0.0/0 のターゲットが NAT ゲートウェイになっていることを確認します

ステップ4: ルーティングと NAT ゲートウェイの構成を確認する

ルートが追加され、プライベートサブネットからインターネットへの経路が構成されたことを確認します。

  • 左側ナビゲーションの「ルートテーブル」を選択し、nat-private-rt を選択します
  • 「ルート」タブで、0.0.0.0/0 のルートが追加され、ターゲットが NAT ゲートウェイ、ステータスが「アクティブ」になっていることを確認します
nat-private-rt のルートタブ(0.0.0.0/0 → NAT ゲートウェイのルートがアクティブになっている状態)
nat-private-rt のルートタブ(0.0.0.0/0 → NAT ゲートウェイのルートがアクティブになっている状態)

ステップ1 で確認したときは local ルートのみでしたが、0.0.0.0/0 宛てのトラフィックが NAT ゲートウェイへ転送されるようになりました。これにより、プライベートサブネットの nat-private-server はインターネットへアウトバウンド通信できるようになります。

  • 左側ナビゲーションの「NAT ゲートウェイ」を選択し、nat-gateway を選択します
  • 詳細画面で、状態が「利用可能」であること、プライマリパブリック IPv4 アドレスに Elastic IP が割り当てられていること、配置先サブネットが nat-public-subnet であることを確認します
nat-gateway の詳細画面(状態「利用可能」、Elastic IP、配置サブネットが表示されている状態)
nat-gateway の詳細画面(状態「利用可能」、Elastic IP、配置サブネットが表示されている状態)

プライベートサブネットの EC2 がインターネットへ通信する際は、ここで NAT ゲートウェイに割り当てられた Elastic IP アドレスが送信元アドレスとして使われます。

まとめ

  • NAT ゲートウェイは、プライベートサブネット内のリソースがインターネットへアウトバウンド通信を行えるようにするマネージドサービスである
  • インターネットからプライベートサブネットへの未承諾のインバウンド通信は許可されない
  • パブリック NAT ゲートウェイはパブリックサブネットに配置し、Elastic IP の関連付けが必須である
  • プライベートサブネットのルートテーブルで 0.0.0.0/0 を NAT ゲートウェイに向けることで外部通信が有効になる
  • NAT ゲートウェイは時間課金とデータ処理料金が発生するため、不要になったら削除する。AWS サービス向けの通信は VPC エンドポイントの利用も検討する

参照先

キャリア相談
クラウドおさる

独学の先に、AWS の仕事がある ── ジュニアおさるのキャリア相談

CLF には受かったけれど、次に何をすればいいのか分からない。独学で AWS を学ぶジュニアおさるの相談に、株式会社ジェニュイン代表の土肥が答えています。

  • ✓資格はゴールか、CLF の次に何から手を付けるか
  • ✓EC2 の次に作ってみる構成と、IaC・コスト管理
  • ✓実務経験ゼロでも、面接で話せる「これまで」の作り方
新卒・未経験の方へ
クラウドおさる

AWS を仕事にしたい方へ ── 新卒・未経験から

この記事を書いているのは、AWS の設計・構築を仕事にしている現役エンジニアです。運営元の株式会社ジェニュインでは、新卒・未経験の方を募集しています。プログラミング未経験から入社して活躍しているメンバーもいます。

  • ✓システム開発・WEB エンジニア / インフラ構築などの職種で、未経験から応募できます
  • ✓未経験から入社した社員の声を含む社員アンケートを掲載
  • ✓応募フォームから 1 分で応募できます

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社ジェニュイン(https://genuine-pt.jp)の代表取締役.

2018年〜インフラエンジニアとしてキャリアをスタートし、オンプレミスのネットワーク・サーバ環境で3年半、クラウド環境で4年半の8年間エンジニアとして従事。
2021年に佐藤氏の創業した株式会社Luxyを引き継ぎ、代表に就任。
その後アガルートグループ内の株式会社ジェニュインと合併。
合併後同社代表に就任。

目次