AWS　VPCウィザード機能ですばやく踏み台サーバとプライベートサブネットを構築する

## :desktop: この記事の目的

AWSを使用して構築したプライベートネットワーク(プライベートサブネット)に踏み台サーバを経由することでアクセスし、ネットワーク内部のEC2インスタンスにアクセスする手順について確認します。

今回は、AWSが用意している「**VPCウィザード**」機能を使用することで、すばやく簡単に**VPC**(Virtual Private Cloud)と、踏み台サーバとなるNATインスタンスを作成します。

VPCはインターネットからアクセス可能な**パブリックサブネット**と内部ネットワークである**プライベートサブネット**からなります。VPCウィザードを使用するとこれらの2つのサブネットが自動的に作成されます。

加えて、プライベートサブネット内にEC2インタンスを作成し、インターネットからは踏み台サーバを経由してアクセスするよう手順を確認します。

本記事は、アマゾン・データ・サービス・ジャパン株式会社から提供されている以下のガイドをもとに書いています(同ガイドの作成日は2012/07/19)。
詳細はこちらをご覧下さい。

　:paperclip: NATインスタンスの作成方法
　https://www.slideshare.net/AmazonWebServicesJapan/nat-20120719

## :desktop: 環境構成図とNATインスタンス

今回実現する想定の環境構成図です(出典：アマゾン・データ・サービス・ジャパン株式会社)。
![Screenshot from 2020-08-30 01-03-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/64d46143-b721-51fe-8783-a02ff4849b95.png)
図の通り、インターネットに直接接続していない(インターネットから直接アクセスできない)プライベートサブネット《Private Subnet》(一般的にはプライベートネットワークと呼びます)へ接続するために、NAT(NATインスタンス)を介して接続します。このNATインスタンスのことを**踏み台サーバ**(Bastion)と呼びます。

## :desktop: 構築を実行する

上記の環境構成図を参考に、以下順を追ってさっそく構築してみます。

:pushpin: 前提条件

・本手順はAWSのルートユーザで実行しています。
・必要に応じてIAMを作成し、環境構築とインスタンスへアクセスするユーザを分けるなど、実際の業務に沿った対応をされることをお勧めします。

####①キーペアを用意する

まず、予めキーペアを用意する必要があります。
このキーペアは、踏み台サーバ及びプライベートサブネットのEC2インスタンスにアクセス(ログイン)する際に使用する鍵となるものです。

(1)画面上部の「サービス」メニューから「EC2」を選択します。
![Screenshot from 2020-08-30 03-38-57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/caa70d02-a439-cf1c-b6bd-6046226efa61.png)
(2)左枠メニュー「ネットワーク&セキュリティ」から「キーペア」を選択し、下図の右上のボタン「キーペアの作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/5aa5d01a-3906-3c63-64d1-5f56710c838b.png)
(3)キーペアの名前を入力し、ファイル形式をpemとします。
右下の「キーペアを作成」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/b1b0ee89-e85c-5dee-0807-42e9456dda37.png)
(4)作成するキーペアのpemファイルをダウンロードします。ダウンロードダイアログが立ち上がるので、任意の場所にファイルを格納します。
**※キーペアはここでしかダウンロードできないので忘れないように注意して下さい。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/3c39a502-df07-e853-3ce9-b1afc10dc873.png)

####②VPCを作る

VPCを作成します。さらに、VPCの中にPublic SubnetとPrivate Subnetを作成します。以下のような構成となります。
![Screenshot from 2020-08-30 01-31-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/7887a254-27b8-5c1b-7703-a8e61e31ecde.png)
(1)画面上部の「サービス」メニューから「VPN」を選択します。
![Screenshot from 2020-08-30 01-50-51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/2a5ee020-b0a1-67cb-e27b-e911b5ef3aef.png)
(2)「VPCウィザードの起動」を選択します。
![Screenshot from 2020-08-30 01-51-51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/9ae1189e-93e2-b188-65d2-bd10daffcc9e.png)
(3)ウィザードメニューが4つあるので、「パブリックとプライベートサブネットを持つVPC」を選択します。
![Screenshot from 2020-08-30 01-54-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/81340e68-d365-fad4-6e0b-c9f25237cf26.png)
(4)下図の範囲について設定を行います。
　・VPC名を設定します。ここでは「業務用VPC」としました。
　・それ以外の設定はデフォルトのままです。
![Screenshot from 2020-08-30 02-01-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/675161fd-14de-bd23-61cd-d77ec9dd2e54.png)
(5)下図の項目で、「代わりにNATインスタンスを使用」を選択します。
![Screenshot from 2020-08-30 02-06-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/03241830-8510-d0cc-dad7-58c4aa5372ca.png)
(6)下図のように設定項目が変わります。「キーペア名」項目で、事前に作成したキーペアを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/ca90d75d-1d55-3d4c-0bcd-7c016932ca6f.png)
(7)「VPCの作成」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/0ab91a99-172a-962f-0b93-ee9a36c4f438.png)
(8)作成が完了すると下図のように完了画面が表示されます。「OK」をクリックして下さい。
![Screenshot from 2020-08-30 02-21-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/d4be4194-5b03-a998-5463-aa94bae6f90b.png)
(9)下図の通り、「業務用VPC」の名で作成されたことがわかります(下段のVPC、冗談はデフォルトVPC)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/e6c62b32-542c-1792-71b7-b78319bcb089.png)
(10)以上でVPCの作成が完了です。下図のような環境が作成されます。
![Screenshot from 2020-08-30 03-29-34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/2968b434-effd-cf8e-7fa9-8d3e02d0bfbd.png)

####③NATインスタンスの名前を設定する

(1)自動生成されたNATインスタンスに名前を付けます。
画面上部の「サービス」メニューから「EC2」を選択します。
![Screenshot from 2020-08-30 03-38-57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/caa70d02-a439-cf1c-b6bd-6046226efa61.png)
(2)左枠メニューから「インスタンス」を選択して下さい。以下のようなインスタンスの一覧が表示されます。
![Screenshot from 2020-08-30 03-42-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/a6e7dad3-d881-79e9-b0da-f2ae17f52b79.png)
(3)表示されているインスタンスはNATインスタンスです。名前が空欄となっているので、名前を設定します。「Name」列の空欄にカーソルを当て、表示される鉛筆マークをクリックして下さい。
![Screenshot from 2020-08-30 03-47-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/cfb72337-43e7-544d-669d-7cd5dacc14b2.png)
(4)以下ではインスタンス名に「踏み台」と設定しました。
![Screenshot from 2020-08-30 03-50-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/6dcdcd20-ce55-5f19-a4f3-2d86a06e99cd.png)

####④踏み台サーバにセキュリティグループを設定する

踏み台サーバ(NATインスタンス)にセキュリティグループを設定します。
ここで設定するルールとして、踏み台サーバにはSSHのみでアクセスできることとします。

(1)インスタンス一覧画面で踏み台サーバを選択し、下図のようにセキュリティグループ項目にある「default」をクリックして下さい。
![Screenshot from 2020-08-30 04-16-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/6ab8292d-20d1-21c8-7bc4-b1417447969d.png)
(2)セキュリティグループの内容が表示されますので、右下の「インバウンドルールを編集」をクリックして下さい。
![Screenshot from 2020-08-30 04-39-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/12b0bdae-bbbe-709c-bbc8-a513c243c21a.png)
(3)下図のようなインバウンドルールの編集画面が開きますので、インバウンドルールのタイプ列からプルダウンメニュー「SSH」を選択して下さい。SSHの情報が自動的に設定されます。
![Screenshot from 2020-08-30 04-48-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/b98cd2af-14d1-d991-40a0-8c37cefa36db.png)
(4)続いて、ソース列のプルダウンメニューから適切な項目を選択します
ここでは「任意の場所」としましたが、実行環境によって相応しいものを選択して下さい。
![Screenshot from 2020-08-30 04-52-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/592c83cd-fca0-ba8d-8880-0e3b1319a213.png)
(5)さらに右の項目「説明 - オプション」は任意に設定して下さい。
![Screenshot from 2020-08-30 04-58-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/81dfac8f-db92-f9a4-2148-fce73c8f28f2.png)
(6)「ルールを保存」ボタンをクリックすると設定が完了します。
![Screenshot from 2020-08-30 05-00-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/10b1d511-5541-81cb-5063-890c9e218356.png)

####⑤送信元/送信先チェックの無効化

踏み台サーバ(NATインスタンス)で送信元/送信先の変更チェックの設定を行います。

(1)インスタンス一覧画面で踏み台サーバ(NATインスタンス)を選択し以下の設定を行います。
　「アクション」→「ネットワーキング」→「送信元/送信先の変更チェック」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/c5ff5607-02b2-b26f-1f09-6e6db06ffdc7.png)
(2)設定を無効にします。下図では無効となっているため、このままとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/c498e07e-301d-54cc-fb4d-a9612b98bdd1.png)


####⑥プライベートサブネットにEC2インスタンスを作成する

踏み台サーバを経由して接続するターゲットのEC2インスタンスを作成します。
ここでは、EC2インスタンスにMATE Desktop環境を使用できるAmazon Linuxマシンイメージを選択しました。こちらは無料枠の対象となっています。
![Screenshot from 2020-08-30 11-13-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/5305c82e-2c03-08d4-221a-95247756758a.png)

作成するものは、下図の黄色で示したEC2インスタンスです。
![Screenshot from 2020-08-30 10-59-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/77c7a968-ac2b-dde6-5ac2-97d0b2e2769d.png)


(1)画面上部の「サービス」メニューから「EC2」を選択します。
![Screenshot from 2020-08-30 03-38-57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/caa70d02-a439-cf1c-b6bd-6046226efa61.png)
(2)左のメニュー項目「インスタンス」を選択し、右に表示される画面上部の「インスタンスの作成」をクリックします。
![Screenshot from 2020-08-30 11-04-45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/9ef74f53-9abf-eeac-7081-f061884b334c.png)
(3)作成するマシンイメージを選択します。
![Screenshot from 2020-08-30 11-19-57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/098f0414-3e95-0717-6776-de27fac4811d.png)
(4)インスタンスタイプを選択し、「次のステップ」をクリックします。
![Screenshot from 2020-08-30 11-22-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/1e45aac9-9e45-78d7-5259-1848eb18a6e9.png)
(5)詳細設定画面で以下の通り設定します。
**ネットワーク**
　作成した業務用VPCを選択します。
**サブネット**
　プライベートサブネットを選択します。
**自動割り当てパブリックIP**
　パブリックIPは不要なので無効を選択します。
![Screenshot from 2020-08-30 11-25-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/62e03ec4-d108-b7de-797a-8d7f8976fe48.png)
「次のステップ」をクリックします。

(6)ストレージの追加ではデフォルのままとします。
追加が必要な場合は、追加を行って下さい。
![Screenshot from 2020-08-30 11-30-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/e62917c8-acd9-0ece-d1f7-4df534c1d9d7.png)
「次のステップ」をクリックします。

(7)タグの追加画面では、デフォルのままとします。
設定が必要な場合は、設定を行って下さい。
「次のステップ」をクリックします。

(8)下図の通り、セキュリティグループの設定を行います。
・セキュリティグループの割り当てには「新しいセキュリティグループを作成する」を選択します。
・下部の一覧部分に必要な設定を追加します。今回は2つ設定しました。

　　(8-1) SSH接続を許可するための設定です。ソースとしてNATインスタンスのプライベートIPアドレスを指定します。
　　(8-2) VNC接続を許可するための設定です。同様に、ソースとしてNATインスタンスのプライベートIPアドレスを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/228173dc-0a1e-4b05-8db2-260f536083da.png)
設定後、「確認と作成」をクリックします。

(9)最後の確認画面で内容を確認し、良ければ「起動」をクリックします。
![Screenshot from 2020-08-30 18-51-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/5c5a5075-dc7a-e92a-6ea5-f2ff85f1caff.png)
(10)作成したキーペアを選択しチェックボックスにチェックを入れます。
その後「インスタンスの作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/ee1cdbd1-c950-8efd-8f8d-6e05903875e9.png)
(11)以上でインスタンスの作成は終了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/43c86eef-1517-2e5b-721d-16c43e93a6ad.png)
(12)必要であれば、作成したインスタンスに名前を付けて下さい。
今回は「プライベートインスタンス」と付けました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/b2463eaf-6521-5af7-2dbb-17977408728d.png)


## :desktop: 動作確認

実際に使用できるかどうかの動作確認を行います。

####①踏み台サーバにアクセスする

(1)TeraTermなどのSSHクライアントソフトで踏み台サーバにアクセスできることを確認します。以下が主な設定項目です。

　(1-1) **接続先ホスト名**：踏み台サーバ(NATインスタンス)のパブリックDNSまたはElastic IPを指定します。
　(1-2) **ユーザ名**：ec2-userを指定します(デフォルトユーザ)。
　(1-3) **認証鍵ファイル**：キーペア作成時に取得したpemファイルを指定します。

(2)無事接続できました。
内部IPアドレスが10.0.0.164なので、踏み台サーバであることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/2571e13a-bfbb-065b-696c-3702fe3bc7fe.png)


####②プライベートインスタンスに接続する

プライベートインスタンス(プライベートサブネット内に作成したEC2インスタンス)にログインします。

(1)ログイン方法としては、TeraTermのポート転送機能を使用します。
以下のように転送設定を行います。

ローカルPCへの22番ポートがEC2インスタンスの22番ポートに転送されるように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/f0c41e68-bd2e-cc60-42df-0698382be9b5.png)

(2)以下の内容でTeraTermを設定します。

　(2-1) **接続先ホスト名**：localhostを指定します。
　(2-2) **ユーザ名**：ec2-userを指定します(デフォルトユーザ)。
　(2-3) **認証鍵ファイル**：キーペア作成時に取得したpemファイルを指定します。

(3)無事接続できました。
内部IPアドレスが10.0.1.165なので、プライベートサブネットのEC2インスタンスであることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/6916a707-4e90-7826-2cca-a89dbaa4047b.png)

**以上で、インターネットから踏み台サーバを経由してプライベートインスタンスに接続する手順が完了となります。**


## :desktop: 補足事項
:loudspeaker: 今回はElastic IP(固定IP)を設定しませんでしたが、必要な場合は設定を行って下さい。
:loudspeaker: NATインスタンスを実行させると料金が発生します。不要な時間帯はインスタンスを停止するなどの運用を行って下さい。

## :desktop: 出典

■NATインスタンスの作成方法(アマゾン・データ・サービス・ジャパン株式会社)
https://www.slideshare.net/AmazonWebServicesJapan/nat-20120719


## :desktop: 関連情報

■AWS LambdaをAWS CLIで呼び出し、S3にファイルを格納する
https://qiita.com/ttlabo/items/edc1f08b51df1af25504

■AWS S3の始め方 ～ バケットにファイルを格納する
https://qiita.com/ttlabo/items/ea802f98418d229681fb

## :desktop: ご意見など

ご意見、間違い訂正などございましたらお寄せ下さい。