Skip to main content

Amazon VPC(Virtual Private Cloud)

Overview

AWS上にプライベートネットワーク空間を提供するサービス。
オンプレミスでプライベートネットワークを構築する場合は、データセンター内にスイッチやルーターなどのネットワーク機器を用意し、LANケーブルでサーバーやストレージなどを接続するといった作業が必要になる。
VPCを利用すると、ハードウェアや配線を意識せず簡単な操作で迅速にプライベートネットワークを構築できるメリットがある。

Image from Gyazo

また、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 のルートを設定することで以下のような効果を持ちます:

  1. すべての外部トラフィックのルーティング: このルートを使用して、ネットワーク外部へのトラフィックを特定のターゲット(たとえばインターネットゲートウェイやNATゲートウェイ)にルーティングすることが可能。

  2. デフォルトルート: 通常、0.0.0.0/0 ルートはデフォルトルートとして使用され、特定のルートが設定されていないすべてのIPアドレス範囲へのトラフィックをハンドリングする。

VPCのCIDR (Classless Inter-Domain Routing) ブロックは、一般的に 10.0.0.0/16 がよく使用される理由

  1. プライベートなIPアドレス範囲 CIDRブロック 10.0.0.0/8 はプライベートなIPアドレス範囲に属している。 これは、インターネット上の他のデバイスとの衝突を避けるために、プライベートネットワーク内でのみ使用することを意味する。
  2. 大規模なIPアドレス範囲 /16 サブネットは 65,536 のIPアドレスを含む広範なアドレススペースを提供する。 これにより、VPC内のリソースに対して十分なIPアドレスを割り当てることができる。
  3. AWSの推奨設定 Amazon Web Services (AWS) は、デフォルトで新しいVPCを作成する際に、CIDRブロック 10.0.0.0/16 を使用する。 これにより、多くのユーザーが同じCIDRブロックを利用することになり、VPC間でのIPアドレスの競合を防ぐ。
  4. 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ゲートウェイを経由してインターネットへアクセスする場合のイメージ
Image from Gyazo

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

インターネットゲートウェイは、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はすぐに解放するようにする。

仮想プライベートゲートウェイ(VGW)

仮想プライベートゲートウェイ(以降、VGWと表記)とは、VPCがオンプレミス環境との拠点間通信するための接続口で、1つのVPCにつき1つまで設置できる。
VGWをVPCにアタッチすることで、VPNやDirect Connectと接続できる。
接続方法としては、サブネットに設定されたルートテーブルへ手動でルートを追加する「静的ルート追加」または、BGPプロトコルを使用した「動的ルート追加(ルート伝播機能)」が利用できる。

  • インターフェースエンドポイント 有料
  • ゲートウェイエンドポイント 無料 S3とDynamo DBではゲートウェイエンドポイントが利用できる。

VPCと他のVPC外のサービス間の通信を可能にするサービスで、たとえばLambdaとParameter Store間にVPCエンドポイントを作成することで、LambdaからParameter Storeにアクセスが可能になる。

インターネットゲートウェイを経由せずに、VPC内からVPC外にあるAWSサービスへ接続するための仮想的な接続口。
VPCエンドポイントには、ゲートウェイ型とインターフェース型の2種類がある。
それぞれ対象となるサービスが異なります。ゲートウェイ型はその名の通りゲートウェイとして動作するエンドポイントで、VPC内からのプライベートIPアドレスの通信をエンドポイントにルーティングし、エンドポイントを中継してVPC外のAWSサービスにアクセスできます。これに対し、インターフェース型はプライベートサブネット内にENIを利用してエンドポイントが作成されます。

ルートテーブル

サブネット間の通信経路を設定するためににルートテーブルという機能がある。
すべてのサブネットにルートテーブルを作成する必要がある。
※ただし、複数のサブネットが同じルートテーブルを共有することは可能。
※public subnetには共通のルートテーブルを設定するのが慣例。

  • 送信先 どこに接続するかという情報。送信先はIPアドレスを指定する

  • ターゲット どこを経由するかという情報

デフォルトで作成されるルート

VPC作成時に自動で作成されるルートテーブルをメインルートテーブルと呼ぶ。
10.0.0.0/16 local というルートテーブルのエントリは以下の意味を持っている。

VPCにおけるセキュリティ機能

Image from Gyazo

VPCにて利用できるセキュリティ機能として2つある。

  • セキュリティグループ
  • ネットワークACL

それぞれ仮想ファイアウォールとしての機能を持ちますが、制御方法や設定の対象が異なる。

ネットワークACL(Access Control List)

サブネット単位の通信制御に利用される仮想ファイアウォール。
サブネットごとに1つだけ指定する。
ネットワークACLは復路の通信も明示的に許可が必要となるステートレスな制御をするため、クライアントに応じたエフェメラルポートと呼ばれる一時的なアクセスポートを設定する必要がある。

  • ステートレス
    • インバウンドとアウトバウンドの両方の制御ができ、送受信先のCIDRとポートを指定できますが、セキュリティグループの指定はできない
    • ルールには優先順位となる番号が割り振られており、昇順で適用される
    • ネットワークACLは復路の通信も明示的に許可が必要となるステートレスな制御をする
    • 拒否する通信を列挙してそれ以外の通信をすべて許可するブラックリスト方式
    • 設定したルールはサブネット内のすべてのインスタンスに適用される

セキュリティグループ

  • デフォルト
    • すべてのアウトバウンドトラフィックが許可されている
  • ステートフルのため復路は自動で許可される
    • インバウンドを許可したらアウトバウンドが許可される
    • アウトバウンドを許可したらインバウンドが許可される
    • 許可する通信のみを列挙して、それ以外の通信を拒否する制御方式をホワイトリスト方式と呼ぶ
  • 指定
    • 通信プロトコルとポート範囲、送受信先のCIDRまたはセキュリティグループを指定できる

インスタンス(EC2で作成した仮想サーバー)単位の通信制御に利用される仮想ファイアウォール。
インスタンスに1つ以上アタッチして利用する。
インバウンド(インスタンスへの通信)とアウトバウンド(インスタンスからの通信)の両方の セキュリティグループはAWS環境で使用される仮想ファイアウォール、EC2インスタンスやデータベースといったAWSリソースのトラフィックを制御するために使用される。

note

あらかじめ用意されているデフォルトセキュリティグループは、すべての通信を許可する設定になっているため、使用しないことが推奨されています。
このため、利用者はインスタンスが必要とする通信のみを許可するように設定されたセキュリティグループを作成し、アタッチする必要があります。
このように、許可する通信のみを列挙して、それ以外の通信を拒否する制御方式をホワイトリスト方式と呼びます。

セキュリティグループの主な特徴

  1. 状態フルなフィルタリング: セキュリティグループは状態フルであるため、リクエストのトラフィックが許可されると、それに関連するレスポンストラフィックは自動的に許可される。
  2. ルールの基本
    • インバウンドルール: これらのルールは、AWSリソースへのトラフィックの入口を制御。 ここで特定のIPプロトコル、ポート、およびソース/デスティネーションIPアドレスを指定できる。
    • アウトバウンドルール: これらのルールは、AWSリソースからのトラフィックの出口を制御。 ここで特定のIPプロトコル、ポート、およびソース/デスティネーションIPアドレスを指定できる。
  3. デフォルトの動作
    • デフォルトのインバウンドルール: デフォルトでは、インバウンドトラフィックはすべて拒否される。
    • デフォルトのアウトバウンドルール: デフォルトでは、アウトバウンドトラフィックはすべて許可される。
  4. 関連するリソース: セキュリティグループはひとつまたは複数のEC2インスタンスや他のAWSリソースに関連付けることができる。

ネットワークACLとセキュリティグループの違い

参考URL

ネットワークACL(Access Control List)とセキュリティグループは、AWS VPC内でのネットワークトラフィックを制御するための2つの異なるセキュリティ機構です。それぞれの機能と主な違いを以下に示します:

  1. 定義・適用範囲:

    • セキュリティグループ:
      • VPC内のEC2インスタンスや他のリソース(Lambda関数、RDSデータベースなど)に関連付けられる。
      • インバウンドとアウトバウンドのトラフィックを制御するための状態を持ったフィルターとして動作する。
    • ネットワークACL:
      • VPC内のサブネットレベルで動作する。
      • サブネットに入るか出るトラフィックを制御するための状態を持たないフィルターとして動作する。
  2. 状態の有無:

    • セキュリティグループ: 状態を持っている。たとえば、インバウンドルールで受信トラフィックを許可すると、対応するアウトバウンドの応答トラフィックは自動的に許可される。
    • ネットワークACL: 状態を持たない。インバウンドとアウトバウンドのルールは独立しているので、明示的に設定する必要がある。
  3. ルールの適用:

    • セキュリティグループ: すべてのルールは同時に評価され、許可ルールのみを定義できる。拒否ルールは存在しない。
    • ネットワークACL: ルールは番号順に評価され、最初に一致したルールが適用される。許可と拒否の両方のルールを定義できる。
  4. デフォルトの振る舞い:

    • セキュリティグループ: デフォルトではすべてのインバウンドトラフィックを拒否し、すべてのアウトバウンドトラフィックを許可する。
    • ネットワークACL: デフォルトではすべてのインバウンドとアウトバウンドトラフィックを許可する。
  5. エフェメラルポートに関する取り扱い:

    • セキュリティグループ: 応答トラフィックのエフェメラルポートを自動的に管理する。
    • ネットワークACL: 応答トラフィックのエフェメラルポートの範囲を明示的に設定する必要がある。

これらの違いを理解することで、VPC内のリソースに対する適切なアクセス制御を実現するための最良の方法を選択できます。

VPCフローログ

通信の解析やモニタリングに利用する。
VPCフローログは、Elastic Network Interface(ENI)単位で記録される。
VPCフローログの利用シーンとして次のものが挙げられる。

  • トラフィックがインスタンスに到達していない場合のトラブルシューティング
  • 制限が過度に厳しいセキュリティグループルールの診断
  • フローツールを使用してインスタンスに到達しているトラフィックのモニタリング
caution

VPCフローログはパケットフロー情報が取得できるが、パケットの中身までは確認ができない。

AWS PrivateLinkから見る。