Amazon Web Services基礎からのネットワーク＆サーバー構築 プライベートサブネット・NAT構築

:::note
<a href="https://amzn.asia/d/3qYbC8Z">Amazon Web Services基礎からのネットワーク＆サーバー構築</a> を実施した際の備忘録です。
:::

※前回はこちら

https://qiita.com/hoge889/items/bf0240dab0746dc999f6

## 今回の目標

DB用サーバのEC2をプライベートサブネットに配置し、外部インターネットから隔離します。

ただ外部インターネットと完全に遮断すると、DB用サーバのソフトウェアアップデート・インストールが不便なため、NATを構築して プライベートサブネット＞ 外部インターネット への通信のみ許可します。

## プライベートサブネットを構築する

まずはオレンジ枠の箇所を構築します。
※MariaDBのインストールは次回実施します。

![Amazon Web Services基礎からのネットワーク＆サーバー構築.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/cf3bf657-4fe2-a6d9-0649-4c0a46ef14f7.png)

まずプライベートサブネットを作成します。
VPC ID では、事前に作成したVPCを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/31a6d213-e701-9c55-9873-b10a07b07f8a.png)

サブネットの設定におけるアベイラビリティーゾーンは、パブリックサブネットが存在するゾーンを選択します。
またサブネットのCIDRブロックは 10.0.2.0/24 とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/4db2de35-0d39-e1ec-79ef-7d3d0f2f9119.png)

ルートテーブルを確認すると、プライベートサブネットはデフォルトのルートテーブルが設定されてます。
今回のプライベートサブネットは外部インターネットに接続しないため、このままでOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/cfd6f469-7268-700c-c93c-19114f0b35bd.png)

## DB用サーバを構築する

次にDB用サーバとするEC2インスタンスを作成します。
名前は『HogeDBServer』とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/1c60a15c-4507-a415-b9a8-fb00aec2f553.png)

:::note warn
AWSの1年間の無料利用枠で利用できるLinuxサーバは1台分のみです。
2台目のEC2インスタンスは課金の対象になるため注意してください。
:::

基本的な箇所は以下記事で設定した内容と同じです。本記事では相違点のみ記載します。

https://qiita.com/hoge889/items/42674fc7beee50e30db6

サブネットは先ほど作成したプライベートサブネットを選択し、パブリックIPの自動割り当てを無効化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/793f256a-3613-2f0e-89b1-f3d5bee6544c.png)

新たにセキュリティグループを作成し、MariaDB の通信ポート『3306』のみ許可する設定を追加してください。
※後ほど NAT を構築した際にアクセスするため、ソースタイプは任意の場所とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/dfaedf5f-2d2c-605f-4016-35c4b7074c42.png)

またIPアドレスは『10.0.2.10』とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/445fa8a1-0577-86b9-e6cd-57005751d02c.png)

相違点は以上です。
EC2インスタンス起動完了後はPingコマンドで疎通確認をします。

DB用サーバのセキュリティグループに、ICMPプロトコルを許可する設定を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/6b3fc5b6-da03-b55a-cd47-6b55ae082312.png)

その後セッションマネージャーからWebサーバ用のEC2インスタンスに接続し、下記pingコマンドを実行します。

    $ ping 10.0.2.10

疎通していれば画像のように返答が戻ってきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/1d2edca3-b120-fd8b-a0a2-881c8dd5d4f0.png)

## DB用サーバにSSHポートフォワードを使用してログインする

今回はSSHポートフォワードを用いて、DB用サーバに接続します。
Rloginで新規接続設定を行います。



まず踏み台サーバ ＞ プロトコルから、ポートフォワードを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/3305c0f2-4cab-c5f9-5ecd-25a7e6fa9ec6.png)

新規設定として以下の内容を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/d998f615-872d-cd81-4e6d-7f9147bc4cd9.png)

次にDB用サーバの設定を行います。
ポイントは前接続先に踏み台サーバを指定する必要があることです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/1f7fdbc1-0be6-5f6a-427e-2080529fa314.png)

その後プロキシ設定を行います。
Select Proxy Protocol で『SOCK5』を選択し、Proxy Server Address と Socket Port には踏み台サーバのポートフォワード設定と同じ内容を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/bf34c093-dde7-b35c-800e-fa2208fb7ee4.png)

ただこの時点ではDB用サーバがSSHプロトコルを許可していなかったため、接続できませんでした…
DB用サーバに以下のセキュリティグループを追加し対応しました。
※ソースには踏み台サーバのセキュリティグループを指定してます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/64a76290-0c07-38f2-74b8-e35d53897622.png)

こうして無事接続することができました。ただこのままではソフトウェアインストール・アップデートができないため、NATを構築します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/e75c6692-2143-38b5-48bb-b092fd4b3dd9.png)

## NATを構築する

NATを介することで、外部インターネットからプライベートサブネット内のDB用サーバへの送受信を拒みつつ、DB用サーバから外部ネットワークへ送受信のみ許可することができます。

![Amazon Web Services基礎からのネットワーク＆サーバー構築.drawio (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/e20b6304-6c08-ab58-8459-f6a76c307183.png)

今回はNATゲートウェイを使って構築します。
NATゲートウェイを作成時にはパブリックサブネットを選択し、ElasticIPを割り当てます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/f8b3282a-3db7-1b89-1ac3-105e8dadc407.png)

次にルートテーブルを編集します。
メインルートテーブルを選択し、『ルートの編集』を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/86dc2031-8a8f-c490-61ed-53d601767036.png)

NATゲートウェイへ送信先『0.0.0.0/0』のルートテーブルを追加し、保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/a37c0736-af10-729c-3f20-9bda4ccc0ba0.png)

## NATゲートウェイの疎通を確認する

crulコマンドをDB用サーバで実行し、HTMLが表示されるか確認します。
※URLはQiitaです。

    $ curl https://qiita.com

実行してHTMLが表示されれば、OKです。
お疲れさまでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/0cc01c41-6a7c-1a00-8bc1-fab74881640f.png)

ここまで <a href="https://amzn.asia/d/3qYbC8Z">Amazon Web Services基礎からのネットワーク＆サーバー構築</a> の内容を実践してきました。今まで学んできた内容の復習に丁度良い教材でした。本書では次回チャプターでDBを用いたブログシステムの構築を行っているので、興味のある方はぜひご購入ください。

## 参考文献

<a href="https://amzn.asia/d/3qYbC8Z">Amazon Web Services基礎からのネットワーク＆サーバー構築</a>