Amazon VPC(Virtual Private Cloud)
Overview
AWS上にプライベートネットワーク空間を提供するサービス。
オンプレミスでプライベートネットワークを構築する場合は、データセンター内にスイッチやルーターなどのネットワーク機器を用意し、LANケーブルでサーバーやストレージなどを接続するといった作業が必要になる。
VPCを利用すると、ハードウェアや配線を意識せず簡 単な操作で迅速にプライベートネットワークを構築できるメリットがある。
また、VPCはオンプレミス環境との接続も容易。
物理的な専用線で接続する Direct Connect
や仮想ネットワークで接続する VPN(AWS Virtual Private Network)
が利用できる。
利用用途
VPCは、主にプライベートなリソース(例:データベースサーバーやバックエンドアプリケーション)を保護し、インターネットから隔離するために使用される。
フロントエンドは一般的に公開されるコンポーネントであり、ユーザーから直接アクセス可能な部分。
そのためVPC内にフロントエンドを配置する必要はほとんどない。
一般的なアーキテクチャでは、フロントエンド(Next.jsなどのLambda関数を含む)はパブリックなインターネットに接続される場所へ配置される。
一般的に、フロントエンドはクライアントのブラウザから直接アクセスされ、ユーザーに対してウェブサイトやアプリケーションのコンテンツを提供する。
一方、バックエンドのリソースやデータベースなどは、セキュリティ上の理由からVPC内に配置することが一般的。
VPC内のリソースはインターネットから直接アクセスできないため、より高いセキュリティレベルでアクセス制御が可能となる。
ただし、特定の要件やセキュリティ上の懸念がある場合は、フロントエンドをVPC内に配置することも考えられる。
一般的なケースではフロントエンドはVPC外に配置することが多い。
適切なアーキテクチャを選択するためには、具体的な要件やセキュリティポリシーを考慮し、適切な設計をすることが重要。
VPCにフロントエンドは配置するべきなのか
一般的に、フロントエンド(プレゼンテーション層)はパブリックなインターネットに配置され、ユーザーから直接アクセスできるようになっている。
一方、バックエンド(アプリケーション層)とデータベース(データ層)はセキュリティ上の理由からVPC内に配置されることがよくある。
つまり、三層アーキテクチャを採用している場合でも、フロントエンドはVPC外に配置されることが多い。
フロントエンドはクライアントから直接アクセスされる部分であり、インターネットからのアクセスを受け付ける必要があるため。
一方、バックエンドとデータベースは、セキュリティを高めるためにVPC内へ配置されることが一般的。
IPアドレス
IPアドレスは、パソコンやスマートフォン、タブレットなどの物理機器に割り当てられるインターネット上の住所を表すもの。
VPCは、VPC内で利用できるIPアドレスを管理します。 VPCの管理するIPアドレス範囲を決定するには、CIDR(サイダー)ブロックと呼ばれる表記を用います。CIDRブロックは、プレフィックス表記とも呼ばれ、「/(スラッシュ)」の後ろにプレフィックス長(IPアドレスを0と1だけの2進数で表記する際に、先頭からいくつ1を置くか)の数字で表記されます。 VPCでは、CIDRブロックのサイズは16ビットから28ビットまでの範囲で作成できます。(例:10.0.0.0/16)現在一般的に利用されているIPv4アドレスでは利用できるIPアドレスの数に限りがありますので、需要に応じて適切なサイジングをしましょう。
0.0.0.0/0とは
0.0.0.0/0
はCIDR表記法を用いてIPアドレス範囲を示すもので、インターネットプロトコル(IP)におけるすべての有効なアドレスを表す。
具体的には、IPv4アドレス空間内のすべてのアドレスを含みます。
ここで、0.0.0.0
は起点となるIPアドレスを示し、/0
はサブネットマスクを示します。サブネットマスクの /0
は、サブネットに関連付けられているビット数を示し ています。/0
は0ビットをサブネットに関連付けることを示しており、これによりすべてのIPアドレスがこの範囲へ該当になる。
AWSや他のネットワーク環境でのルートテーブル設定において、0.0.0.0/0
のルートを設定することで以下のような効果を持ちます:
-
すべての外部トラフィックのルーティング: このルートを使用して、ネットワーク外部へのトラフィックを特定のターゲット(たとえばインターネットゲートウェイやNATゲートウェイ)にルーティングすることが可能。
-
デフォルトルート: 通常、
0.0.0.0/0
ルートはデフォルトルートとして使用され、特定のルートが設定されていないすべてのIPアドレス範囲へのトラフィックをハンドリングする。
VPCのCIDR (Classless Inter-Domain Routing) ブロックは、一般的に 10.0.0.0/16
がよく使用される理由
- プライベートなIPアドレス範囲
CIDRブロック
10.0.0.0/8
はプライベートなIPアドレス範囲に属している。 これは、インターネット上の他のデバイスとの衝突を避けるために、プライベ ートネットワーク内でのみ使用することを意味する。 - 大規模なIPアドレス範囲
/16
サブネットは65,536
のIPアドレスを含む広範なアドレススペースを提供する。 これにより、VPC内のリソースに対して十分なIPアドレスを割り当てることができる。 - AWSの推奨設定
Amazon Web Services (AWS) は、デフォルトで新しいVPCを作成する際に、CIDRブロック
10.0.0.0/16
を使用する。 これにより、多くのユーザーが同じCIDRブロックを利用することになり、VPC間でのIPアドレスの競合を防ぐ。 - CIDRの慣例
CIDRブロック
10.0.0.0/16
は、IPv4アドレスの範囲内で一般的に使用される慣例的な選択。 他のプライベートなIPアドレス範囲(たとえば、172.16.0.0/12や192.168.0.0/16)も利用されますが、10.0.0.0/16がもっとも広範で一般的。
ただし、必ずしも 10.0.0.0/16
を使用する必要はありません。VPCのサイズや要件に応じて適切なCIDRブロックを選択することが重要。
複数のVPCを設定する場合は、異なるCIDRブロックを選択してIPアドレスの競合を回避する必要があります。
サブネット
サブネットはネットワークレベルでのセグメンテーションを提供する。
VPCで定めたネットワーク範囲を分割したものを指す。
VPCを建物に例えるとサブネットは部屋に当たります。サブネットは簡単な操作で追加や削除が可能です。
VPCがインターネットへ接続するためには
VPC内のAWSリソースがインターネットに接続するためには、Elastic IPアドレスまたはパブリックIPアドレスが必要。
インターネット接続用のIPアドレスを持つリソースは専用のサブネットに配置し、インターネットと接続しないリソースを区別することがベストプラクティスとなる。
パブリックサブネット
パブリックサブネットとは、インターネットゲートウェイまたはEgress Onlyインターネットゲートウェイを経由してインターネットに接続できるように設定されたサブネット。
Webサーバーなど、インターネットアクセスが必要なリソースを配置する用途に使用する。
プライベートサブネット
プライベートサブネットは、インターネットと接続する経路が 設定されていない データベースなど、インターネットとの通信をさせないリソースを配置する用途に使用します。プライベートサブネットでパッチのダウンロードなど、インターネットへのアクセスが必要となる場合は、NATゲートウェイを経由するパブリックサブネットに設置してインターネットへの接続を実現する。
インターネットゲートウェイやNATゲートウェイを経由してインターネットへアクセスする場合のイメージ
インターネットゲートウェイ
インターネットゲートウェイは、VPCとインターネットを繋げる接続口。
インターネットゲートウェイをVPCにアタッチ(接続)すると、VPC内とインターネットが通信可能になります。インターネットゲートウェイは1つのVPCに対して1つだけ設置できる。
NATゲートウェイ
NATゲートウェイは、ネットワークアドレス変換(Network Address Translation)するサービス。
プライベートサブネットからインターネットへの通信を中継する役割を担うサービスで、プライベートIPアドレスをパブリックIPアドレスに変換する機能を持つ。
NATゲートウェイをパブリックサブネットに配置することで、プライベートサブネットにあるEC2インスタンスなどからインターネットへの接続が可能になります。インターネットからのアクセスは中継しないため、プライベートサブネットのセキュリティは保ったままインターネットアクセスを利用できます。
Elastic Network Interface(ENI)
VPC内部のIPアドレスを持つ仮想的なコンポーネント(部品)
オンプレミスに例えると、LANケーブルなどを差し込む NIC(Network Interface Card)
に該当する。
VPC内に作成されたIPアドレスを必要とするリソースにENIを紐づけることで、通信を可能にする。
ENIを利用する代表的なAWSサービスとして、仮想サーバーの役割を持つEC2があります。
プライベートIPアドレスとパブリックIPアドレス
通常、ENIに紐づくIPアドレスは、VPC内の通信のみ利用できる「プライベートIPアドレス」。
ENIには「パブリックIPアドレス」を付与できるが、IPアドレスはAWSからランダムに割り当てられ、サーバーの停止・削除・再起動などによってAWSに返却されてしまうため同じIPアドレスを使うことはほとんど不可能。
このため、固定されたIPアドレスが必要なユースケースには適していない。
固定されたIPアドレスが必要な場合は、Elastic IPアドレス(後述)を使用する。
Elastic IPアドレス(EIP)
Elastic IPアドレス(以降、EIPと表記)は固定化されたパブリックIPアドレスを割り当てるコンポーネント。
EIPは削除されるまでの間、何度でも再利用できる。
EIPは、Webサーバーなどサービスを運用する上でIPアドレスが変動することを許容できないリソースにアタッチして利用します。 なお、EIPは実行中のインスタンスにアタッチされている間は料金が発生しませんが、アタッチされていない場合や、アタッチしているインスタンスが停止している場合はその時間に応じた料金が請求されま
す。
使っていない間だけ課金される理由は、利用可能なIPアドレスが有限なため、使わずに保持し続けることを防止するための措置。
利用していないEIPはすぐに解放するようにする。