読者です 読者をやめる 読者になる 読者になる

のんびりSEの議事録

プログラミング系のポストからアプリに関してのポストなどをしていきます。まれにアニメ・マンガなど

AWSでNAT構成を自前で用意する

現時点ではAWSで新たにNAT Gatewayが用意されており、簡単にNAT構成が建てられますが、VPNに課金されるので、自前で復讐も兼ねてNATインスタンスを作成する工程を忘れないように記載しておきます。

docs.aws.amazon.com

料金 - Amazon VPC | AWS

Public Subnetの構築

1. VPCの作成

サービス > VPC > VPCの作成

f:id:tatsu_tora:20160201233409p:plain

項目 設定値 説明
ネームタグ my-vpc 分かりやすい名前を設定
CIDRブロック 10.0.0.0/16 VPCのアドレス範囲を設定(例で10.0.0.0/16を設定し以下これに沿って説明)
テナンシー デフォルト シングルテナントの専用ハードウェアのVPCインスタンスを実行できる

2. Public Subnetの作成

サブネット > サブネットの作成

f:id:tatsu_tora:20160201234140p:plain

項目 設定値 説明
ネームタグ public-subnet 分かりやすい名前を設定
VPC 作成したVPCを選択 このサブネットに使用するVPC
アベイラビリティゾーン us-east-a1 このサブネットが存在するアベイラビリティゾーン。自動的に選択する場合は指定なし
CIDRブロック 10.0.0.0/24 サブネットのアドレス範囲を設定。ブロックのサイズは/16~/28の間

3. Internet Gatewayの作成

インターネットゲートウェイ > インターネットゲートウェイの作成

ネームタグに分かりやすい名前を設定

4. Internet Gatewayのアタッチ

  1. 3で作成したInternet Gatewayを選択
  2. VPCにアタッチを選択
  3. 1で作成したVPCを選択
  4. 状態がattachedになればOK

5. ルートテーブルの作成

ルートテーブル > ルートテーブルの作成

f:id:tatsu_tora:20160201235746p:plain

項目 設定値 説明
ネームタグ public-subnet 分かりやすい名前を設定
VPC 作成したVPCを選択 このルートテーブルに使用するVPC

6. ルートテーブルにInternet Gatewayを追加

  1. 5で作成したルートテーブルを選択
  2. 下タブのルートを選択
  3. 編集を選択
  4. 送信先を0.0.0.0/0、ターゲットを4で作成したInternet Gatewayを選択
  5. 保存

f:id:tatsu_tora:20160202000233p:plain

7. Public Subnetにルートテーブルを設定

  1. 2で作成したPublic Subnetを選択
  2. 下メニューのルートテーブルを選択
  3. 編集を選択
  4. 変更先に5で作成したルートテーブルを選択

f:id:tatsu_tora:20160202000601p:plain

Private Subnetの構築

1. Private Subnetの作成

サブネット > サブネットの作成

項目 設定値 説明
ネームタグ private-subnet 分かりやすい名前を設定
VPC 作成したVPCを選択 このサブネットに使用するVPC
アベイラビリティゾーン us-east-a1 このサブネットが存在するアベイラビリティゾーン。自動的に選択する場合は指定なし
CIDRブロック 10.0.1.0/24 サブネットのアドレス範囲を設定。ブロックのサイズは/16~/28の間

2. NATインスタンスの作成

EC2 > インスタンスの作成

  1. コミュニティAMIからnatを検索
  2. AMIを選択
  3. インスタンスタイプの選択
  4. インスタンス詳細の設定

    ネットワークで作成したVPCを選択
    サブネットにPublic Subnetを選択

  5. ストレージは特に変更なし(お好みに合わせて)
  6. タグに分かりやすい名前を設定
  7. セキュリティグループの作成

    SSH : 10.0.0.0/16
    SSH : my ip(connection用)
    HTTP : 10.0.0.0/16
    HTTPS : 10.0.0.0/16

以上の設定で作成

ソース/宛先チェックの無効化

  1. 作成したインスタンスを選択
  2. アクション > ネットワーキング > 送信元/送信先の変更チェック
  3. 無効化する

3. Elastic IPの割当

Elastic IP > 新しいアドレスのの割り当て > 関連付ける

作成したIPの選択 > アクション > アドレスの関連付け

f:id:tatsu_tora:20160202003013p:plain

インスタンスに2で作成したNATインスタンスを指定して関連付ける

4. Private Route Tableの作成

VPC > ルートテーブル > ルートテーブルの作成

項目 設定値 説明
ネームタグ private-subnet 分かりやすい名前を設定
VPC 作成したVPCを選択 このルートテーブルに使用するVPC

5. ルートテーブルにNATインスタンスを追加

  1. 4で作成したルートテーブルを選択
  2. 下タブのルートを選択
  3. 編集を選択
  4. 送信先を0.0.0.0/0、ターゲットを2で作成したNATインスタンスを選択
  5. 保存

6. Private Subnetにルートテーブルを設定

  1. 1で作成したPublic Subnetを選択
  2. 下メニューのルートテーブルを選択
  3. 編集を選択
  4. 変更先に4で作成したルートテーブルを選択

Private Network内にインスタンスを作成

インスタンスの詳細

  • VPCに作成したVPCを選択
  • サブネットはPrivate Subnetを選択

セキュリティグループ

インバウンド

タイプ ポート 送信元
HTTP 80 10.0.0.0/16
HTTPS 443 10.0.0.0/16
SSH 22 10.0.0.0/16

アウトバウンド

タイプ ポート 送信元
ALL Traffic ALL 0.0.0.0/0

疎通確認

NATへSSH接続

$ ssh -i <ec2-user-key> ec2-user@<Elastic IP>

インターネット接続確認

$ ping google.com
$ curl google.com

Private Instance へSSH接続

$ ssh -i <ec2-user-key> ec2-user@<Private IP>

インターネット接続確認

$ ping google.com
$ curl google.com

ハマった部分

主にセキュリティグループの設定で、Private Subnet(10.0.1.0/16)に設定しており、Private Instanceでネットワークに接続が出来なくて半日ぐらいハマってしまったorz

ネットワークの復讐をしないとな...

参考

AWSで最低限セキュアな構成を組む - Qiita