Amazon VPCでNATを使ってPublic SubnetとPrivate Subnetを分ける

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Amazon VPCでPrivate Subnet

Amazon VPCは、EIPやELBを使ってPublic Subnet内のインスタンスにインターネットからアクセスできる事が分かりました。今回は、Private Subnetを作り一切インターネットからアクセスできないようにします。また、例外としてEIPを持つNATインスタンスを通じてのみ外部のインターネットと通信できるようにします。インターネット上のサーバーログにはPrivate Subnetからのアクセスである痕跡は残りません。NATインスタンスのIPアドレスが用いられます。NATインスタンスは、セキュリティグループによってデフォルトで全てのポートが閉じていますので、どうしても公開したいポートを開けることでセキュリティを保ちます。

以下のような構成を作成します。

VPCの新規作成ウィザード

VPCの新規作成ウィザードの指示に従って進めていきます。

以下の画面は重要です。IP CIDRを10.0.0.0/16に設定しているのは前回と同じです。Public Subnetに10.0.0.0/24を指定し、Private Subnetに10.0.1.0/24を指定しています。また、NATインスタンスを起動するように書いてあります。

ルートテーブルを確認する

ウィザードによって作成されたVPCの設定がどのようになっているか確認してみましょう。まずは、ルートテーブルです。2行目(rtb-ddf802b4)にあるルートテーブルは、宛先がインターネットゲートウェイになっています。

また、関連するSubnetは、Public Subnetです。

もう一方のルートテーブルを見てみます。関連するサブネットは無く、宛先がNATインスタンスとなっています。ちなみに、NATインスタンス自体は、Public Subnetに属しています。

NATインスタンスにEIPを割り振る

Private Subnetのインスタンスがインターネットと通信するためにはIPアドレスが必要です。そこで、NATインスタンスにEIPで固定IPアドレスを割り振ります。

Network ACLを確認する

Public SubnetのInBoundとOutBoundです。ここでは全ての通信を許可していますが、必要に応じて制御してください。

NATインスタンス用のセキュリティグループを設定する

Private Subnetのインスタンスからインターネットにアクセスするために、NATインスタンスに付いているセキュリティグループを修正します。この例では、PingができるようにICMPを許可し、他にHTTPを許可しています。

まとめ

今回は、NATインスタンスを用いてPrivate Subnetにあるインスタンスからインターネットにアクセスする方法を学びました。当初はインターネットからのアクセスに対してNATインスタンスを通じてPrivate Subnet内のインスタンスにアクセスすること思ったのですが勘違いでした。Management Consoleに用意されているVPC作成ウィザードは、ほとんどの設定を自動で行う事ができます。NATインスタンスへのEIP付与とセキュリティグループの設定だけで直ぐに使い始めることができます。もちろん、実務を考えた場合は、Network ACLや他インスタンスのセキュリティグループを正しく設定する必要がありますが、まずは動作確認できたので今回はOKとしましょう。VPCとNATでよりセキュアなクラウド環境を作りましょう!

参考資料

VPC詳細 -ほぼ週刊AWSマイスターシリーズ