AWS VPC の基本的な設定例
[履歴] [最終更新] (2015/05/13 08:46:52)
最近の投稿
注目の記事

概要

自宅のネットワークから AWS VPC (Virtual Private Cloud) 内の EC2 インスタンスに SSH 接続するための設定例を記載します。リージョンは Tokyo (ap-northeast-1) を利用します。

VPC の作成

Your VPCs 内の Create VPC から作成します。独立したプライベートアドレス空間が作成されます。

  • Name tag: myvpc
  • CIDR block: 192.168.0.0/16
  • Tenancy: Default

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

VPC はインターネットとは切り離された存在です。VPC とインターネットの中継ポイントとしてインターネットゲートウェイを作成する必要があります。Internet Gateways の Create Internet Gateway から作成します。

  • Name tag: mygateway

作成したら Attach to VPC で myvpc にアタッチします。

サブネットの作成

Subnets 内の Create Subnet から作成します。VPC のプライベートアドレス空間内に存在する更に小さなアドレス空間です。二つの AZ (Availability Zone) にそれぞれ一つ作成します。

mysubnet-0001 (AZ: ap-northeast-1b)

  • Name tag: mysubnet-0001
  • VPC: myvpc
  • AZ: ap-northeast-1b
  • CIDR block: 192.168.1.0/24

mysubnet-0002 (AZ: ap-northeast-1c)

  • Name tag: mysubnet-0002
  • VPC: myvpc
  • AZ: ap-northeast-1c
  • CIDR block: 192.168.2.0/24

作成されたサブネットの Available IPs は 256 のうち以下の 5 が利用できないため 256 - 5 = 251 となっています。

  • 192.168.[1-2].0
  • 192.168.[1-2].1
  • 192.168.[1-2].2
  • 192.168.[1-2].3
  • 192.168.[1-2].255

サブネットのルーティング設定

ここまでの手順で以下のようなネットワークの構成要素が揃いました。

インターネット --- VPC { インターネットゲートウェイ (igw) --- 仮想ルータ (Route Table) --- サブネット (mysubnet-000[1-2]) }

サブネットには Route Table が設定されています。Route Table はそれぞれのサブネットに接続された仮想ルータのようなものです。

igw --- 仮想ルータ 1 (Route Table) --- mysubnet-0001
      - 仮想ルータ 2 (Route Table) --- mysubnet-0002

仮想ルータには既定で以下のルーティングが設定されています。

  • Destination: 192.168.0.0/16 (VPC のプライベートアドレス空間)
  • Target: local

Target local とは VPC 内に存在するはずだから適切なサブネットにルーティングすればよいという AWS VPC 独特の表記です。これによってサブネット間の通信が可能になっています。こちらの記事で想像されているように、仮想ルータ同士はお互いに接続されているのです。

インターネットゲートウェイ (igw) へのルーティングを追加

インターネットゲートウェイ (igw) と仮想ルータは物理的には回線で接続された状態ですが、仮想ルータにルーティング設定がなされていないためサブネット内からのトラフィックは igw に到達できません。この状態のサブネットを private subnet とよびます。そこで、以下のようにルーティング設定を追加します。igw へのルーティングが設定されたサブネットを public subnet とよびます。Route Table タブの (Edit ではなく) Route Table リンクを押した後の Edit から編集します。

  • Destination: 0.0.0.0/0
  • Target: igw-(mygatewayのid)

EC2 インスタンスの起動

mysubnet-0001, mysubnet-0002 それぞれに所属する EC2 インスタンスを一台ずつ起動します。ENI (Elastic Network Interface) という仕組みがあるためプライベート IP は起動時に指定できます。以下のように設定しました。

  • myinstance-0001 (private ip: 192.168.1.4, public ip: なし)
  • myinstance-0002 (private ip: 192.168.2.4, public ip: なし)

補足

  • 外部からの TCP 22 番アクセスが許可されるセキュリティグループを必要であれば新規作成して設定
  • 鍵は必要なら新規作成して設定

仮想 IP の割り当て設定

ここまでで以下のような状況になりました。仮想ルータのルーティング設定も完了しています。

インターネット --- VPC { インターネットゲートウェイ (igw) --- 仮想ルータ (Route Table) --- サブネット --- EC2 }

しかしながら EC2 インスタンスはプライベート IP しか保有しておらずグローバル IP がないためインターネットと通信できません。正確には EC2 からインターネット向けのトラフィックはルーティングできますが、レスポンスのトラフィックを EC2 までルーティングする手段がありません。そこで EC2 に Elastic IP という AWS が提供するグローバルな仮想 IP を割り当てます。「Elastic IPs メニュー」→「Allocate New Address」→「Associate Address」から設定します。

  • Instance: myinstance-000[1-2]
  • Private IP address: 192.168.[1-2].4

何が行われるようになるか

  • こちらの記事にあるように Static NAT がゲートウェイで行われる
  • 仮想 IP はゲートウェイで管理される
  • ゲートウェイにはインスタンスのプライベート IP と仮想 IP の対応表 Static NAT テーブルが存在
  • インスタンスからは自分に割り当てられている仮想 IP の存在を確認できない

補足

  • インターネットゲートウェイは IP マスカレード (NAT) してくれない

SSH クライアントから EC2 への接続

$ chmod 400 mykeypair.pem 
$ ssh ec2-user@52.68.44.224 -i mykeypair.pem

注意

  • TCP 22 のみ許可しているので ping や traceroute/tracepath (ICMP) は通らない
  • igw へのルーティング設定がなされていないサブネット内の EC2 については外部からのトラフィックは通るがその応答トラフィックが外にルーティングされない

EIP は EC2 インスタンスからは認識できない (上述の通り)

$ ip addr show
inet 192.168.1.4/24 brd 192.168.1.255 scope global eth0

EC2 インスタンスのルーティングテーブル

$ ip route show
default via 192.168.1.1 dev eth0  ← デフォルトゲートウェイ (仮想ルータ)
169.254.169.254 dev eth0  ← リンクローカル
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.4  ← 所属サブネット
関連ページ
    概要 負荷分散および耐障害性の向上などに利用される AWS ELB (Elastic Load Balancing) の設定例を記載します。リージョンは Tokyo です。 VPC 外部からのアクセスを振り分ける ELB VPC 関連の設定 こちらを参考に以下のように設定します。EIP の設定は今回は不要です。ELB 経由でアクセスするためです。