本当にざっくり理解AWS ネットワーク(概要編)

# 概要

AWS初心者、インフラを触った人がない人向けにざっくりとAWSで使うネットワークサービスの概要を伝えられればと思います。
本当にざっくりですし、詳しい概要はAWSが出しているAWS Black Beltを見ていただいた方が確かです。またこの資料を読むよりもAWSのハンズオン等に参加した方が理解が進むと思います。

参考資料:

- [https://www.slideshare.net/AmazonWebServicesJapan/20201021-aws-black-belt-online-seminar-amazon-vpc](https://www.slideshare.net/AmazonWebServicesJapan/20201021-aws-black-belt-online-seminar-amazon-vpc)

この記事では以下の分類で説明させていただきます。AWSのソリューションアーキテクト-アソシエイトレベルだと、必須ではないが利用頻度が高いネットワークサービスまで抑えておけば大丈夫です。ちなみに今回は、必須ではないが利用頻度が高いネットワークサービスまで説明します。

- AWS上でWebサービスを動かす上で必要なネットワークサービス
    - VPC
    - サブネット
    - インターネットゲートウェイ
    - 仮想ルータ
    - ルートテーブル

- 必須ではないが利用頻度高いネットワークサービス
    - VPCエンドポイント
    - NATゲートウェイ

- ネットワークの構成上使う場合があるネットワークサービス
    - VPC Peering
    - カスタマゲートウェイ
    - VPNコネクション
    - バーチャルプライベートゲートウェイ
    - Direct Connect
    - AWS Transit Gateway
    - AWS PrivateLink
    - etc..

# ネットワーク用語

AWSネットワークサービスを話す上で基本となる用語を説明します。

## IPアドレス

PCやサーバなど、TCP/IPで通信する機器を識別するためのアドレスのこと。

現実世界で郵便物を配達する際に住所が必要なのと同じように、ネットワークの世界でもデータを特定の機器に届けるためにIPアドレスが必要になります。

そしてIPアドレスには主に2種類があります。

- パブリックIPアドレス(グローバルIPアドレスとも言う)
    - インターネット接続に用いるIPアドレス
- プライベートIPアドレス
    - インターネットには接続せず自分たちのネットワークで用いるIPアドレス
    - サーバ、ネットワーク機器に割り当てる

## CIDR表記

CIDRは「サイダー」と呼びます。
IPアドレス+サブネットマスク(1つの数字)で書く書き方。AWSではネットワークの表記はCIDR表記になっています。
`192.168.XXX.XXX/24` という形で記載します。
CIDR表記以外にサブネットマスク表記もあり、その場合`192.168.1.0/255.255.255.0`　という形で記載します。
ちなみにCIDRは総称は「Classless InterDomain Routing」で、アドレスクラスの概念を気にしないで自由にIPアドレスの割り当てを行える仕組みのことを指します。

従来は「クラスフル方式」と呼ばれる5つのクラスがあり、使用できるIPアドレスの数も決まっていました。

## サブネットマスク

IPアドレスがどこからどこまで使えるかを示す情報のことです。

例えば、 `172.30.123.45/24` というCIDR表記のネットワークアドレス帯があるとすると以下のような計算になります。

- IPアドレスを２進数に変換する
- `/24` をサブネットマスク表記にし、２進数に変換する
- IPアドレスとサブネットマスクの論理和を求める

まず `/24` はサブネットマスクだと「255.255.255.0」になります。それを2進数に変換。ちなみに `1` がネットワーク部、 `0` がホスト部になります。

ネットワーク部はIPアドレスが所属しているネットワークを決めます。ホスト部はIPアドレスがどれだけ使えるかを決めます。

11111111 11111111 11111111 00000000

次にIPアドレス「172.30.123.45」を2進数に変換します。

10101100 00011110 01111011 00101101

最後に2つの2進数の論理和を求めます。

IPアドレス:      10101100 00011110 01111011 00101101

サブネットマスク:  11111111 11111111 11111111 00000000

論理和:        10101100 00011110 01111011  00000000

論理和「10101100 00011110 01111011  00000000」は2進数にすると、 `172.30.123.0` になり、これがネットワークアドレス(開始IP)になります。サブネットマスクのホスト部を全て1にすると 「10101100 00011110 01111011  11111111」 となり、これがブロードキャストアドレス(終了IP) `172.30.123.255` になります。

ネットワークアドレスとブロードキャストアドレスを抜かしたアドレスが、ホストアドレスとして使え、それが 「172.30.123.1〜172.30.123.254」の間のIPアドレスです。

# 必須ネットワークサービス

## VPC

論理的なネットワーク空間を作ることができるサービスです。
例えば、`172.30.123.45/16` のネットワークアドレス帯が欲しければ、VPCで設定します。
AWSの推奨はRFC1918に則ったものを推奨しています。

参考資料: [https://www.nic.ad.jp/ja/translation/rfc/1918.html](https://www.nic.ad.jp/ja/translation/rfc/1918.html)

## サブネット

VPC内部のネットワーク空間です。サブネット化することによって、ネットワーク空間を区切ることができて、余計なトラフィックがルーターに流れることがないので、ネットワークの効率が良くなります。
AWSでは、余計なトラフィックを流したくない場合は複数のサブネットを作ります。

ここは設計編でお話しします。
ちなみにサブネットはどこで作るかを設定する必要があり、AZ(Availability Zone)と紐づいています。

## インターネットゲートウェイ

インターネットからのアクセスを許可するために必要なネットワークサービスです。

## 仮想ルータ

AWS上で意識することはありませんが、存在します。

## ルートテーブル

サブネットに設定するルーティングを定義するネットワークサービスです。
ルーティングテーブルをちゃんと設定しないとインターネットからのアクセスはできません。

## まとめ

各AWSのネットワークサービスの関係性は以下の図の通りです。
今回紹介したサービス以外にRegionという概念がありますが、これは地域を示すものです。

東京であったり、大阪であったりが、Regionになります。Availability Zoneは例えば、Regionが東京の場合、東京の中でデータセンター(サーバが置いてある場所)が異なるということです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575547/309241af-3135-e807-e8a1-3909a3463c97.png)


# 必須ではないが利用頻度高いネットワークサービス

## NATゲートウェイ

ここは、AWSの資料に勝る内容はないです。。
インターネットからのアクセスがないサブネットでも、インターネットに対してアクセスを行いたい場合にNATゲートウェイを使います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575547/bc1ee652-b108-9bf6-267f-c76d7d9a0d4a.png)

引用: [https://www.slideshare.net/AmazonWebServicesJapan/20201021-aws-black-belt-online-seminar-amazon-vpc#83](https://www.slideshare.net/AmazonWebServicesJapan/20201021-aws-black-belt-online-seminar-amazon-vpc#83)

## VPCエンドポイント

パブリックIPアドレスを持つAWSサービスに対して、VPC内部から直接アクセスするための出口のことです。例えば、S3などにアクセスする場合、VPCエンドポイントを設定するとプライベートIPアドレスでもアクセスできるようになります。

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575547/707b3d21-a728-878f-5a16-f3b565905f7c.png)


### VPCエンドポイントあり
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575547/be3ea502-da3b-edd4-637e-c1de7272cc38.png)


### VPCエンドポイントの種類
ちなみにVPCエンドポイントには２種類あります。

Gateway型とInterface型です。Gateway型はVPCに紐づき、Interface型はENIに紐づきます。アクセス制御の仕方や利用料金、冗長性は以下のAWS Black Beltの通り違いがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575547/523385a9-b110-f7c9-aa72-a46e06cd7526.png)

引用: [https://www.slideshare.net/AmazonWebServicesJapan/20201021-aws-black-belt-online-seminar-amazon-vpc#80](https://www.slideshare.net/AmazonWebServicesJapan/20201021-aws-black-belt-online-seminar-amazon-vpc#80)

# アクセス制御の方法

以上でAWSのネットワークサービスの説明が終わりですが、まだ重要なことを説明してません。それはアクセスの制御の仕方です。

アクセスを制御しなければ、インターネットからのアクセスを許可できませんし、アクセス許可をしすぎると攻撃される場合もあります。AWSでアクセス制御する場合は、セキュリティグループで制御するか、ネットワークACLで制御するかの２パターンがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575547/dd181aca-4dbd-42d9-78bc-c8397e47fc3c.png)

引用: [https://www.slideshare.net/AmazonWebServicesJapan/20201021-aws-black-belt-online-seminar-amazon-vpc#47](https://www.slideshare.net/AmazonWebServicesJapan/20201021-aws-black-belt-online-seminar-amazon-vpc#47)

私が関わっているプロジェクトでは、ネットワークACLではなく、セキュリティグループでアクセス制御をする場合が多いです。

ネットワークACLはサブネット内の全てに適用されてしまうので、コンピュートサービス(例: EC2)やマネージドサービス(例: Elasticache)で細かいアクセス制御がしにくくなってしまいます。

そのためセキュリティグループでアクセス制御をすることが多いです。ちなみに上記資料ではセキュリティグループは「サーバレベルで効果」と書いてますが、正しくはENIレベルでのアクセス制御を行います。

そのため、Interface型のVPCエンドポイントでセキュリティグループを設定したりします。

# 終わりに

AWSのネットワーク設計をするために必要なネットワークサービスの概要であったり、ネットワークの知識を説明してきました。

次は具体的にどのようにサブネットを切るのか、どのようなアドレス帯がいいのかを経験をもとにお話しさせていただければと思います。