##VPCとは
AWSの仮想ネットワークを作成するサービスです。セキュリティーの設定もここに含まれます。
全てのサービスを作る上で、土台となるネットワークを作成するサービスなので、AWSの勉強をするときには基本的にVPCから学ぶのがおすすめです。
VPCを作成するときに、最初にリージョンの設定を行う必要があります。
##リージョン、アベイラビリティゾーン(AZ)について
アベイラビリティゾーンはAZと略されることも多いので、今後はAZと表記します。
###アベイラビリティゾーン(AZ)
サーバーを置いているデータセンターが集合している場所のことです。
###リージョン
AZを束ねた地域のことです。
世界中にリージョンは存在していて、日本には東京リージョンと大阪リージョンがあります。
東京リージョンを使用する場合は、下記のような表し方をします。
「ap-northeast」が東京リージョンを表し、末尾の「1」はAZを表します。
東京リージョンのAZは現在下記の3つが主に使われています。
VPCを使うとこの3つのAZを使うことができます。
##サブネットについて
VPCでネットワークを構成するときに、セキュリティーレベルをあげるためにネットワークを細かく区切ることがあります。
その細かく区切るための小さなネットワークをサブネットと呼びます。
サブネットには**「Public subnet」と「Private subnet」**と呼ばれる2種類が存在します。
インターネットゲートウェイに接続できるかどうかの違いがあります。
簡単に説明すると「Public subnet」はインターネットで外部からアクセス可能なサブネットで、「Private subnet」はVPCのネットワーク内でのみアクセス可能なサブネットになっています。
AWSの中にVPCを作成し、更にその中にサブネットを複数作成できます。
VPCやサブネットにはIPアドレスを割り当てて使用します。
IPアドレスやサブネット(サブネットマスク・CIDR表記)に関する詳しい説明はこちらにまとめています。
このサブネットの中にEC2などのインスタンスをたてて、サーバーの設置などを行います。
https://qiita.com/a_goto/items/396dee5c6d894392acb3
##VPCのネットワークコンポーネントについて
ネットワークコンポーネントとはVPCの機能を分解してコンポーネント(部品)として扱えるようにしたものです。
VPCでネットワークを作成し、ネットワーク内でサブネットにIPアドレスをアタッチ(付与)したり、インターネットに繋げれるようにしたり、セキュリティーの設定など様々な機能を追加するのに使います。
ここでは下記について説明します。
ルートテーブル
インターネットゲートウェイ
NATゲートウェイ
ENI
Elastic IPアドレス
セキュリティグループ
ネットワークACL
例えば下記のように、VPCにサブネットを2つ用意し、その中にEC2インスタンスをそれぞれAとBを設置し、様々な機能を追加していくとします。
このEC2のAとBを紐付けて通信する場合に必要な機能の説明をします。
ルートテーブル、NetworkACL、セキュリティグループを例に取ります。
###ルートテーブルについて
ルートテーブルは、サブネットに関連付けて使用するもので、サブネットから外に出る通信を、どこに向けて発信するのかを定義づけるルールのことです。
ルートと呼ばれる下記のようなルールで構成されます。
ターゲットに設定されているLocalというのはVPC内のことを指します。
10.0.0.0/21に向けての通信はVPC内に向けて通信が発信されるようになります。
デフォルトではこの設定がされており、ここにルールを追加していくことが可能です。
基本的にルールは細かく指定したものが優先されるため、細かく通信の制御を設定することで、通信できる範囲を絞ってセキュリティーを高めていくことができます。
例えば下記のようなルールを追加すると、
10.0.0.0/21に向けての通信は上記と同じで、VPC内に向けて通信が発信されて、
それ以外に向けての通信は全て、インターネットに向けての通信が発信されるようになります。
###インターネットゲートウェイ
インターネットゲートウェイとはVPC内のAWSリソースとインターネットを繋げるための機能です。
VPCのネットワークからインターネットに通信を可能にするためには、下記のようにこのインターネットゲートウェイをVPCにアタッチする必要があります。
インターネットゲートウェイの特徴としては、インターネットからアクセスが集中しても、自動でスケールして対応してくれるため高い可用性があります。
そして、下記の図のようにサブネットのルートテーブルの設定を使用します。
また、サブネットからインターネットゲートウェイへのルーティングは、Public subnetからのみ可能になっています。
使い分けとしては、インターネットからアクセスしても問題ないリソースなどはPublic subnetに配置し、セキュリティレベルを上げたい、データベースなどのリソースはPrivate subnetに配置します。
###NATゲートウェイ
NATゲートウェイはプライベートサブネットからインターネット接続を可能にする機能です。
ただし、アウトバウンドはできるが、インバウンドはできません。これにより外部からプライベートサブネットには接続できないのでセキュリティが担保される。
###ENI(Elastic network interface)
仮想ネットワークインターフェイスの略で、EC2インスタンスなどにIPアドレスをアタッチすることができる機能です。
同じAZ内のインスタンスにアタッチ/デタッチができます。
EC2にはデフォルトでENIが付与されている。
一つのインスタンスに複数のENIを付与することができる。
このENIとインターネットゲートウェイが接続することで、Public subnetとインターネットが接続可能になる。
###Elastic IPアドレス
外部のネットワーク同士が接続するためには、外部接続用のIPアドレスが必要になります。
AWSにも外部用のIPアドレスを付与する機能が2つ用意されています。
「Public IP アドレス」「Elastic IP アドレス」の2つです。
####Public IP アドレス
AWSのIPアドレスプールにより割り当てられる外部接続用のIPアドレスで、インスタンスが再起動、停止、終了したときに開放されます。
開放されることで、確率は低いですが他のネットワークが再度同じIPアドレスをもつ可能性もあります。
設定で有効にしていると、自動で割当されます。
基本的には使わない方が良いと思います。
####Elastic IP アドレス
同じく外部接続用のIPアドレスで、インスタンスにアタッチ/デタッチが可能で、
静的なパブリックIPアドレスのため、再起動、停止、終了したときでも同一のIPアドレスになります。
どこにもアタッチしていない場合1時間あたり1円の料金が発生するので注意が必要です。
どこかにアタッチしていれば料金はかかりません。
図が少しややこしいですが、EC2インスタンスはENIを持っており、このENIに外部接続用のElastic IPアドレスがくっついているイメージです。
###セキュリティグループ
AWSの仮想ファイアーウォールサービスのことです。
ファイアーウォールとは通信を制限するフィルターのようなものです。
インバウンドとアウトバウンド両方の設定を行える。基本的にアウトバウンドの設定をすることはあまりない。
ENIの単位で設定します。
###ネットワークACL
サブネット単位で設定するファイアーウォールのことです。
ステートレス・インスペクション型といって、アウトバウンドの通信を許可した場合、インバウンドも明示的に設定する必要があるのが特徴です。