AWSのパブリックサブネットに踏み台サーバーを構築し、プライベートサブネットのサーバーへSSHする①（VPC・サブネット作成）

AWSでNW構築を行う中で、サーバーへのアクセスのために踏み台サーバーを構築することが良くあるため、構築手順をブログにまとめておくことにしました。
AWSを初めて触る人でもわかりやすいように、なるべく噛む砕いて手順を書いていこうと思います。
今回は基盤となるVPC・サブネットの構築を行います。

# 「AWSのパブリックサブネットに踏み台サーバーを構築し、プライベートサブネットのサーバーへSSHする」の手順記事まとめ
①[VPC・サブネット作成](https://qiita.com/tonkatsu_oishi/items/ee5d7f64a43ba7deb671)←今ここ
②[踏み台Linuxサーバー構築](https://qiita.com/tonkatsu_oishi/items/aabddfa6b54f1a29d4af)
③[踏み台経由のSSH接続](https://qiita.com/tonkatsu_oishi/items/9ffdd560624f25dc7fa9)
④[Windowsnの踏み台サーバー作成](https://qiita.com/tonkatsu_oishi/items/80d86fa0145e37896147)
⑤[プライベートサブネット上のLinuxサーバーをWEBサーバー化しWindowサーバーから接続確認をする](https://qiita.com/tonkatsu_oishi/items/27bec9679b247a035757)
※関連記事
[Route53でPrivateHostedZoneを作成しVPC内の名前解決を行う](https://qiita.com/tonkatsu_oishi/items/26f121d25db5c9fb7163)

# 用語の確認
構成を確認する前に、簡単に用語を確認しておきます。
構築手順だけ知りたい方はこの章は読み飛ばして「構成の確認」にお進みください。

### そもそもクラウドとは
クラウドとは、「ユーザー側でサーバーやアプリを揃えるのではなく、インターネット経由で必要な時だけサービスを利用する」という考え方のことです。
### AWS
AWSの正式名称は「Amazon Web Services」です。
AWSは、Amazonが提供するパブリッククラウドサービスのことです。AWSを利用すれば、ユーザー側でデータセンターや物理サーバーを用意せずとも、インターネット経由で大規模なシステム構築が可能となります。
参考：[AWSとは？](https://aws.amazon.com/jp/what-is-aws/)

### リージョン
AWSはクラウドサービスとはいえ、実際は世界のどこかには物理的なデータセンターやサーバーが存在します。ユーザーはインターネット経由でAWSのデータセンター内の物理的なリソースにアクセスし、システムを構築します。AWSのデータセンターは世界各国に存在します。AWSのデータセンターが存在する地理的な場所のことを「リージョン」といいます。AWSのデータセンターは、各地のリージョン内の複数のアベイラビリティゾーン（AZ）に分散して存在します。
参考：[リージョンとアベイラビリティーゾーン](https://aws.amazon.com/jp/about-aws/global-infrastructure/regions_az/?p=ngi&loc=2)

### アベイラビリティゾーン
アベイラビリティゾーンとは、AWSリージョン内に存在する1つ以上のデータセンターのことです。アベイラビリティゾーン内のリソースは電源やネットワーク、接続が冗長化されています。また、アベイラビリティゾーン同士は広帯域・低レイテンシーの冗長化された回線で相互に接続されています。
参考：[リージョンとアベイラビリティーゾーン](https://aws.amazon.com/jp/about-aws/global-infrastructure/regions_az/?p=ngi&loc=2)

### VPC
AWS内に作成する仮想的なネットワークのことです。AWSを利用する場合は、VPCの上にサーバーやデータベースなどのリソースを構築することとなります。
/16 から /28 の範囲でIPCIDRを指定します。RFC1918の範囲からIPを指定することが推奨されています[（IPv4 VPC CIDR ブロック）](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-cidr-blocks.html)。

### インターネットゲートウェイ（IGW)
VPCとインターネット間の通信を可能にする機能です。
構成図などでは省略して「IGW」と書かれていることがあります。
VPCにインターネットゲートウェイをアタッチし、ルートテーブルのデフォルトゲートウェイ（0.0.0.0/0）のターゲットとしてインターネットゲートウェイを指定することで、VPC内のサブネットからインターネットへの通信が行えるようになります。

### サブネット
VPCのIPアドレス範囲をさらに分割したものです。サブネットのIPアドレス範囲は、VPCよりも狭い範囲で設定する必要があります。サブネットごとにルートテーブルを分けて設定できます。
AWSでは、インターネットゲートウェイへのルートがあるサブネットを「パブリックサブネット」、インターネットゲートウェイへのルートがないサブネットを「プライベートサブネット」といいます。

### NATGateway
NATとは、送信元のIPアドレスを別のIPアドレスに変換する機能のことです。プライベートなネットワークからインターネットへ通信する際には、NATによりプライベートIPアドレスをパブリックIPアドレスへ変換します。オンプレミス環境ではNAT対応ルーターなどでNATによるIPアドレス変換を行っています。AWSでは、NATGatewayというマネージドサービスにより、NATの機能が利用できます。



# 構成の確認
今回は東京リージョンに10.0.0.0/21の範囲でVPCを構築します。
VPCにはインターネットゲートウェイをアタッチします。
VPCの中には、パブリックサブネット（10.0.0.0/24）、プライベートサブネット（10.0.1.0/24)の二つのサブネットを構築します。
パブリックサブネットのルートテーブルにはインターネットゲートウェイあてのルートを設定し、インターネットアクセスが行えるようにします。また、パブリックサブネットにNATGatewayを構築し、プライベートサブネットからNATGateway経由でインターネットアクセスを行えるように設定します。

今回構築するリソースを構成図に起こしたものが下記図となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/9f05f553-8b9f-e81b-7c23-6d10ae3d3ddf.png)

また、ルートテーブルの情報まで記したものが下記図となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/5630aa6d-184f-155b-99cb-ed8f9e444dbd.png)

パブリックサブネットのデフォルトゲートウェイ（0.0.0.0/0）にはインターネットゲートウェイを指定します。プライベートサブネットのデフォルトゲートウェイ（0.0.0.0/0）にはNATGatewayを指定します。

# VPCの構築

## VPCの構築
VPCから構築していきます。
AWSアカウントへログインし、コンソール上部の検索窓に「VPC」と入力します。
表示されたリンクからVPCのサービス画面に移動します。
左メニューから「YourVPCs」というリンクを押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/2fcbc9af-dddd-3b6f-8dba-0bba7e37d12f.png)

VPCの作成画面が表示されます。
「作成するリソース」を「VPCのみ」とします。
※「VPCなど」を選択すると、VPC・サブネット・インターネットゲートウェイ・NatGatewayなどを一気に作成することも可能です。

「名前タグ」にVPCの名前を入力します。
今回は「HTTPS_DEMO_VPC」という名前でVPCを作成します。
「IPv4 CIDRブロック」に「IPv4 CIDRの自動入力」を指定します。
「IPv4 CIDR」のテキストボックスにVPCのアドレス範囲を入力します。
今回は10.0.0.0/21で作成しました。

「IPv6 CIDRブロック」は「IPv6 CIDRブロックなし」を指定します。
「テナンシー」は「デフォルト」を指定します。
（参考：[テナンシー](https://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/auto-scaling-dedicated-instances.html)）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/c034443d-ea8f-41e2-9254-6f46bbb7fcb3.png)

NAMEタグ以外のタグを設定したい場合は、「Add tag」ボタンを押下してタグを追加します。
全ての設定が完了したら、「VPCを作成」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/2f88dd51-f9ef-fadd-7382-5fddc02a804d.png)

コンソール上部に「VPCが正常に作成されました」と表示されることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/42c9618e-b934-5975-56c0-9a8d5e8f9db0.png)


これでVPCの構築が完了です。

## インターネットゲートウェイの作成・アタッチ
インターネットゲートウェイを作成し、VPCにアタッチします。
左メニュー画面から「Internet gateway」のリンクを押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/36d23d9a-a100-90da-756b-60a2dc8d9290.png)

インターネットゲートウェイの一覧が表示されます。
右上の「インターネットゲートウェイの作成」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/02df347e-7ac7-77b6-8805-3e740949a433.png)

インターネットゲートウェイの作成画面が表示されます。
「名前タグ」にインターネットゲートウェイの名前を入力します。
名前タグ以外のタグを設定したい場合は「新しいタグを追加」を押下してタグを追加設定します。
全ての設定を終えたら、「インターネットゲートウェイの作成」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/8a518026-fbd9-c7a1-c3a9-fcff559af262.png)

画面上部に「インターネットゲートウェイが作成されました」と表示されることを確認します。
右上の「アクション」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/80368f1c-bf84-e094-567f-bb9e009c895a.png)

インターネットゲートウェイのアタッチ画面が表示されます。
「使用可能なVPC」のプルダウンメニューを展開し、先ほど構築したVPCを指定します。「インターネットゲートウェイのアタッチ」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/3732b6ee-cc1f-83a1-6227-f359af591d88.png)

これで、インターネットゲートウェイの作成・アタッチが完了です。

# サブネットの作成
作成したVPCにサブネットを作っていきます。
VPCの左メニューから「Subnets」を選択し、サブネットの一覧画面へ移動します。「サブネットを作成」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/b0abc40a-d6a7-1cab-78b5-b8e3082acfb7.png)

サブネットの作成画面が表示されます。
「VPC ID」のプルダウンメニューから先ほど作成したVPCを選択します。
「サブネット名」にサブネット名を入力します。画像ではパブリックサブネットを作成しているため、「HTTPS_DEMO_SUB_PUB1a」というサブネット名を入力しています。

「アベイラビリティゾーン」に「ap-northeast-1a」を選択します。
「IPv4 CIDRブロック」のテキストボックスにサブネットのIPアドレス範囲を入力します。今回は「10.0.0.0/24」で入力しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/e2603414-f5a5-25ec-f92a-9f7f5ba87669.png)

NAMEタグ以外のタグを設定したい場合は、「Add tag」ボタンを押下してタグを追加します。
全ての設定が完了したら、「サブネットを作成」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/e2a2fb9a-1d61-6bd6-5b76-3eaa0af8bd72.png)

画面上部に「1件のサブネットが正常に作成されました」と表示されることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/7fb4c597-103b-de95-f4c6-11fae8d2f7fe.png)

同じ要領で、プライベートサブネット（HTTP_DEMO_SUB_PRV1a、10.0.1.0/24）も作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/6f0238b5-d5b8-2a23-b501-66120d46ea70.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/38af8ab4-5201-2f91-7a76-9f55689d87f1.png)

# パブリックサブネットのルートテーブル編集
サブネットが作成されたら、サブネットにアタッチするルートテーブルを編集します。
VPCの左メニューから「Route tables」を押下します。
VPCを作成した時点で、すでにルートテーブルが一つ追加された状態となっています。
先ほど作成したVPCに所属しているルートテーブルを選択します。

デフォルトの状態だと、ルートテーブルにはNAMEタグが設定されていません。
選択したサブネットの「Name」の位置にカーソルを合わせるとペンのマークが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/e36c0982-bf00-5d0a-3597-8e9d0fcf0c26.png)

ペンマークを押下すると、NAMEタグの編集画面が表示されます。
デフォルトで存在するルートテーブルはパブリックサブネット用のルートテーブルとするため、「HTTPS_DEMO_SUB_PUB1a」と入力し、「保存」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/4b1f5879-2159-0edd-d618-8716f2c9c974.png)

ルートテーブルにNAMEタグが設定されました。
コンソール下部に表示されている詳細メニューから「ルート」タブに移動し、「ルートを編集」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/e9238b2d-50ab-ac6c-c6fd-1c8cd3d7b5b9.png)

ルートの編集画面が表示されます。
デフォルトの状態だと、VPCのIPアドレス範囲（10.0.0.0/21）のターゲットとして「local」が登録されています。このルートテーブルはパブリックサブネット用の物とするので、デフォルトゲートウェイ（0.0.0.0/0）に対してターゲットをインターネットゲートウェイとするようルートを設定します。
「ルートを追加」を押下すると、ルート入力用のテキストボックスが追加されます。
「送信先」に「0.0.0.0/0」を入力し、「ターゲット」のプルダウンメニューから先ほど作成したインターネットゲートウェイを選択します。「変更を保存」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/23482c42-c86c-7c8a-5e35-f628e5578f3a.png)

画面上部に「ルートを正常に更新しました」と表示されることを確認します。
「サブネットの関連付け」タブを押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/ad0a4bf8-380a-d059-852e-7fedc054ec90.png)

デフォルトの状態だと、「明示的なサブネットの関連付け」には何も表示されていません。
※ただし、VPC作成時に一緒に作成される初期ルートテーブル「メインルートテーブル」となるため、今回作成されたVPC内のサブネットについては、ルートテーブルが何も紐づけられていない場合は暗黙的にこのルートテーブルに紐づけられることとなります。
ここでは明示的にサブネットの関連付けを行います。
「サブネットの関連付けを編集」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/484bcbfc-4758-4441-b6a2-e1d85501914e.png)

サブネットの関連付け編集画面が表示されます。
パブリックサブネットを選択し、「関連付けを保存」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/48ee1237-446d-d013-52fc-0b259f5b7aa4.png)

画面上部に「サブネットの関連付けが正常に更新されました」と表示されることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/7f42fb02-6017-e0f7-5c45-aceed80db583.png)

これで、パブリックサブネットへのサブネットの関連付けが完了です。

# プライベートサブネットのルートテーブル作成
これで、パブリックサブネットへのルートテーブル紐づけが完了しました。
次は、プライベートサブネットに紐づけるためのルートテーブルを作成します。
「ルートテーブル作成」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/e4cadd03-a5c0-59d6-9d35-bd4c880dd59c.png)

ルートテーブルの作成画面が表示されます。
ルートテーブルの名前を入力します。
今回はプライベートサブネット用のルートテーブルのため、「HTTPS_DEMO_RTB_PRV」と入力します。
「VPC」のプルダウンメニューから先ほど作成した「HTTPS_DEMO_VPC」を選択します。
NAMEタグ以外のタグを設定する場合は「新しいタグを追加」を押下してタグを追加設定します。
「ルートテーブルを作成」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/2d5491e6-f0d9-1605-e023-0a423b2e1d51.png)

作成直後の状態だと、ルートテーブルはどのサブネットにも紐づいていません。
「サブネットの関連付けを編集」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/eaced916-a091-07c1-d9e5-fdb550711ab3.png)

サブネットの関連付け編集画面が表示されます。
「HTTPS_DEMO_SUB_PRV_1a」を選択し、「関連付けを保存」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/5b15bc71-1737-a482-8c3c-35a427c950c9.png)

プライベートサブネット用のルートテーブル（HTTPS_DEMO_RTB_PRV）には、まだローカルCIDR範囲以外のルートテーブルが設定されていません。
プライベートサブネットはNatGateway経由でインターネットに接続するように設定したいため、NatGatewayの作成を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/7e678d68-3b73-f336-0af3-4b3810daac49.png)

# NATGatewayの作成

VPCの左メニューから「Natgateways」を押下します。
NATゲートウェイの一覧画面に移動します。
現在はまだNATGatewayが一つも存在しない状態です。
右上の「NATゲートウェイを作成」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/bf4ef955-7c0d-3e3d-a36a-2b39f745fc13.png)

NATGatewayの作成画面が表示されます。
「名前」のテキストボックスにNATGatewayの名前を入力します。
今回は「HTTPS_DEMO_NAT1a」と入力しました。
「サブネット」のプルダウンメニューから「HTTPS_DEMO_SUB_PUB1a」を選択します。
「接続タイプ」にパブリックを選択します。
デフォルトの状態だとElasticIP（リソースに割り当てられる固定のパブリックIPアドレス）が一つも存在しない為、「ElasticIPを割り当て」を押下しElasticIPを割り当てます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/46bc7e03-408f-b97d-d9f4-bf45dc638570.png)

「追加設定」を展開すると、NATGatewayに割り当てるプライベートIPアドレスを指定することができます。指定しない場合は、AWSにより空いているプライベートIPアドレスが割り当てられます。今回はプライベートIPアドレスを指定せずNATを作成するため、何も入力していません。
NAMEタグ以外のタグを設定する場合は「新しいタグを追加」で追加のタグを設定します。「NATゲートウェイを作成」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/b7802792-d0fc-db59-b6c4-e20e67e15b80.png)


「NATゲートウェイが正常に作成されました」と表示されることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/cba1572d-d03c-498e-0d35-2507ae4dcb93.png)

# プライベートサブネット用のルートテーブルへのルート追加
プライベートサブネット用のルートテーブルに、NATゲートウェイあてのルートを追加します。


VPCの左メニューから「ルートテーブル」を押下します。
プライベートサブネット用のルートテーブル（HTTPS_DEMO_RTB_PRV）を選択し、ルートタブに移動します。「ルートを編集を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/5e33eb47-12d2-b013-48b3-e5e9e1990b9e.png)

ルートの編集画面が表示されます。
デフォルトゲートウェイ（0.0.0.0/0）のターゲットを先ほど作成したNATGatewayに指定し、「変更を保存」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/47165c30-1bcd-cae8-e3ff-53c9a8ce17c5.png)

これで、VPC・サブネット・インターネットゲートウェイ・ルートテーブル・NATGatewayの作成が完了しました。

# 作成したリソースの確認

再度、作成したリソースを確認します。
10.0.0.0/21のVPCの中に、パブリックサブネット（10.0.0.0/24）とプライベートサブネット（10.0.1.0/24）の二つが存在します。
パブリックサブネットのデフォルトゲートウェイ（0.0.0.0/0）はVPCにアタッチしたインターネットゲートウェイに設定されています。
プライベートサブネットのデフォルトゲートウェイ（0.0.0.0/0）はパブリックサブネットに作成したNATGatewayに設定されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/0c06aa7f-a348-77f4-7df9-2ef57c9751e9.png)

ここまでお読みいただきありがとうございました。
[次回](https://qiita.com/tonkatsu_oishi/items/aabddfa6b54f1a29d4af)はパブリックサブネット上に踏み台サーバーを構築します。