冗長構成時のセキュリティ・ネットワークの設定箇所見直し

#この記事の目的
AWSで冗長構成するときに、見落とされてしまいがちなセキュリティー、ネットワーク周りの設定。冗長化の設定方法は、多くの記事で書かれているので、そちらの記事を見ていただくとして、本記事は、私自身がネットワーク関連の設定をしていて、躓いてしまったところ、躓きやすいところをシェアしていきたいと思います。
今回は、下記構成図の通り、環境を構築したと仮定して、構成図に沿って設定されているかどうか見ていきたいと思います。

#構成図
![構成図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/89d6fa4d-596a-8a54-504d-2456516e62d7.jpeg)

今回、パブリックサブネットにあるインスタンスには、WordPressをインストールしてあります。

#VPC関連
![VPCとサブネット.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/ffe8bdd2-88b4-97ba-2f31-23170dca051e.jpeg)

VPCとは、AWSクラウド内で**論理的に**分離したセクションのことです。
VPCは、主に以下のもので構成されています。
・サブネット
・インターネットゲートウェイ
・NATゲートウェイ
・VPCエンドポイント

この時点で上記構成図において、VPC、サブネット、インターネットゲートウェイが適切に設定されているか見ないといけません。

##VPC
まず、VPCから見ていきます。
![スクリーンショット 2021-12-14 22.12.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/3b1146e9-2eaf-c786-fa05-fa3c0d71ab94.png)
Ipv4 CIDER：10.0.0.0/21
VPC設計時のポイントとしては、広い範囲でアドレス範囲を設定することになります。そうすることによって、運用上、IPアドレスが枯渇してきたり、新たに別のサブネットを追加したい場合などに、VPC内に設置するサブネットの追加で対応することができるようになります。

##インターネットゲートウェイ
次に、インターネットゲートウェイ。インターネットゲートウェイは、VPCにアタッチされているか確認します。
![スクリーンショット 2021-12-14 22.33.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/75bbe836-39e0-b8ba-f23e-9d6891425a61.png)

##サブネット
そして、サブネット。サブネットは、VPC内に設置していきます。サブネット設置の際に、AZ（アベイラビリティーゾーン）という物理的な区分に設置していきます。冗長構成時においては、サブネットの機能ごと（パブリックサブネット、プライベートサブネット）に各AZ（　1a,1c）に配置していきます。ですので、サブネットは、AZをまたがって設置することはできません。

![スクリーンショット 2021-12-14 22.58.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/c7dd013f-8471-b282-8581-f7827f36dcbc.png)
publicsubnet1は、この構成図の左上の区画です。10.0.0.0/24のIP範囲で　　アベイラビリティーゾーンは、ap-northeast1a、今回設定したmyvpc内に配置されていることが確認できます。
残りの３つのサブネットも同様に適切に設定されているか見ていきます。

###サブネットグループ
![サブネットグループ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/e95640c4-f8c7-2547-2b8d-88e6573a7c28.jpeg)
RDSをマルチAZ構成にする際に、異なるAZにあるサブネットをグルーピングしてあげる必要があります。
![スクリーンショット 2021-12-17 22.32.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/73b7f6eb-b6b8-710d-cd8a-55f9809566c1.png)


アベイラビリティーゾーン1aに10.0.2.0/24のサブネットとアベイラビリティーゾーン1cに10.0.3.0/24のサブネットがあることが確認できます。

##ルートテーブル
ルートテーブルとは、サブネットやゲートウェイなどのルーティングを制御する仕組みのことです。サブネットの主な種類として、パブリックサブネット、プライベートサブネットがありますが、その区分けをこのルートテーブルで設定していきます。
まず、パブリックサブネット１（構成図の左上）のルートテーブルを見ていきます。ルートテーブルは、サブネットに関連づけられているので、該当のサブネットを選択した状態で「ルートテーブル」のタブを開きます。
![スクリーンショット 2021-12-16 22.23.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/4ba6b017-e599-4499-b5a2-8d08ce4670c6.png)
下にスクロール
![スクリーンショット 2021-12-16 22.25.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/651213cd-b746-d186-9083-c3c5cc35dce2.png)
送信先10.0.0.0/21、ターゲットlocalは、VPC内での通信を有効にするローカルルートでデフォルトで設定されています。
その下の送信先0.0.0.0/0、ターゲットigw-011834908143ba405は、全てのIPアドレスは、サブネットからインターネットゲートウェイへ通過することを意味しています。
では、プライベートサブネットの場合はどうでしょうか？
構成図の右上のプライベートサブネットを見ていきます。![スクリーンショット 2021-12-16 22.47.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/976fbc99-bb7b-fc75-abf9-1b261dbcbd2e.png)
送信先10.0.0.0/21、ターゲットlocalとなっていることが確認できます。この設定**のみ**がされているということは、VPC内の通信（10.0.0.0/21）は、localに向けられている、つまり、このサブネットからの通信と外部インターネットからの通信はできない、プライベートな空間となっています。なので、プライベートサブネットなのです＾＾：

##ELB
今回は、ALBを使用します。ELBは、複数のAZにトラフィックを流して負荷分散することと、ヘルスチェックする機能を持っています。
![スクリーンショット 2021-12-18 10.01.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/0f3cc2ad-f740-1ad5-1b2e-4cdb6960a625.png)
今回作成されたVPCにアタッチされていること、アベイラビリティーゾーンは1a,1cに設定されていることを確認します。下にスクロールして
![スクリーンショット 2021-12-18 10.04.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/f20ed6ac-1b72-ea96-349a-a240dedfd7e9.png)
ELBにアタッチされているセキュリティーグループを確認します。リンクをクリックして
![スクリーンショット 2021-12-18 10.11.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/aae3f87b-964e-57d2-4314-4837652ce9f8.png)
タイプ、プロトコル、ポート範囲、ソースを確認します。
次にターゲットグループを確認していきます。
左メニュー「ターゲットグループ」→作成されたターゲットグループ名を選択して「Targets」タブを選択![スクリーンショット 2021-12-18 10.20.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/eda59296-e296-0648-b862-923ee02c123e.png)
アベイラビリティーゾーン　1aにあるインスタンスとアベイラビリティーゾーン1cにあるインスタンスのステータスが「healthy」であることを確認します。


##セキュリティーグループ
![セキュリティーグループ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/82e3ff74-b73d-9d3f-e195-b96e72b5b397.jpeg)

セキュリティーグループは、IPアドレス単位で稼働するファイアウォールです。
###パブリックサブネット内のセキュリティーグループ
まず、パブリックサブネット１（２）を見ていきます。構成図の左上の区画にあるセキュリティーグループです。

EC2インスタンス→左メニューインスタンス→該当のインスタンスを選択。
![スクリーンショット 2021-12-18 11.15.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/3196c5a9-37c4-fcf3-5657-cf199dc44f99.png)
「Web-SG-1」という名前のセキュリティグループが「WebServer1」というインスタンスにアタッチされていて、そのセキュリティーグループのインバウンドルールが２つ設定されています。
２つ目の22番ポートはSSH接続用です。１つ目の80番ポートはHTTP接続ですが、ソースが何なのかここでは読み取れないので、セキュリティーグループのリンク先に飛びます。
![スクリーンショット 2021-12-18 13.55.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/8230c230-ba9b-3c5d-5ae5-9a2809119e4a.png)
ソースが「LB-SG-1」ということが確認できます。では、「LB-SG-1」はどんな設定になっているか確認してみましょう。

VPCサービス→左メニューセキュリティーグループ→「LB-SG-1」を選択
![スクリーンショット 2021-12-18 14.04.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/c802e971-edf4-6b99-9f56-746c27670d15.png)
全てのIPアドレスを受け入れるという設定になっていますね。

##プライベートサブネット内のセキュリティーグループ
今回の構成では、プライベートサブネット内にはRDSを設置していますので、RDSへアタッチされているセキュリティーグループをみていきます。
RDS→左メニュー「データベース」→該当のRDSを選択して、「接続とセキュリティ」タブを開きます。
![スクリーンショット 2021-12-18 14.15.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/897b2ce6-b5d8-e358-6307-bdaffeb04963.png)
「RDS -SG-1」というセキュリティーグループのリンクへ飛びます。
![スクリーンショット 2021-12-18 14.27.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/ebd3aafe-e7b2-09f4-bb09-3ea8b127efcf.png)
タイプ：MYSQL／Aurora ポート範囲：３３０６、ソース：Web-SG-1となっています。MYSQLのポート番号は、デフォルトで３３０６です。
「Web-SG-1」は、「LB-SG-1」からのトラフィックを受け入れを許可するという設定になっていましたね。その「LB-SG-1」は、全てのIPアドレスを受け入れるという設定となっていました。

###RDSに設定されているsiteurlの確認
![RDSの通信.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/c1402c74-fa68-17d1-f2c5-7ef8ce35be9a.jpeg)
今回、パブリックサブネット内のインスタンスにはWordPressをインストールしていますので、MYSQLにログインして、データベースのsiteurlがELBのDNS名かどうか確認していきます。デフォルト設定でsiteurlがパブリックIPアドレスになっていた場合、インスタンスが停止or休止から再起動したときに、新しいパブリックIPアドレスが割り当てられることとなり、アクセスすることができません。今回の冗長構成では、ELBを配置していますので、ELBのDNS名をMYSQLのsiteurlに使います。構成図では、赤色の線ですね。

まず、パブリックサブネット内のインスタンスにログインします。
MACの方は、ターミナルから

```
ssh -i キーペア名　ec2-user@インスタンスIPアドレス
```
次に、MYSQLへログインします。

```
mysql -h RDSのエンドポイント -u ユーザー名 -p

```


次にテーブル名を指定します。

```
USE テーブル名
```

siteurlの確認です。

```
SELECT * FROM wp_options WHERE option_name IN ('siteurl', 'home');
```

![スクリーンショット 2021-12-19 11.57.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/a2297574-2a53-374c-5a0b-bbd5bcf9f34a.png)

赤線の部分がELBのDNS名になっていることが確認できれば、これで一通り終了です。
もし、ELBのDNS名ではない場合は、下記のコマンドで変更できます。

```
UPDATE wp_options SET option_value = 'http://DNS名' WHERE option_name IN ('siteurl', 'home');
```

___
この記事はAWS初学者を導く体系的な動画学習サービス
「CloudTech」の課題カリキュラムで作成しました。
https://kws-cloud-tech.com
___