AWSVPCを試す



## ネットワーク

### VPCの作成
IPv4CIDRブロック 192.168.0.0/16
IPv6CIDRブロック Amazon提供

### サブネットの作成 
IPv4CIDRブロック 192.168.1.0/24
IPv6CIDRブロック カスタム 01

### EC2インスタンスの作成
作ったVPCネットワーク、使うサブネットを指定
自動割当パブリック、IPv6自動の有効化
タグにNameを指定
セキュリティグループ SSHの許可 マイIP（現在の自分のグローバルIP）
キーペア作成

### SSH接続
VPCのサブネットからインターネットに出れるようにゲートウェイを作成
VPC - インターネットゲートウェイ作成 - VPCにアタッチ
サブネットにインターネット用のルートを作成
サブネット - ルート - ルートの編集 - 0.0.0.0/0（どこにもマッチしない）インターネットゲートウェイを選択
キーペアを使って接続
`ssh -i "udemy-vpc-aws.pem" ec2-user@175.41.214.184`

### デフォルトVPC
インスタンス作成時に明示的に選ばなかった場合に作成される
インターネットゲートウェイも自動で作られる

## セキュリティ

### セキュリティグループ
インスタンスへのインバウンド（入ってくる）アウトバウンド（出ていく）を制御
Webなら80,443のインバウンドを許可
基本はアウトバウンドはすべて許可、インバウンドのほうを設定する

ステートフル＝出ていった通信の戻りは許可される（インバウンド許可しなくてもアウトバウンドが許可されていれば）

### Webが見れるようにしてみる

https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-install-extras-library-software/

```
which amazon-linux-extras

sudo amazon-linux-extras list
sudo amazon-linux-extras install -y nginx1
sudo systemctl start nginx
sudo systemctl status nginx
```

EC2のパブリックIPにアクセスしてみる

VPC - セキュリティグループ - インバウンドのルールを編集 - HTTPでソース0.0.0.0/0を許可
ソースにセキュリティグループを指定した場合、そのグループに属するインスタンスからのアクセスを許可

### ネットワークACL
インスタンスではなく、サブネットを出入りする通信を制御
こちらはステートレス＝行きと戻りの通信も個別に指定する必要（インバウンドが許可でも、アウトバウンドが拒否であれば通信できない）

ルール番号の早いものから順に適用される、該当ない場合は拒否される

インバウンドのルールの編集 - 99 SSH DENY

## パブリックIP
### ElasticIP
EC2のパブリックIPは再起動で変わる。ElasticIPは予約しておけば同じIPを保持できる。別インスタンスへ付け替えも可能。
予約してるだけで使ってないと課金される。使えば一個まで無料。

ElasticIP - 割当て - 関連付け - インスタンスを選択 プライベートIPが一個しかない場合選ばなくてもいい

## プライベートサブネット

### プライベートサブネット
パブリックサブネット：Webサーバなどが動作し一般公開
プライベートサブネット：アプリなどが動作し一般非公開。同一VPC内からアクセス。インターネットゲートウェイに接続しない。メンテでネット接続する場合は別のゲートウェイを使う。

### プライベートサブネットの作成
ipv4 192.168.2.0/24 ipv6 カスタム 02
既存のルートテーブルを使わず、新しく作成。関連付けの編集でプライベートサブネットを選択

### インスタンスの作成
インスタンスを作成し、プライベートサブネットを選択
セキュリティグループで、ソースにパブリックのセキュリティグループを選択し、そこからのアクセスを許可する

### パブリックサブネット経由でSSH接続
パブリックサーバを踏み台にSSH接続
175.41.214.184　-> 192.168.2.173
`ssh -i "udemy-vpc-aws.pem" -oProxyCommand='ssh -i "udemy-vpc-aws.pem" -W %h:%p ec2-user@175.41.214.184' ec2-user@192.168.2.173`

プライベートなのでそのままではインターネットに出られない
`ping google.com`

### NATゲートウェイの設置（IPv4）
インターネットに出られるサブネットに紐付ける
プライベートからNATゲートウェイにルートする

NATゲートウェイの作成 - パブリックサブネットを選択、EIP割当て
プライベートサブネットのルートテーブル変更 - NATゲートウェイを選択、0.0.0.0/0

### EgressOnlyインターネットゲートウェイ（IPv6）
https://developers.google.com/speed/public-dns/docs/using

`ping 8.8.8.8`
`ping6 2001:4860:4860::8888`

プライベートサーバにIPv6の割り当て
インスタンス - アクション - ネットワーキング - IPアドレス管理 - 新しいIPの割り当て（IPv6）- インスタンス再起動
EgressOnlyIGW - VPC選択
プライベートサーバのルート編集 - ::/0 egw選択

## エンドポイント
他のAWSサービスと接続する際、インターネットに出ずにプライベートで接続する

S3へファイルをアップロードしてパブリック公開にする
プライベートサーバからダウンロードしてみる
wget http://~

### エンドポイントの作成
プライベートのインターネットへのルート削除 - nat, egwを削除（確認のため）
エンドポイントの作成 - S3を選択、VPCを選択、プライベートルートを選択 - テーブルに新しいルートが追加される

### エンドポイントサービス
他のAWSアカウントのサービスをエンドポイントとして利用できる。
PrivateLinkの料金や相手サービスへの申請が必要。

## まとめ

EC2インスタンスはVPC、サブネットの中に作る
インスタンスにはセキュリティグループが紐付いていて通信を制御
ルートを通してセキュリティを許可する

VPCの中にサブネットを作る
ネットに出るにはインターネットゲートウェイをつくってVPCに関連付ける（サブネットでも許可）ルートにも追加
IPV6を使うにはEgress-Onlyインターネットゲートウェイをつくる
サブネットにはルートテーブルが紐付いている
サブネットにはネットワークACLが紐付いていて通信を制御

ネットにでるルートがないサブネットをプライベートサブネットという
インターネットゲートウェイがなくても踏み台を使えばSSH接続できる
プライベートサブネットから外に出るにはインターネットへのルートを持つサブネットにNATゲートウェイをつくって、ルートを通す

エンドポイントを使えばプライベートからAWSサービスに接続できる

VPCを作るときCIDRを決める必要がある
サブネットを作るときCIDRを決める必要がある
IPV6もある
CIDRの決め方がわかりません

## 参考

古いけど動作は最新環境で行いました。
[Amazon Web Service マスターコース VPC編](https://www.udemy.com/course/amazon-web-service-vpc/)