自宅のネットワークから AWS VPC (Virtual Private Cloud) 内の EC2 インスタンスに SSH 接続するための設定例を記載します。リージョンは Tokyo (ap-northeast-1) を利用します。
Your VPCs 内の Create VPC から作成します。独立したプライベートアドレス空間が作成されます。
VPC はインターネットとは切り離された存在です。VPC とインターネットの中継ポイントとしてインターネットゲートウェイを作成する必要があります。Internet Gateways の Create Internet Gateway から作成します。
作成したら Attach to VPC で myvpc にアタッチします。
Subnets 内の Create Subnet から作成します。VPC のプライベートアドレス空間内に存在する更に小さなアドレス空間です。二つの AZ (Availability Zone) にそれぞれ一つ作成します。
作成されたサブネットの Available IPs は 256 のうち以下の 5 が利用できないため 256 - 5 = 251 となっています。
ここまでの手順で以下のようなネットワークの構成要素が揃いました。
インターネット --- VPC { インターネットゲートウェイ (igw) --- 仮想ルータ (Route Table) --- サブネット (mysubnet-000[1-2]) }
サブネットには Route Table が設定されています。Route Table はそれぞれのサブネットに接続された仮想ルータのようなものです。
igw --- 仮想ルータ 1 (Route Table) --- mysubnet-0001
- 仮想ルータ 2 (Route Table) --- mysubnet-0002
仮想ルータには既定で以下のルーティングが設定されています。
Target local とは VPC 内に存在するはずだから適切なサブネットにルーティングすればよいという AWS VPC 独特の表記です。これによってサブネット間の通信が可能になっています。こちらの記事で想像されているように、仮想ルータ同士はお互いに接続されているのです。
インターネットゲートウェイ (igw) と仮想ルータは物理的には回線で接続された状態ですが、仮想ルータにルーティング設定がなされていないためサブネット内からのトラフィックは igw に到達できません。この状態のサブネットを private subnet とよびます。そこで、以下のようにルーティング設定を追加します。igw へのルーティングが設定されたサブネットを public subnet とよびます。Route Table タブの (Edit ではなく) Route Table リンクを押した後の Edit から編集します。
mysubnet-0001, mysubnet-0002 それぞれに所属する EC2 インスタンスを一台ずつ起動します。ENI (Elastic Network Interface) という仕組みがあるためプライベート IP は起動時に指定できます。以下のように設定しました。
ここまでで以下のような状況になりました。仮想ルータのルーティング設定も完了しています。
インターネット --- VPC { インターネットゲートウェイ (igw) --- 仮想ルータ (Route Table) --- サブネット --- EC2 }
しかしながら EC2 インスタンスはプライベート IP しか保有しておらずグローバル IP がないためインターネットと通信できません。正確には EC2 からインターネット向けのトラフィックはルーティングできますが、レスポンスのトラフィックを EC2 までルーティングする手段がありません。そこで EC2 に Elastic IP という AWS が提供するグローバルな仮想 IP を割り当てます。「Elastic IPs メニュー」→「Allocate New Address」→「Associate Address」から設定します。
$ chmod 400 mykeypair.pem
$ ssh ec2-user@52.68.44.224 -i mykeypair.pem
$ ip addr show
inet 192.168.1.4/24 brd 192.168.1.255 scope global eth0
$ 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 ← 所属サブネット