【インフラ歴10年】AWS歴6年のベテランエンジニアにレビューされてみた

お疲れさまです。今月でAWSの実務に携わり6ヶ月が経ちます。一度だけ設計・構築のタスクに携わったこともあり、復習も兼ねてマルチAZ構成のインフラを作ってみました。

詳細はこちら↓

https://qiita.com/mmurm/items/dc60c9430c675f901273


コンソール画面の一つひとつの設定項目を調べながらも意味を理解しながら構築してみたつもりですが、
経験を積んでいるエンジニアの方からするとこれは正しい設定なのか？自分は間違った設定をしているのではないか？と不安になりました。

そこでエンジニア経験も豊富かつAWSに特化しているベテランエンジニアの方にレビューをお願いしてみました。

終わった後にレビューしてもらった内容をまとめてみました。質問した回答も備忘として残しておきたいと思います。

※今回の記事、いろんなご意見をいただきました。「〇〇の設定がない」「NATゲートウェイも必要では？」経験者が見ればご指摘する点がいくつもあると思います。
レビューをしていただいた方が私の知識や料金面を考慮して簡単な構成から始めた方がいいと助言をいただいて作成しています。あくまで個人の自己研鑽の記録として作成していますのでその点、ご理解のほどお願いします。


# マルチAZの構成について![スクリーンショット 2022-10-02 8.42.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1828177/9a9a63df-0e4f-7f37-78e4-0143d292f4b0.png)

まず私が作成した構成はこちら。インターネットゲートウェイからALBに、踏み台となるサーバーを使用、そして二つのAZのプライベートサブネットにインスタンスに設置しました。

### 構成のレビュー
→ALBを設置するなら踏み台サーバーはいりません。踏み台の存在意義はPCから踏み台、踏み台からプライベートのEC2に入るために使われます。

またマルチAZ構成にするのも良いが三つのAZ構成の方が良いです。AZはデータセンターなのでひとつのAZで障害が起きたらもう一つのインスタンスに負荷が集中してしまうためです。最悪のことを考えるなら三つの構成にした方が良いです。

三つのAZ構成にするのは、ALBやRDSのデータベースサブネットも同じです。


# ネットワークの設定について

### セキュリティグループのエフェメラルポートについて

![スクリーンショット 2022-10-08 20.40.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1828177/a5d3e091-a958-eacd-e3fc-78aca3c972e9.png)


カスタムTCPで1024~65535と設定していました。教材に書いてあることをろくに考えずに設定していましたが、これはとんでもない間違いです。

→1024~65535のポート範囲設定は、少々乱暴な設定です。最小権限の原則に基づいていません。

何番ポートを使うのかはソフトウェアで決まっています。もしWindowsのサーバーに入りたいならプロトコルはRDP、ポート番号は3389で接続しておきます。LinuxならプロトコルはSSH、22番ポートになります。


（キャプチャにはありませんが）ソースタイプが「任意の場所」になっているとフルオープン、世界中のどこからでも入れてしまいます。。もしPCだけでログインしたいなら「カスタムTCP」に設定して自宅のWi-FiのGIPを設定する必要があります。

基本的には「任意の設定」にはしません。夜寝る時に玄関も窓も開けて寝るのと同じくらい危険です。なので必要なポート番号だけ開けるべきです。

# EC2の設定関連
インスタンスのキーペアについて
→キーペアは二つあります。RSA、ED25519とありますがED25519の方が暗号強度が強いです。ちなみにTeratermの場合は.pemを使用し(Linux)ppkを使用する場合は、WinScp、PuTTYで使用します。(Windows)

※その他、文字の表記
COU→CPU
amd→AMD
Arm→ARM

### パブリックサブネットに設置しているEC2のパブリックIPについて
→EC2を直接公開しない場合、またはALB、クラウドフロントなどを経由させる場合はEC2のパブリックIPアドレスを自動割り当てにします。（EC2を起動するたびにAWSを自動的に割り当てます。）

もしEC2に直接公開する場合はEIPをEC2に割り当てます。

### EC2のルートテーブルについて

![スクリーンショット 2022-10-08 20.41.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1828177/46e24e11-ca4d-7134-7f58-91ee0a60389c.png)

これはプライベートサブネットのルートテーブルです。ルートテーブルには他のEC2にルーティングができるように他EC2のアドレスを設定していました。

→送信先でVPCを選択していれば、送信先のIPアドレスがVPC内に含まれているのでEC2が所属しているEC2のIPアドレスを設定しなくてもいいです。

またプライベートサブネットのルートテーブルにはインターネットゲートウェイのルートはいりません。設定するならパブリックサブネットのルートテーブルに設定します。なので下３つのルートは不要となります。（インターネットゲートウェイ、２つのEC2のアドレス）


# 暗号化/復号の「復号」の意味がよくわかっていない・・
→復号は、鍵を使用して暗号を解読すると言う意味で使われます。解読して平文に戻す作業なので、その作業のことを「復号」といいます。復号は「化」は使いません。（本質的には平文化です）

# S3とRDSで扱われるデータの違いがよくわかっていないけど、これって何ですか？
RDSはリレーショナルDBサービスのこと。（MySQL、ポスグレなど）データベースが必要な時に使われます。

S3はファイルの置き場所のようなものになります。グーグルのドライブ、マイクロソフトで言うところのワンドライブ、Dropboxと同じようなファイルを共有する役割を果たします。

ちなみにAWSでRDSの性能を引き出すのならオーロラを選択しましょう。

# ACMの役割って具体的になに？
よく使われるのはサーバーの証明書として使われます。証明書を認証局で無料で発行することができます。

人間で言うところの免許証、本人確認書類となるんですね。怪しいサイトなのか、本物のサイトなのかを見極めるためにサーバー側が見せているんです。

例：cloudinfraのドメインは偽物じゃないです。本物ですという証明書となります。

httpsはリクエストとリクエストの中身を暗号化する時に証明書が使われます。怪しいサイトの場合はアドレスバーが真っ赤になるのでACMをつけたALBが身分証明書を出しているのと同じ役割をします。

### ドメイン、サブドメインの登録について
ACMに登録するのは大元のドメインを登録します。ついでに「*.〇〇.com」も登録しましょう。*は全てのサブドメインを意味するので大元のドメインを登録する時についでに登録しておくと良いです。

# ALBの設定について
こちらもRDSのサブネットグループ同様、３つのAZ構成にした方が良いです。またターゲットグループで使用するポートは内部の通信となるため基本的にはhttpプロトコル80番ポートを使用します。

一般的にはターゲットグループでhttpsプロトコル443番ポートは使用しません。（インターネットゲートウェイからALBはhttpsが安全である。）

### ALBを使用する時と踏み台を使う時の違いは？
踏み台の存在意義はPCから踏み台、踏み台からプライベートのEC2に入るために使われます。ALBを使用する場合は踏み台はいりません。

踏み台を利用するときは22番ポートを使用しALBを使用する場合は、ALBは80番か443番を使用するのでそもそも使用用途が違います。

ALBは負荷を分散させるために分岐点のために使用します。クライアントからリクエストをされるとALB設定時に選択したAZのサブネットが宛先となります。

またALBのアイコンを構成図に配置するときは最低でも２つのAZを選択するので、２つのAZに2つのアイコンを配置するように。


### ALBのリダイレクトを設定するとhttpsでリダイレクトされるなら最初からhttpsに設定しておいたほうが良いのか？

ALBの設定で最初からHTTPSでリスナーを設定しても良いです。しかしユーザーがhttpsを使用して検索してくれたら良いけど、ほとんどのユーザーはそんなことしないし、httpを使用して検索をしてもエラー画面になります。

大抵の場合はリンクやお気に入りで検索すればhttpsでリクエストされるので特に問題にありません。しかしアドレスバーに直接ドメインを打つとデフォルトでhttpで検索されてしまいます。だからALBにはポートはhttpを使用しリダイレクト設定でhttpsで再度リクエストをされるように設定しておくと良いです。

# Route53のホストゾーンの作成について

![スクリーンショット 2022-10-09 0.18.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1828177/c58e5430-5c22-fa1c-9810-93ebab21858b.png)

Route53についてドメインやホストゾーンについての以下のように考えていました。

**・ドメイン＝社名**
**・ドメインの提供元＝法人登記する法務局**
**・ネームサーバー＝電話番号**
**・ホストゾーン＝電話番号を発行してくれる企業、NTTとか**

→これはちょっと違います。
ホストゾーンが電話帳とか住所録のようなもの。ネームサーバーがホストゾーンを管理しているもの。NTTなどの電話帳、住所録の管理者となります。

NSタイプのレコードのドメインが社名になり、この社名の電話帳を管理しているのが4つのネームーサーバーだと考えてください。
サブドメインを設定しているレコードは（Aタイプのレコードのドメイン）が大阪支社とか、支店、事業所になります。そして会社全体の電話番号を管理しているのが4つのネームサーバーになります。

＜私なりの解釈＞
法人登記する法務局（ドメインの提供元）で社名（ドメイン）を申請しネームサーバー（電話帳の管理者）を作成し電話帳の管理者は法務局（ドメインの提供元）で連携しないといけないので登録する必要がある。

これができてホストゾーン（電話帳）にあるAレコードを使用してそれぞれにIPアドレスなどを振り分けることができる。それぞれの支社に電話番号を割り当てるイメージとなる。

# ありがとうございました！
書籍や教材だけだとやはり知った気になっているんですよね。。しかし今回構築してみてレビューを受けてみてかなりのことに気づけました。

初歩的なこと、各サービスの役割をあやふやに覚えていたこと、コンソール画面で１つひとつの項目でどんな設定がされるのか←これが一番大きかったですね。日々精進あるのみです！

今回レビューにご協力いただいたエンジニアさん、かなりわかりやすく教えてくれました。ありがとうございました！！


またこんな記事も書いています！ぜひ読んでみてください！

# 関連記事
https://qiita.com/mmurm/items/dc60c9430c675f901273

https://qiita.com/mmurm/items/de7b641e376685fad71e

https://qiita.com/mmurm/items/2437bf57ed4516f80dfa

# 参考サイト
https://kei-sakaki.jp/2013/08/09/encryption-and-decryption/