素人がおぼえながら作るawsのvpn環境①

# はじめに


本記事では、インフラ構成についてAWSで構築を行い、
VPNで特定のメンバーにのみ通信が可能なアプリケーションの作成を目指します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/9bbd8c13-e985-0ae1-fbd3-3a5373bf2aa1.png)

AWS公式からVPNクライアントツールをダウンロードし、所定の手順により作成したプロファイルを読み込むことで特定のメンバーだけが通信可能となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/a2165fb8-b3ae-c11d-bbdd-ab356bb7fdd8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/ca080082-f7a6-841c-a306-f3efc074bcb2.png)

VPNクライアントツールで接続し、再度URLを入力すると、アクセスが可能になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/5a35572e-49f1-f060-3210-2e3e9a7f7a0d.png)



# 本システムのインフラ構成について

【図1】
![図1_スクリーンショット 2024-06-23 163121.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/531f3251-fbb6-cab6-c444-67e78898e1a7.png)


各装置の機能・役割は以下の通りです。

【図2】
![図2_スクリーンショット 2024-06-23 164536.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/3af4577f-b0f1-a062-8e41-a9103083225b.png)




1. 【アプリサーバとデータベースサーバ】
　　本システムの中核となるサーバーです。
![図3_スクリーンショット 2024-06-23 164648.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/3a0fe7ac-3319-b055-7f38-8388329f9543.png)


2. 【ロードバランサー】
本来の機能は負荷分散で冗長構成ありきのものですが、
ドメイン設定と連携させることができ、本システムではURLによる名前解決を担います。

![図4_スクリーンショット 2024-06-23 164744.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/8c3410f1-4e34-dc00-fbfb-a6663f2e0cb5.png)


3.【VPNエンドポイント】
　特定のメンバーのみに通信を許可する仕組みです

![図5_スクリーンショット 2024-06-23 164858.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/e722f306-4dc9-4ab8-5dcb-7ead2b01c6cf.png)

## 目次
1.ネットワーク設計
[2.EC2構築と各種インストール](https://qiita.com/hatanaka0126/private/3f38eabc5c5f63e74651)
[3ドメイン周り設定](https://qiita.com/hatanaka0126/private/734f04208e11b8b9abba)
[4.セキュリティ設定](https://qiita.com/hatanaka0126/private/1df7300dd3c17ea3f230)
[5.コスト低減](https://qiita.com/hatanaka0126/private/a9546a06e28f43574249)
[6.参考文献](https://qiita.com/hatanaka0126/private/cd4edb575c1447d69fcf)




# 1.ネットワーク設計

## 1-1.VPC、サブネットグループの作成

まずは、VPC、サブネットグループの作成から始めていきます。

![図6_スクリーンショット 2024-06-23 175731.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/a6835467-a831-9aad-f40f-435c51bdac51.png)




1. VPC作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/bf15282a-8265-9a4a-818a-19ffb7840143.png)


2.サブネット"VPN-EFI-1c"作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/e15f973b-fe25-8a6b-267a-fdea1fafa67d.png)

3.サブネット"App-Public-1c"作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/90695155-43c1-eab4-a384-582edb33d7bb.png)

## 1-2.インターネットゲートウェイ作成

![図7_スクリーンショット 2024-06-23 181757.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/9a3dae64-e62c-465d-c0e3-9dfa14e3182b.png)


ネットワークをVPN化するまえに、インターネットを介して各種インストールが必要なものがあるため、一時的にインターネットゲートウェイを作成する。

1.インターネットゲートウェイ作成
![スクリーンショット 2024-04-28 192651.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/2d8b23f4-3d95-4396-ce06-14e9631283cf.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/8c6c9698-e6bd-fed8-142e-ff43c979c0bd.png)

2.作成したインターネットゲートウェイをVPCにアタッチ
![スクリーンショット 2024-04-28 193141.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/77eaa2a8-2d30-495a-27fb-de586498459b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/8a057c26-d526-696c-e5f7-efbd1cc7c932.png)


VPCの中にサブネットを作成しただけでは、例えて言うなら、ネットワーク内にVLANがただ点在しているのみで、通信は成立しません。
VPC内で異なるネットワーク同士を束ねるスイッチないしルータの役割を果たすのが、ルートテーブルという機能です。
このルートテーブルにサブネットを関連付け、インターネットゲートウェイへのルートを登録することで、VPC内のEC2へインターネットを介して各種インストールが可能になります。

![図8_スクリーンショット 2024-06-23 191043.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/24e4afce-4085-18c8-06b2-acb6b9e1d144.png)


3.ルートテーブル設定
①対象のVPCのルートテーブルにチェックし、「サブネットの関連付けを編集」を押下
![スクリーンショット 2024-04-28 193708.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/2420079e-0034-5d83-d51d-1e481a8e64d1.png)
すべてのサブネットを関連付けます。

![図14_スクリーンショット 2024-06-24 212318.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/fb6f34d0-cc87-ce49-e1ba-8efd19940777.png)

②ルートテーブル一覧に戻り、「ルートを編集」を押下
![スクリーンショット 2024-04-28 194717.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/5bb3f078-b510-1784-b906-d1e8672738c9.png)
インターネットゲートウェイを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/831fa44c-52fa-a8bf-6575-ca776c3b0cda.png)


## 1-3.セキュリティグループ作成

セキュリティグループは、一般的にはACL(アクセスコントロールリスト)の機能を担うとされています。
本システムでは、このセキュリティグループで最終的にはアプリサーバを交点として十字方向に通信を制御する設計になります。

縦方向は、システム運用管理者用の通信経路になります。

![図10_スクリーンショット 2024-06-23 224516.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/6597a527-a0d0-2eaa-2bfd-8e71fc75c945.png)

①上側(赤枠内)は、S3からの資材(主に編集を加えたコードを想定)をアプリサーバに供給する経路です。

②下側(黒枠内)は、SSHの通信をユーザ向け経路と分けるシステム(SessionManager)で、セキュリティーグループとは別にEC2にIAMロールを適宜設定（後述）し、システム運用者用に安全な経路を確保します。


横方向はユーザ向け通信とし、ロードバランサー、アプリサーバ、DBサーバの順をたどるよう通信を制御します。

![図11_スクリーンショット 2024-06-23 223350.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/a744a4bd-0b40-ef2c-850a-dc1620aeb795.png)


ともあれ、上記セキュリティ設計の実装は後述の各種インストールが完了してからとなります。現段階では"ハコのみ"作成します。

1.セキュリティーグループ"WEB-SG","APP-SG","DB-SG"作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/c2aca65b-a776-fc99-5a08-4c5fe3e73861.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/c33c2813-4481-cc69-78bd-9f74fc68e9ef.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/1965b0d4-e28a-bbef-7587-ae636abdf7e3.png)

2.現段階ではインバウンドルール、アウトバウンドルールすべて
　・タイプ-「すべてのトラフィック」
　・ソース,送信先-「0.0.0.0/0」
に設定しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/9e0f95f0-beff-42c1-dc53-be884a119ed9.png)

## 1-4.RDS構築

ここから、サーバの作成と設置を行います。
最初にDBサーバから、作成していきます。

![図13_スクリーンショット 2024-06-23 231740.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/8051de0b-6793-8d11-f109-8bfb0e5970b9.png)


作成方法は「標準作成」、エンジンオプションは「MySQL」を選択、
テンプレートは「無料利用枠」を使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/c8821fa2-37a4-8568-a746-ed47e53bbc12.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/e279faa8-4af9-bc5d-5c66-77ba870b5e26.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/56a69cb1-d1d4-9cfa-32bb-8caae93b81a6.png)

マスターパスワードを設定し、セキュリティグループに「DB-SG」を指定、
アベイラビリティゾーンに「ap-northeast-1c」を指定します。
その他の設定値はデフォルト値から変更しません。

![スクリーンショット 2024-04-28 202456.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/cae6c637-d629-0d6e-d166-1759cf2163a6.png)

![スクリーンショット 2024-04-28 202637.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/e87d4d67-bacb-9819-b516-45a9783456de.png)

## 1-5.アラート発報の実装
RDSの容量が少なくなるとメールで通知が来るよう、設定をします。
①Amazon-SNS設定
 Amazon-SNS設定画面にて、トピックの作成をします。
![スクリーンショット 2024-05-05 174629.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/ab818dfc-a0ac-eee8-2140-089437a84dba.png)
「スタンダード」を選択し、名前を入力します。
![スクリーンショット 2024-05-05 174718.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/63fe8714-5bd6-6224-c10b-e2075e25cc94.png)
「トピックの作成」を押下し、遷移後の画面で「サブスクリプションの作成」を押下します。

![a3978900-0199-0891-420c-2c8bc7cd2d4e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/af4a2b9b-c229-4a65-0b5d-07ee3011a398.png)


「プロトコル」で「Eメール」を選択し、エンドポイントに通知を受け取るEメールアドレスを入力します。

![417aeb9a-a842-93e0-3d4c-80ed481fe6e9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/619a9ae9-bbdc-fe9d-c8c7-a79e13d92473.png)


サブスクリプション作成直後はステータスが「保留中の確認」になっています。登録したEメールに確認のメールが来ていますので、メール文面の「Confirm subscription 」を押下します。

![9c8ecac1-c3e2-4380-5329-1337ed3e15fc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/73b6f290-426b-d4be-7d74-0c9d8b472a80.png)

![69fe226d-ac96-a58a-7108-4724fd727882.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/281b888e-e08d-46f5-c2f6-489a839eb966.png)


リンク先の画面で「Subscription confirmed!」のメッセージが表示され、登録が完了します。

![d9f44f44-61ad-313a-6f45-bbb9281ba46a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/0ebef228-cf72-5472-e20e-4e310682498c.png)


![47a5a1a7-aab6-8d43-d548-f83005307802.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/273594e6-0a25-92ee-bfd7-30a66f3a9780.png)


②アラームの作成
　Cloudwatchの設定画面からアラームの設定を行います。
　アラームの項目から「アラームの作成」を押下します。
 ![スクリーンショット 2024-05-05 175141.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/25a3fb77-d66d-7b64-d275-84fffe179cee.png)
　「メトリクスの選択」を押下します。
 ![スクリーンショット 2024-05-05 175211.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/b19cdd7b-11ba-0440-8e10-0b098a8cdf03.png)
　「RDS」>「DBInstanceIdentifier」の順に選択します。
 ![スクリーンショット 2024-05-05 175249.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/d9a26702-0637-9f5e-20f0-ba10ab28beae.png)
![スクリーンショット 2024-05-05 175315.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/0d76ce8f-5482-7b7b-2997-060257a714bf.png)
　対象RDSの「FreeStorageSpace」を選択し、チェックを入れます。
 ![スクリーンショット 2024-05-05 175425.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/b52457aa-9456-ea25-d458-9547cc94f87c.png)
　次に、しきい値の設定をします。RDSの無料利用枠は20Gですが、空き容量が3G以下になったとき、アラームが通知されるよう設定します。
　設定値の入力単位は、メガバイトでもキロバイトでもなく、バイトになります。0の数に注意してください。
 ![スクリーンショット 2024-05-05 175537.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/a3d3bcfb-6b28-0643-253f-d3813b49f4e8.png)
 　「次へ」を押下し、設定したしきい値を下回ったときの挙動を設定します。
  ![スクリーンショット 2024-05-05 175620.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/7b59bd1b-2a71-1d54-bfc7-02741793847c.png)

　「アラーム状態トリガー」が「アラーム状態」、「次のSNSトピックに通知を送信」が「既存のSNSトピックを選択」になっていることを確認してください。
 　「通知の送信先」に先ほど作成したSNSトピックを選択します。

 ![スクリーンショット 2024-05-05 175728.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/6681f752-aec6-2f6e-06c2-c5701e019299.png)
![スクリーンショット 2024-05-05 175815.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691304/f70e431e-ceca-7e79-ca53-f1a695e3a0dd.png)

　最後に「アラーム名」を入力し、これまでの設定内容を確認して、作成完了です。

 次節では、EC2の構築と各種インストールをしていきます。


https://qiita.com/hatanaka0126/private/3f38eabc5c5f63e74651