エンタープライズシステム(企業のシステム)では、
セキュリティ面を考えて、DBだけでなく、WEB/APサーバさえも直接インターネット接続(外部接続)を許可しないような構成が主流となっています。
(フロントにELBをたてて、そこからリクエストを受けるとか)
セキュリティ面を考えれば、
たしかに外部接続を許可しない構成が望ましいのですが、
メンテナンス時にEC2にパッチあてる時とかどうするの?とか、
なにかと外部接続できないことの弊害は多いです。
そんな時に有効なのが、
これからご紹介するNATゲートウェイとなります。
今回は、NATゲートウェイとはどういったものなのか?
どのようにNATゲートウェイを構築したらよいのかをご紹介いたします。
NATゲートウェイを使えばプライベートサブネットからでもインターネットへ接続できる
NATゲートウェイとは、外部接続が許可されていないEC2等に代わって、
外部とのネットワーク通信を代行してくれるサービスです。
NATゲートウェイを使えば、
外部からの接続ができないEC2でも、インターネットへのアクセス(アウトバウンド)ができるようになります。
ここで重要なのが、インターネットへのアクセス、つまりEC2からの自発的なアクセスのみ可能となるということ。
インターネットからのアクセス(インバウンド)は許可しません。
よく誤解される方がいるのですが、
インバウンドができないからといって、インターネットからデータをダウンロードすることができないという意味ではありません。
ここでいう「インターネットからデータをダウンロードする」というのは、
以下の流れになります。
- EC2からインターネット上のサーバーへアクセス
- サーバーからデータをダウンロード
1のインターネット上のサーバーへアクセスするいう、中から外へ流れるアウトバウンドが初めにあれば、次のインバウンド(サーバーからデータをダウンロード)は問題なくできます。
逆に1がなく、どこの誰だかわからないサーバーから突然EC2にデータが届く(アップロードされる)というような、インバウンドが初めにくるものは拒否されます。
ここで少し余談ですが、
以前までAWSでは、NATゲートウェイではなくNATインスタンスというものが存在していたらしいです。
EC2インスタンスにNATの機能をのせたシンプルなサービスだったみたいですが、
時を経て、色々な見直しが入り、今のNATゲートウェイというフルマネージドなサービスに昇格したようです。
NATゲートウェイの料金の仕組み
NATゲートウェイには以下の2つの料金があり、合算した料金がNATゲートウェイの料金となります。
- 時間あたりの使用料
- 転送データ量における料金
1は、NATゲートウェイを作成し、利用可能となった状態から使っても使わなくても、1時間あたりに課金される料金です。
※1時間未満の場合は、1時間として換算されて課金されます。
2は、NATゲートウェイを経由してネットワーク通信を行なった場合にかかる料金でして、処理データ量のGB単位でかかる料金です。
注意点として、
EC2の代わりにNATゲートウェイがネットワーク通信を行なってくれるからといって、
EC2のデータ転送料が無料になる、ということにはなりません。
NATゲートウェイを使っても使わないくてもEC2のデータ転送料は変わりなくかかります。
詳しくはこちらのAWSサイトをご確認ください。
NATゲートウェイの作成方法
それではNATゲートウェイの作成手順をご紹介します。
(1)VPCコンソール画面を開きます
(2)左ナビゲーションペインから[NATゲートウェイ]をクリックします
(3)[NATゲートウェイの作成]をクリックします
(4)NATゲートウェイを作成するサブネットを選択します。
※NATゲートウェイは、インターネットゲートウェイとアクセスができるパブリックサブネット上に作成する必要があります。
(5)NATゲートウェイに割り当てるEIP(パブリックな固定IPアドレス)を割り当てます。
※割り当てるEIPが無い場合は、[新しいEIP]をクリックすると自動的にEIPが作成されて、そのEIPが選択された状態になります。
(6)[NATゲートウェイの作成]をクリックします
これでNATゲートウェイの作成は完了です!
作成は完了しましたが、このままではEC2からNATゲートウェイを経由してインターネット接続することはできません。
このあとに紹介するルーティングの設定が必要となります。
NATゲートウェイを経由するようにルーティングの設定を修正する
NATゲートウェイを作成しただけでは、まだ設定は未完了です。
これから紹介するルーティング設定を行ない、
はじめてEC2がNATゲートウェイを経由できるようになります。
(1)VPCコンソール画面を開きます
(2)左ナビゲーションペインから[ルートテーブル]をクリックします
(3)NATゲートウェイを経由したいEC2インスタンスが所属しているサブネットに割り当たっているルートテーブルを選択します
(ちょっとややこしいですね・・・w)
(4)”Route”タブ→[Edit routes]をクリックします
(5)[Add route]をクリックし、以下の図の赤枠のようにDestination(通信先)とTargetを選択します。
※Destinationに”0.0.0.0/0″と入力すると、すべての通信先、という意味になります。インターネットにアクセスするけど、アクセス先のIPは限られている場合は、Destinationにアクセス先IPをCIDR表記で入力します。
CIDR表記について詳しく知りたい方は、「わかりやすく解説!AWSのネットワークでよく見かけるCIDRブロックとは?」をご参照ください。
※Targetには作成したNATゲートウェイを指定します。
(6)[Save routes]をクリックして完了です。
NATゲートウェイを使うときの注意点
上記ルーティング設定を行う際、注意するポイントとして、
修正したルートテーブルが意図したEC2にだけ適用されているかを確認しましょう。
何が言いたいかというと、ルートテーブルは複数のサブネットに適用することが可能です。
そのため、ネットワーク構成によっては他のEC2インスタンスにも影響が出る可能性があるということです。
そのルートテーブルを他のサブネットも使っていないかどうか?
使っているのであれば、そのサブネットに所属しているEC2インスタンスもNATゲートウェイが使えるようになるが、
仕様上(またはコンプライアンス上)問題ないか?
といったことです。
NATゲートウェイを使うことで、
アウトバウンドが許可されますので、最悪、内部から情報を外に持ち出すことはできてしまいます。
問題があるようでしたら、
ルートテーブルを新しく作って分ける等、ネットワーク構成の変更も検討が必要です。
いかがでしたでしょうか?
「NATゲートウェイを使ってプライベートサーブネットからインターネット上へアクセスする方法」についてご紹介させていただきました。
NATゲートウェイを上手く使って、
セキュアな環境を構築していきましょう!
以上、hidesanでした!