Amazon VPC

##Amazon Virtual Private Cloud (VPC)とは？##

- ユーザー専用のプライベートなクラウド環境を提供するサービスです。

[AWS VPC ハンズオン](https://qiita.com/leomaro7/items/65e085890c45d971f744) も是非、ご覧ください。


##特徴##

- サブネットは1つのVPCにつき多数作成できますが、ネットワークトポロジーが複雑化することを防ぐため、最小限にしておくことをおすすめします。


##VPC構築の利用例##
1.空間（IPアドレス）を設計する
・VPCを作成するリージョンを選択します。
＊VPCはリージョンに基づいて作成します。
- 東京リージョン
・VPCに付与するCIDRブロックを決定します。
- 10.1.0.0/16

2.サブネットを設計する
・ルーティングポリシーごとにサブネットを分割して、CIDRを決定します。
-10.1.1.0/24
-10.1.2.0/24
-10.1.3.0/24
-10.1.4.0/24
・AZにサブネットを設置します。
＊サブネットはAZに基づいて作成されます。
-ap-northeast-1a
-ap-northeast-1c

3.コンポーネントを配置する
・VPCとインターネットの通信をできるようにします。
＊インターネットとの出入り口です。
-IGW
・負荷分散できるようにします。
-ELB

4.ルーティングを設計する
・VPC内のサブネット間の通信はデフォルトで互いにルーティング可能です。
-10.1.0.0/16	local
・IGW向けに通信できるようにデフォルトルートを追加します。(必要な送信先への経路も設定可能です。)
＊インターネットとつながるサブネットを「パブリックサブネット」
＊インターネットとつながらないサブネットのことを「プライベートサブネット」
-0.0.0.0/0	IGW	

1～4を纏めるとこんな感じの構成になります。
![3.png](https://qiita-image-store.s3.amazonaws.com/0/280929/7036d024-257a-58fa-abe6-94c1e9935d9e.png)


5.セキュリティを設計する
・セキュリティグループで必要な通信のみを許可するようにします。	

（ELBはインターネットからhttp:80とhttps:443宛だけ受信させる）
![1.png](https://qiita-image-store.s3.amazonaws.com/0/280929/88a652d7-0bec-135d-7a37-a35deb85b841.png)

 (WEBサーバはELBからのhttp:80だけ許可させる)
![2.png](https://qiita-image-store.s3.amazonaws.com/0/280929/9cf0fc87-78de-9636-a304-8849696e46af.png)


##オンプレミス環境とAWS VPCとの接続##
オンプレミス環境との接続が可能です。

###1.AWS VPN###
![11.png](https://qiita-image-store.s3.amazonaws.com/0/280929/57d49915-23e3-3703-3f42-aefd2f8c82ac.png)

###2.AWS Direct Connect###
![22.png](https://qiita-image-store.s3.amazonaws.com/0/280929/1ef92343-f19e-95c6-1c5a-a05b0ed2d483.png)

- AWS Direct Connectのハンズオンは [AWS 専用線アクセス体験ラボトレーニング](https://aws.amazon.com/jp/dx_labo/) があります。

- AWS Direct Connect と VPN 接続を同時に同じ VPC に使用することはできますか。 
 - 通常はDirect Connect が優先されて接続される。Direct Connect に障害が発生しフェールオーバが発生した場合のみ VPN で接続できる。

- オンプレミスからDirect Connect で VPC に接続する場合、どのようなアクセスが可能ですか。 
 - AWS Direct Connect 接続はそれぞれ、1 つ以上の仮想インターフェースを使用するように構成できます。仮想インターフェースは、AWS のサービス（Amazon EC2 や Amazon S3 など）にパブリック IP スペースを使用してアクセスするように構成することも、VPC 内のリソースにプライベート IP スペースを使用してアクセスするように構成することもできます。 

・VPC(プライベート接続)
・AWSクラウド(パブリック接続)
・TGW用のDXGW(トランジット接続)

- [AWS Direct Connect での暗号化](https://docs.aws.amazon.com/ja_jp/directconnect/latest/UserGuide/encryption-in-transit.html)

- [AWS Direct Connect の回復性に関する推奨事項](https://aws.amazon.com/jp/directconnect/resiliency-recommendation/)
 - AWS Direct Connect では、転送中のトラフィックはデフォルトでは暗号化されません。AWS Direct Connect を通過する転送中のデータを暗号化するには、そのサービスの転送暗号化オプションを使用する必要があります。

###3.AWS Direct ConnectGateway###

複数リージョンに接続することができる。

例えば、東京のDirect ConnectロケーションのVIFを、Direct Connect Gatewayを経由してシンガポールと東京のVPCに接続することができます。
![33.png](https://qiita-image-store.s3.amazonaws.com/0/280929/0fce281d-2e52-c5fe-ca7f-d881685b8915.png)

また、このような場合、VIFが合計で9必要となってくる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/d99c661b-62da-b903-40b3-d5bef2969f2d.png)
このように集約すれば、3で済む。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/931525f6-f80e-b73d-5447-baca58ad3ef9.png)

- ConnectionとVIFは、別のAWSアカウントでも管理する事が可能。
- VIFとDirect Connect Gatewayは同一アカウントが所有している必要がある。
- Direct Connect GatewayとVPCは別のアカウントでもアタッチ可能です。
- 折り返し通信不可（オンプレミス間、VPC間の通信は不可能）。

###4.AWS Transit Gateway###
管理・連携するVPCの数が増えると、VPC Peeringのメッシュ化によりAWS上の構成が複雑化してしまいます。
そこで、Transit Gatewayを中心に配置し、リージョナルルーターとして経路を集中管理することで、VPC間接続を簡単に管理することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/d79427ad-506d-30e6-8cba-6ca479e800fd.png)

- Direct connect GatewayとTransit Gatewayは別のアカウントでもアタッチ可能です。
- Transit GatewayにアタッチするVPCは他のAWSアカウントで管理されていてもよい。
- [マルチキャスト](https://aws.amazon.com/jp/about-aws/whats-new/2020/11/ip-multicast-on-aws-transit-gateway-now-available-in-major-aws-regions-world-wide/)にも対応。

[AWS Transit Gateway 試してみた](https://qiita.com/leomaro7/items/8dd787211e1c860a57b0)


##tenancy##
"default(デフォルト)"の値に設定しておくと、これまでと同様の振る舞いを行います。つまり、個々の物理マシンの上で、複数の顧客により起動された複数のインスタンスが稼働します。

"dedicated(専用）"に設定されると、そのVPCの中で立ち上がる全てのインスタンスがシングルテナント（クラウドコンピューティングなどのサービスで、ひとつのシステムやサービスを 1社で利用している状態のこと）で稼働することが保障されます。
なので、コンプライアンスなどにかかる場合に有効ですが、占有すると追加料金がかかります。
また、VPCのtenancy属性は、VPCの作成後に変更することはできません。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/280929/b0a04af6-a7ff-c8e7-08e8-8b4fdd2b90ff.png)


##ネットワーク関連の注意点##

- VPC、サブネットは将来的なことを考えて"適切な広さ"にする。


##VPCエンドポイント##

###通常###

- プライベートサブネットからの通信はNATを、パブリックサブネットからは、インターネットゲートウェイを通過したアクセスとなる。

###VPCエンドポイント###

- S3エンドポイントを設定することにより、インターネットをかえさないセキュアな通信となる。
- プライベートサブネットの場合はNATを通さない通信が可能となる。

**ゲートウェイ型**

- サブネットに特殊なルーティング設定をし、VPC内部から直接外のサービスと連携する。
- エンドポイントポリシーを設定。
- 無料。
- 冗長性はAWS側が対応。

**プライベートリンク型**

- サブネットにエンドポイント用のプライベートIPアドレスを生成し、DNSが名前解決でルーティングする。
- セキュリティグループを設定。
- 有料。
- マルチAZ設計。

###作成してみる###

- 事前準備
 - EC2インスタンスは作成済
 - S3バケットも事前に作成済みであること
 - EC2・S3が同一リージョンに作成されていること。
 - エンドポイントの作成
 
サービス名:com.amazonaws.ap-northeast-1.s3　を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/ea977405-c5bb-2604-27b2-4be8060d5e8e.png)

利用するVPCとサブネットを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/b5c9d383-44a9-6fac-15f7-169211bf6888.png)

ポリシーは今回フルアクセスのままにしてみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/2b4c3504-3592-a168-d9f4-2efd9844ced2.png)

動作を確認。実際にアクセスできるか確認してみましょう。

```
aws s3 ls --region ap-northeast-1
```


##予約済アドレス##

|ホスト|用途|
|---|----|
|10.0.0.0| ネットワークアドレスです。|
|10.0.0.1| VPC ルーター用に AWS で予約されています。|
|10.0.0.2| AWS で予約されています。DNS|
|10.0.0.3| 将来の利用のために AWS で予約されています。|
|10.0.0.255| ネットワークブロードキャストアドレスです。|


##カスタマーマネージドプレフィックスリスト##

- 複数のアドレスブロックを纏めてプレフィックスリストとして設定可能です。
- 以下に設定可能。
 - セキュリティグループ
 - サブネット
 - Transit Gatewayのルーティングテーブル
- 作成したプレフィックスリストはRAMで他アカウントから参照可能。

纏めてオンプレミスとかのネットワークをプレフィックスリストに参照しておけば、毎回書かなくてもいいという点がメリットです。

設定は至ってシンプルです。プレフィックスリストを次の通り設定しておきます。
![スクリーンショット 2021-03-29 19.01.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/890dc361-44e0-4dd7-0e18-307df64fa02f.png)

ルートテーブルでプレフィックスリストを設定していきたいと思います。プレフィックスリストIDを指定するだけです。
![スクリーンショット 2021-03-29 19.03.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/4275a3b6-47c5-49c8-2988-c6013fdcbdd3.png)


##Ingress Routing##

- IGW/VGWに対するアウトバウンド・インバウンド双方のトラフィックを特定EC2インスタンスのENIに向ける事ができる。
- VPCに出入りする全トラフィックが特定EC2インスタンスを通過することを強制するため、IDS/IPSやFirewallによる監視・通信制御を効果的に実行可能。


##DNS##

###Route53 resolver###

- 以下の２つのアドレスがVPC内のEC2インスタンスからのみ参照可能。
 - CIDRのアドレスに+2をプラスしたIP(10.0.0.0/16の場合は10.0.0.2)
 - 169.254.169.253

- VPNや専用線経由では参照できない。この場合は、Route 53 Resolver for Hybrids で解決。

###DNS機能の有効化とホストへのDNS名割当て###

- DNS 解決
 - 基本はyes
 - NoにするとVPCのDNS機能が無効となる

- DNS ホスト名
 - TrueにするとDNS名が割り当てられる
 - “Enable DNS resolution”をtrueにしないと有効にならない

![スクリーンショット 2021-03-30 19.32.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/dcacfbf4-465c-c857-334d-a1fc6256f9ff.png)


##NTP#

- Amazon Time Sync Service
 - VPC内で稼働する全てのインスタンスからNTPで利用できる高精度な時刻同期サービス
 - 169.254.169.123を設定するだけで利用できる
 - 「うるう秒」への対策が実装済み


##リンク#

[Amazon VPCのサイズを後から変更するには](https://qiita.com/leomaro7/items/c17ec65c09044d78ceec)