🪜

【AWS】VPCについてまとめてみた(踏み台サーバ作成ハンズオン付き)

2023/07/16に公開

概要

会社で aws を触ることになり、基本から学んでいこうと思ったため備忘録として記事を書き始めました。
今回は VPC に関する以下の用語周りの説明の後踏み台サーバを利用したネットワークシステムを作成してみようと思います。

  • VPC
  • インターネットゲートウェイ
  • サブネット
  • ルートテーブル
  • NAT ゲートウェイ
  • EC2
  • セキュリティグループ

もし理解が違うよというところ等ありましたら優しく教えて頂けると幸いです 🙇‍♀️

VPC とは

公式ドキュメント引用。
Amazon VPC とは、Amazon Virtual Private Cloud (以下 VPC と省略)の略語です。
aws の物理サーバ内でネットワークを論理的[1]に隔離し、起動されているネットワークです。
aws 内のリソース(EC2、RDS 等)を内部で使用することができます。
VPC には複数のプライベート IP アドレスを割り当てることができ、VPC 内部のサブネットや起動したリソースにプライベート IP アドレスを割り振り、外部からの接続のルーティングやリソース同士の接続の設定等を行うことができます。
VPC でのネットワークシステム の作成方法、外部インターネットからの接続の流れを以下の章で説明します。

VPC でのネットワークシステムの作成方法、外部インターネットからの接続の流れ

VPC でのネットワークシステムの作成方法と外部インターネットからの接続の流れを以下で図示しています。
ここでは一例としてパブリックサブネット上に配置された踏み台サーバである EC2 インスタンスを経由してプライベートサブネット上に配置された EC2 インスタンスにアクセスし、その EC2 インスタンスから外部インターネットへの HTTP リクエストを NAT ゲートウェイを介して投げるという構成のネットワークシステムを取り上げています。
上記構成を組むことでプライベートサブネット内の EC2 インスタンスに仮に秘匿性の高い情報を格納したとして、外部から直接アクセスさせることを避けることができます。[2]

黒い連番の数字で書かれているのは、VPC でのネットワークシステムの作成方法の手順です。
以下手順が各数字と対応します。

  1. VPC に [3]10.0.1.0/23(10.0.0.0〜10.0.1.255)の IP アドレスを割り当てて作成する
  2. パブリックサブネットに 10.0.0.0/24(10.0.0.0〜10.0.0.255)の IP アドレスを割り当てて作成する
  3. プライベートサブネットに 10.0.1.0/24(10.0.1.0〜10.0.1.255)の IP アドレスを割り当てて作成する
  4. インターネットゲートウェイを作成する
  5. NAT ゲートウェイを作成してパブリックサブネットに配置する
  6. インターネットゲートウェイを介した全ての IP アドレスへの通信を許可するルートを格納したルートテーブルを作成してパブリックサブネットに付与する
  7. NAT ゲートウェイを介した全ての IP アドレスへの通信を許可するルートを格納したルートテーブルを作成してプライベートサブネットに付与する
  8. 外部からの SSH 接続を許可するセキュリティグループ内に入った EC2 インスタンスを立ち上げる
  9. パブリックサブネット内の EC2 インスタンスからの SSH 接続のみ許可するセキュリティグループに入った EC2 インスタンスを立ち上げる

青い連番の数字で書かれているのは、外部インターネットからの VPC への接続方法の手順です。
以下手順が各数字と対応します。

  1. 自分の PC 等からインターネットゲートウェイを介してパブリックサブネット内の EC2 に SSH 接続する
  2. パブリックサブネット内の EC2 インスタンスからプライベートサブネット内の EC2 インスタンスに SSH 接続する
  3. プライベートサブネット内の EC2 インスタンスから NAT ゲートウェイを介して外部インターネットに HTTP リクエストを投げる

図の中の各用語の意味については、以降の章で説明していきます。

インターネットゲートウェイとは

インターネットゲートウェイとは、VPC と外部インターネットとの接続を可能にする物です。
VPC にインターネットゲートウェイを付与することで、外部インターネットからインターネットゲートウェイを介して VPC 内にあるパブリック IP アドレスが公開された EC2 インスタンス内にアクセスすること等ができます。

サブネット とは

サブネットとは、VPC に割り当てられた複数の IP アドレスを更に分割してグルーピングした IP アドレスのまとまりです。
主なサブネットのタイプとしてパブリックサブネットとプライベートサブネットがあり、パブリックサブネットはインターネットゲートウェイを介した外部インターネットからの直接の接続が可能なサブネット、プライベートサブネットは直接の接続が可能ではないサブネットのことを指します。

ルートテーブルとは

各サブネットからの外部に対する通信の送信先を決定する物です。
ルートテーブルではターゲットと送信先を組として通信の送信先を決めることができます。
ターゲットとは通信の際に使用される通信の出口、送信先は IP アドレスのまとまりになります。
このターゲットと送信先の組をルートといいます。
このルートが複数格納された物がルートテーブルです。
例えばターゲットをインターネットゲートウェイ、送信先を全 IP アドレスとしたルートをルートテーブルの中に含め、サブネットに紐づけるとそのサブネットからはインターネットゲートウェイを介した全 IP アドレスへのアクセスが可能になります。

NAT ゲートウェイとは

プライベート IP アドレスをパブリック IP アドレスに変換する物です。
プライベートサブネット内にある EC2 インスタンスのプライベート IP アドレスを最終的に NAT ゲートウェイのパブリック IP アドレスに変換し、外部インターネットとの接続を可能にしてくれます。

EC2、セキュリティグループとは

先日公開した記事に詳細を記述しているので、よければ見てみてください。

https://zenn.dev/alichan/articles/c40b793253f5db

VPC を使用して 踏み台サーバを利用したネットワーク システムを作成してみよう

では、上記で説明した 踏み台サーバを利用したネットワークシステムを作成してみましょう。
少し長くなりますが、一緒にやってみてもらえると嬉しいです 😌

  1. VPC の作成

まず、VPC を作成します。
マネジメントコンソールで VPC 画面を表示してください。
VPC を作成ボタンを押下して、VPC を作成画面に遷移します。

VPC を作成画面で以下の様に入力項目に値を設定してください。
基本、以降も指定した入力項目以外はデフォルト値を設定してください。

項目名
作成するリソース VPC のみ
名前タグ - オプション step-vpc
IPv4 CIDR 10.0.0.0/23

最後に、VPC を作成ボタンを押下して VPC を作成してください。

  1. サブネットの作成

次に、サブネットを作成します。
サブネット画面に遷移してサブネットを作成ボタンを押下してください。

サブネットを作成画面で以下項目を入力してください。

項目名
VPC ID vpc-xxx...(step-vpc)
サブネット 1 - サブネット名 public-step-subnet
サブネット 1 - アベイラビリティーゾーン アジアパシフィック(東京)
サブネット 1 - IPv4 CIDR 10.0.0.0/24
サブネット 2 - サブネット名 private-step-subnet
サブネット 2 - アベイラビリティーゾーン アジアパシフィック(東京)
サブネット 2 - IPv4 CIDR 10.0.1.0/24

最後に、サブネットを作成ボタンを押下してサブネットを作成してください。

  1. インターネットゲートウェイを作成する

次に、インターネットゲートウェイを作成します。
インターネットゲートウェイ画面に遷移してインターネットゲートウェイの作成ボタンを押下してください。

インターネットゲートウェイの作成画面で以下項目を入力してください。

項目名
名前タグ step-internet-gateway

インターネットゲートウェイの作成ボタンを押下してインターネットゲートウェイを作成してください。
次に、インターネットゲートウェイを先ほど作成した VPC に付与します。
インターネットゲートウェイ一覧に戻ってstep-internet-gatewayのインターネットゲートウェイ ID を押下し、step-internet-gatewayの詳細画面に遷移してください。

アクション > VPC にアタッチを押下し、VPC にアタッチ画面に遷移してください。

VPC にアタッチ画面で以下項目を入力してください。

項目名
使用可能な VPC step-vpc

最後に、インターネットゲートウェイのアタッチボタンを押下してインターネットゲートウェイを VPC にアタッチします。

  1. NAT ゲートウェイを作成する

次に、NAT ゲートウェイを作成します。
NAT ゲートウェイ画面に遷移して NAT ゲートウェイを作成ボタンを押下してください。

NAT ゲートウェイを作成画面で以下項目を入力してください。

項目名
名前 - オプション step-nat-gateway
サブネット public-step-subnet
接続タイプ パブリック
Elastic IP 割り当て ID Elastic IP を割り当てボタンを押下して割り当てる

最後に、NAT ゲートウェイを作成ボタンを押下して NAT ゲートウェイを作成してください。

  1. ルートテーブルを作成する

次に、ルートテーブルを作成して各サブネットに紐付けます。
まず、パブリックサブネットに紐づけるルートテーブルを作成します。
ルートテーブル画面に遷移して ルートテーブルを作成ボタンを押下してください。

ルートテーブルを作成画面で以下項目を入力してください。

*1

項目名
名前 - オプション public-step-route-table
VPC step-vpc

ルートテーブルを作成ボタンを押下して ルートテーブルを作成してください。
次に、パブリックサブネットに上記ルートテーブルを紐付けます。
ルートテーブル一覧に戻ってpublic-step-route-tableのルートテーブル ID を押下し、public-step-route-tableの詳細画面に遷移してください。

ルートタブ > ルートを編集ボタンからルートを編集画面に遷移し、以下項目をルートを追加ボタンを押下してから入力してください。

*2

項目名
送信先 0.0.0.0/0
ターゲット インターネットゲートウェイ > step-internet-gateway

変更を保存ボタンを押下して変更を保存してください。
次に、ルートテーブルの詳細画面でサブネットの関連付けタブを開き、サブネットの関連付けを編集ボタンを押下してください。
サブネットの関連付けを編集画面で*3public-step-sunetを選択して、関連付けを保存ボタンを押下してください。

次に、プライベートサブネットに紐づけるルートテーブルを作成します。
上記手順をプライベートサブネットに紐づけると読み替えて実施してみてください。
プライベートサブネット用ルートテーブルで設定する各入力項目の値一覧はこちらです。
上記文章の中で米印がついた数字の箇所を各々下の対応する数字の入力項目と読み替えてください。

*1

項目名
名前 - オプション private-step-route-table
VPC step-vpc

*2

項目名
送信先 0.0.0.0/0
ターゲット NAT ゲートウェイ > step-nat-gateway

*3 private-step-subnet

  1. EC2 インスタンスを立ち上げる

次に、踏み台サーバ用の EC2 インスタンスを立ち上げます。
インスタンス一覧画面に遷移してインスタンスを起動ボタンを押下してください。

インスタンスを起動画面で以下項目を入力してください。

*1

項目名
名前とタグ step-step
キーペア名 新しいキーペアの作成ボタンを押下してstep-step-keyというキーペアを作成し、キーをダウンロードする
ネットワーク設定 VPC:step-vpc
サブネット:public-step-subnet
パブリック IP の自動割り当て:有効化
を設定する
ネットワーク設定 > ファイアウォール(セキュリティグループ) セキュリティグループを作成する
セキュリティグループ名:step-step-sg
説明:step-step-sg
ネットワーク設定 > セキュリティグループルール 1 タイプ:ssh
ソースタイプ:自分の IP

最後に、インスタンスを起動ボタンを押下して インスタンスを作成してください。

次に、秘匿サーバ用の EC2 インスタンスを作成します。
上記手順を 秘匿サーバ用の EC2 インスタンスを作成すると読み替えて実施してみてください。
秘匿サーバ用の EC2 インスタンスで設定する各入力項目の値一覧はこちらです。
上記文章の中で米印がついた数字の箇所を各々下の対応する数字の入力項目と読み替えてください。

*1

項目名
名前とタグ step-secret
キーペア名 新しいキーペアの作成ボタンを押下して step-secret-key というキーペアを作成し、キーをダウンロードする
ネットワーク設定 VPC:step-vpc
サブネット:private-step-subnet
パブリック IP の自動割り当て:有効化
を設定する
ネットワーク設定 > ファイアウォール(セキュリティグループ) セキュリティグループを作成する
セキュリティグループ名:step-secret-sg
説明:step-secret-sg
ネットワーク設定 > セキュリティグループルール 1 タイプ:ssh
ソースタイプ:カスタム
ソース:step-step のプライベート[4]IPv4 アドレス
  1. 踏み台サーバを経由して秘匿サーバに接続する

自分の PC 上でターミナルを立ち上げて、以下コマンドを入力しstep-stepに SSH 接続してください。

$ chmod 600 [step-step-keyを保存したパス]
$ ssh -i [step-step-keyを保存したパス] ec2-user@[step-stepのパブリックIPv4アドレス]

接続途中でAre you sure you want to continue connecting (yes/no/[fingerprint])?と聞かれますが、yesと入力してください。
これは次手順でも同じです。
step-stepに接続できたら、step-step内で以下コマンドを入力し、ダウンロードしたstep-secret-keyをそのままstep-step上に作成したいため、ファイルを作成して vi エディタで自分の PC のstep-secret-keyから中身をコピペしてください。

$ touch step-secret-key.pem
$ vi step-secret-key.pem

step-secret-keyを作成し終わったら、以下コマンドを入力してstep-secretに接続してください。

$ chmod 600 ./step-secret-key.pem
$ ssh -i ./step-secret-key.pem ec2-user@[step-secretのプライベートIPv4アドレス]

これで、踏み台サーバを経由して秘匿サーバに接続できました。

  1. 秘匿サーバから HTTP 通信を行い Google のサイト情報を取得する

step-secretで以下コマンドを入力し、Google の web サイトに対して HTTP リクエストを送信してみてください。

$ curl https://www.google.com/

Google のサイト情報が返ってきたら、成功です。

終わりに

ハンズオンお疲れ様でした。
次回は VPC を使用して Web3 層構造での Web システムを作成しようと思います。
他にも aws に関して 日々記事を書いているので、よかったら読んでみてください。
https://zenn.dev/alichan/articles/c067fdee3f5870
https://zenn.dev/alichan/articles/c40b793253f5db
ここまで読んでいただき本当にありがとうございます 🙇‍♀️

参照

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/what-is-amazon-vpc.html

脚注
  1. 論理的に隔離するとは、各ネットワークに物理的サーバを用意してネットワークを物理的に分離するのではなく、同じ物理的なサーバ内で複数のネットワークを存在させ、内部でネットワークを分離するということです。 ↩︎

  2. 本来 SessionManager を用いて踏み台サーバを利用せずとも安全にプライベートサブネット内の EC2 インスタンスに接続できるのですが、勉強のためあえて踏み台サーバを作成しています。 ↩︎

  3. IPアドレス/数字という表記方法は CIDR 表記といって、ネットワーク内で使用される IP アドレスの範囲を表現する物です。
    上記10.0.0.0/23と表記された場合は10.0.0.0〜10.0.1.255の範囲の IP アドレスを示すことになります。 ↩︎

  4. インスタンス一覧画面 > インスタンス ID を押下して遷移したインスタンス概要画面で確認できます。 ↩︎

Discussion