AWS VPCネットワーク-パブリック・プライベート構成

「AWS VPCネットワーク-パブリック-プライベート構成 」

# はじめに
色々作っても、現場で見れないとちょっと困る時があるので書いていくことに
今回は、パブリック-プライベート構成


## 目的
VPC-EC2インスタンスのパプリック-プライベート構成をマルチAZで構築してネットワークを理解する

## やること・やらないこと
  - やること  
    VPC-EC2インスタンスのパプリック-プライベート構成の作成とネットワーク周りの設定  

    構成要件  
    - インターネットからEC2への直接アクセスができないこと
    - ルートテーブル、セキュリティグループの設定値と通信の流れを図にする

  - やらないこと  
    コンソール操作の手順の記載（UIがコロコロ変わるため）  
    VPC、ルートテーブル、セキュリティグループ以外の各サービスの解説や設定（ALBとは、EC2とは、VPCとは）とか  
    EC2接続のSGなどの設定


# 構成図
![no2_private-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3994667/62e3bfc0-feec-465c-a80a-eb79bfee595b.png)


![](/002-aws-network/img/no2_private-1.png)
VPCを作成し、そのVPCにサブネットを4つ作成  
その後、インターネットゲートウェイ（以後IGW）を作成してアタッチ
インターネットゲートウェイにつながるサブネットをパブリックサブネット、それ以外をプライベートサブネットとする  
パブリックサブネットにはALBを配置し、プライベートサブネットにはEC2を配置する
セキュリティグループはALB、EC2それぞれに作成してアタッチする

パブリックサブネットとプライベートサブネットは、リソースとしては同じサブネットになります  
パブリックサブネットは、インターネットゲートウェイへのルート設定がされているものをパブリックサブネット  
されていないものをプライベートサブネットと呼びます


### 設定値
構成図の下部にセキュリティグループ、ルートテーブルついての解説
  - セキュリティグループ  
    1. ALBにアタッチ  
      インバウンドルールは作業端末IPからのHTTP(80)通信を許可  
      アウトバウンドはデフォルトのため記載を省略  
          | タイプ | プロトコル | ポート範囲 | ソース |
          | :---: | :---: | :---: | :---: | 
          | HTTP | TCP | 80 | 作業PCのIP | 

    2. EC2インスタンスにアタッチ  
      インバウンドルールはALBのセキュリティグループからのHTTP(80)通信を許可  
      アウトバウンドはデフォルトのため記載を省略  
          | タイプ | プロトコル | ポート範囲 | ソース |
          | :---: | :---: | :---: | :---: | 
          | HTTP | TCP | 80 | ALBのセキュリティグループ | 

  - ルートテーブル  
    1. パブリックサブネットに関連付け  
          | 送信先 | ターゲット |
          | :---: | :---: | 
          | 0.0.0.0/0 | IGW | 
          | ::/0 | IGW | 
          | VPCのCIDR | local | 

          ルールは上から
          - IGWからのIPv4通信のルート
          - IGWからのIPv6通信のルート
          - デフォルトルート

    2. プライベートサブネットに関連付け  
          | 送信先 | ターゲット |
          | :---: | :---: | 
          | VPCのCIDR | local | 


インターネットから、EC2に対して直接アクセスすることはできません  
インターネット → ALB → EC2  のように間接的なアクセスとなります  
また、セキュリティグループのチェーンによって、パブリックサブネットのALBからでないとプライベートサブネットのEC2にはアクセスできません


# ネットワークルート
![no2_private-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3994667/e64fd8ab-b213-46d3-ad18-c47eccede40f.png)



  1. 作業用PCからALBのAレコードに向けてHttp通信を行う  
      作業用PC-インターネット-VPC.IGW-ALB-EC2
  2. 戻りのルートは
      EC2-ALB-VPC.IGW-インターネット-作業用PC

このままでは、EC2構築時初期のインストール作業などができません 

なぜならば、EC2からインターネットへのアウトバウンド通信ができないからです

### インターネットのアウトバウンドができないのでもう少し追加してみます
それではどうすればいいでしょう？  
パブリックサブネットにNATゲートウェイを追加してみます


# 追加の構成図
![no3_private-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3994667/85e2c6da-6c80-4a8e-9b2b-6f74f93db2e3.png)



パブリックサブネットの片方にNATゲートウェイを作成します  
NATゲートウェイは冗長化しませんただ、実際の現場では。必要に応じて冗長化はやります

### 設定値
<!-- <img width="50" src="001-aws-network/img/no1_pulic-2.png"> -->

プライベートサブネットのルートテーブルにNATゲートウェイへのルートを追加します
  - ルートテーブル  
    1. プライベートサブネットに関連付け  
          | 送信先 | ターゲット |
          | :---: | :---: | 
          | 0.0.0.0/0 | NATゲートウェイ | 
          | ::/0 | NATゲートウェイ | 
          | VPCのCIDR | local | 

          ルールは上から
          - IGWからのIPv4通信のルート
          - IGWからのIPv6通信のルート
          - デフォルトルート

# ネットワークルート
![no3_private-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3994667/ae6cc1d7-5b4e-4b55-97a7-9b288b90c66d.png)


# 今回作成した成果物
以下にterraformとCloudFormationスタックとして作成しGitリンクを貼り付け  

IPv4、IPv6それぞれで作っています  
お金が発生するALB、EC2インスタンス、EIPが含まれていますので利用の際はご注意を  


### terraform　
- [IPv4](https://github.com/lamne-kiba-gaeru/aws-network/blob/main/002-aws-network/trraform-ipv4/main.tf)
- [IPv6(デュアルスタック)](https://github.com/lamne-kiba-gaeru/aws-network/blob/main/002-aws-network/trraform-ipv6/main.tf)

### cloudformation
- [IPv4](https://github.com/lamne-kiba-gaeru/aws-network/blob/main/002-aws-network/ipv4-cfn-template.yaml)
- [IPv6(デュアルスタック)](https://github.com/lamne-kiba-gaeru/aws-network/blob/main/002-aws-network/ipv6-cfn-template.yaml)