見出し画像

【AWS】 VPCの解説

VPC(Virtual Private Cloud)

AWSパブリッククラウド内にプライベートな環境を構築するためのサービスです。VPCを利用することで、インターネットから隔離された環境の中でアプリケーションやデータベースなどを安全に運用することができます。VPC内では、仮想ネットワーク、サブネット、IPアドレス範囲、ネットワークゲートウェイなどを自由に設定できます。

IPv4 VPC CIDR ブロック

VPC を作成するときは、VPC の IPv4 CIDR ブロックを指定する必要があります。許可されるブロック サイズは、/16ネットマスク (65,536 個の IP アドレス) と /28ネットマスク (16 個の IP アドレス)の間です。
RFC 1918 の範囲CIDR ブロックの例
10.0.0.0 ~ 10.255.255.255 
172.16.0.0 ~ 172.31.255.255 
192.168.0.0 ~ 192.168.255.255 

サブネット(Subnet)

サブネットワーキングとも呼ばれ、大きなネットワークを小さな複数のネットワークに分割する技術です。この分割により、ネットワークの管理が容易になり、セキュリティを強化し、トラフィックの効率化が図れます。サブネットを用いることで、ネットワーク内のトラフィックをセグメントごとに分けることが可能になり、ネットワークのパフォーマンスと効率を向上させることができます。

サブネット CIDR ブロック

サブネットのIPアドレスはCIDRを使用して表され、VPCのCIDRブロック全体か、そのサブセットを表すことができます。複数のサブネットをVPC内に作成する場合、それぞれのサブネットのCIDRブロックは重複できない。例えば、CIDRブロック10.0.0.0/24でVPCを作成した場合、このブロックを2つのサブネットに分割して、それぞれ128個のIPアドレスを持たせることができます。(10.0.0.0/25(10.0.0.0-10.0.0.127のアドレス範囲)を使用し、二つ目のサブネットが10.0.0.128/25(10.0.0.128-10.0.0.255のアドレス範囲)を使用します。)


パブリックサブネット
パブリックサブネット内に配置されたリソースは、インターネットから直接アクセスすることが可能です。この実現には、パブリックサブネット内のリソースにパブリックIPアドレスが割り当てられている必要があります。また、パブリックサブネットは、インターネットゲートウェイ(IGW)を介してインターネットと通信します。

プライベートサブネット
プライベートサブネット内に配置されたリソースは、インターネットから直接アクセスされることはありません。これらのリソースは、通常、内部的な処理やデータ管理のために使用され、インターネットには非公開のままです。インターネットへのアクセスが必要な場合は、NATゲートウェイ(NAT GW)を使用して、インターネットへのアウトバウンド接続を許可しながら、インバウンド接続をブロックします。


ルートテーブル

ネットワークトラフィックのルーティング情報を保持するテーブルです。VPC内の各サブネットは、1つ以上のルートテーブルに関連付けられており、このテーブルに基づいてトラフィックの送信先が決定されます。

IGW(Internet Gateway)

VPCとインターネットとの間で通信を可能にするゲートウェイです。IGWをVPCにアタッチすることで、VPC内のリソースがインターネットにアクセスしたり、インターネットからアクセスされたりすることを可能にします。つまり、VPC内のリソースがインターネットと双方向の通信を行うための橋渡し役となります。

NAT Gateway(NAT GW)

プライベートサブネット内のインスタンスがインターネットにアウトバウンド接続(送信)を行うことを可能にするサービスです。しかし、インターネットからこれらのインスタンスへの直接的なインバウンド接続(受信)は許可されません。これにより、内部リソースがインターネット上のサービス(例えば、ソフトウェアの更新やAPIへのアクセスなど)にアクセスすることはできますが、外部からの不要なアクセスを防ぐことができます。

VPCピアリング(VPC Peering)

2つのVPC間でインターネットを介さないプライベートなネットワーク接続を確立するサービスです。この接続を通じて、異なるVPCにあるリソースが互いに通信できるようになります。VPCピアリング接続は1対1であり、ピアリングされたVPCを経由して他のVPCへのトランジットトラフィックは許可されず、同一AWSアカウント内のVPC間、または異なるAWSアカウント間のVPCでも設定できます。

VPCエンドポイント(VPC Endpoint)

VPC内のリソースからAWSサービスやVPC外のサービスにプライベートにアクセスするための仕組みです。インターネットゲートウェイやNATゲートウェイ、VPN接続を使用せずにAWSサービス(Amazon S3、DynamoDBなど)へのアクセスを可能にします。
主に2種類のVPCエンドポイント、「インターフェースエンドポイント(AWS PrivateLinkを利用)」と「ゲートウェイエンドポイント(S3やDynamoDBなどの特定のAWSサービス用)」です。

インターフェースエンドポイント(AWS PrivateLink)
AWS PrivateLinkを使用して、VPCからAWSサービスや他のAWSアカウント内のVPCサービスへのプライベート接続を可能にします。

ゲートウェイエンドポイント
Amazon S3やAmazon DynamoDBのような特定のAWSサービスへのVPCからのプライベートアクセスを提供します。これは、VPCのルートテーブルに直接組み込まれる特別なエンドポイントで、特定のサービスへのトラフィックをゲートウェイエンドポイントを通じて直接ルーティングします。

TGW(Transit Gateway)

複数のVPCおよびオンプレミスネットワークを単一のゲートウェイを介して接続することができるサービスです。これにより、異なるVPC間、およびVPCとオンプレミスネットワーク間の通信を簡素化し管理を集約できます。

VPC フローログ

VPC のENIとの間で行き来する IP トラフィックに関する情報をキャプチャできるようにする機能。フローログデータは、Amazon CloudWatch Logs、Amazon S3、Amazon Data Firehose に発行でき、フローログを作成したら、設定したロググループ、バケット、または配信ストリームのフローログレコードを取得して表示できる。

フローログ例

# 承認されたトラフィック
2 123456789010 eni-1235b8ca123456789 172.31.16.139 172.31.16.21 20641 22 6 20 4249 1418530010 1418530070 ACCEPT OK

# 拒否されたトラフィック
2 123456789010 eni-1235b8ca123456789 172.31.9.69 172.31.9.12 49761 3389 6 20 4249 1418530010 1418530070 REJECT OK

# VPC Flog Logs が集約間隔でフローログデータをキャプチャできない場合、内部容量を超えるため、レコードをスキップします。
2 123456789010 eni-11111111aaaaaaaaa - - - - - - - 1431280876 1431280934 - SKIPDATA
  1. version (2): ログのバージョン番号。AWSが時々アップデートすることがあり、その際にバージョン番号が変わることがあります。

  2. account_id (123456789012): フローログを生成したAWSアカウントのIDです。

  3. interface_id (eni-1235b8ca123456789): ネットワークインターフェイスのID。VPC内でトラフィックをキャプチャするインターフェイスを指します。

  4. srcaddr (172.31.16.139): 送信元のIPアドレス。

  5. dstaddr (172.31.16.21): 宛先のIPアドレス。

  6. srcport (20641): 送信元ポート番号。このポートを通じて送信元デバイスがデータを送信しました。

  7. dstport (443): 宛先ポート番号。一般的にポート443はHTTPS通信に使われます。

  8. protocol (6): IPプロトコルの番号。例えば、6はTCPプロトコルを示します。

  9. packets (10): キャプチャ期間中に送受信されたパケットの総数。

  10. bytes (840): キャプチャ期間中に送受信されたバイト数。

  11. start (1439387260): ログ記録の開始時刻(UNIXエポック秒)。

  12. end (1439387261): ログ記録の終了時刻(UNIXエポック秒)。

  13. action (ACCEPT): アクションタイプ。この場合、「ACCEPT」はトラフィックが許可されたことを意味します。他のオプションには「REJECT」があります。

  14. log-status (OK): ログのステータス。

VPCクエリログ

VPC内で発生するDNSクエリの情報を記録する機能。Route 53 Resolverを作成し、Route 53 Resolverのダッシュボードから、「クエリログ」のセクションで新しいロググループを作成するか、既存のCloudWatch Logsグループにログを送信するよう設定すると使用できるようになる。また、適切なIAMロールとポリシーをつける必要がある。

次の DNS クエリをログ記録できます。

  • 指定したVPC で発生するクエリ、およびその DNS クエリに対する応答。

  • インバウンドの Resolver エンドポイントを使用する、オンプレミスのリソースからのクエリ。

  • アウトバウンドリゾルバーのエンドポイントを使用するクエリ。

  • Route 53 Resolver DNS Firewall のルールを使用して、ドメインリストをブロック、許可、またはモニタリングするクエリ。

VPCクエリログの出力例

{
    "version": "1",
    "account_id": "123456789012",
    "region": "us-west-2",
    "vpc_id": "vpc-1a2b3c4d",
    "query_timestamp": "2022-06-01T12:00:00Z",
    "query_name": "example.com",
    "query_type": "A",
    "rCode": "NOERROR",
    "response_code": 0,
    "response_count": 1,
    "responses": ["192.0.2.44"],
    "resolver_ip": "10.0.0.2",
    "resolver_port": "53",
    "protocol": "UDP"
}
  • version: ログフォーマットのバージョンを示します。

  • account_id: クエリを実行したAWSアカウントのIDです。

  • region: クエリが発生したAWSリージョン。

  • vpc_id: クエリが発生したVPCのID。

  • query_timestamp: DNSクエリが行われた日時(UTC)。

  • query_name: DNSクエリで問い合わせられたドメイン名。

  • query_type: DNSクエリのタイプ(例: A、AAAA、MX等)。

  • rCode: DNSレスポンスコードのテキスト表現(例: NOERROR、NXDOMAIN等)。

  • response_code: 数字で表されるDNSレスポンスコード。

  • response_count: レスポンスの数(この場合、1つのIPアドレスが返されています)。

  • responses: DNSクエリに対するレスポンス(IPアドレスなど)。

  • resolver_ip: DNSクエリを解決したDNSリゾルバのIPアドレス。

  • resolver_port: 使用されたDNSリゾルバのポート番号(通常は53)。

  • protocol: 使用されたプロトコル(UDPまたはTCP)。




通信例

WebアプリケーションがAWSのVPC内で運用されている場面を想定し、外部のユーザーからのアクセスからバックエンドのデータベースアクセス、その他のAWSサービスや異なるVPCとの連携までの通信の流れを説明。

外部ユーザーからWebサーバーへのアクセス

  1. インターネットユーザーがWebアプリケーションにアクセス:

    • ユーザーはインターネットを通じて、パブリックサブネット内のWebサーバーに割り当てられたパブリックIPアドレス(または関連付けられたドメイン名)を使用してアクセスします。

  2. IGW(Internet Gateway)を経由:

    • リクエストはVPCのIGWを通過し、パブリックサブネットにルーティングされます。

  3. Webサーバーがリクエストを受信:

    • パブリックサブネット内のWebサーバーがユーザーからのリクエストを受け取り、処理を開始します。

Webサーバーからデータベースへのアクセス

  1. Webサーバーからプライベートサブネット内のデータベースへのリクエスト:

    • 処理の一環として、Webサーバーはプライベートサブネット内にあるデータベースにアクセスする必要があります。この通信はVPC内で完結します。

  2. NAT Gateway(NAT GW)は使用されない:

    • プライベートサブネット内のデータベースへのアクセスは、VPC内のルーティングによって直接行われるため、この段階ではNAT GWは関与しません。

WebサーバーからAWSサービスへのアクセス

  1. VPCエンドポイントを使用したAWSサービスへのアクセス:

    • WebサーバーがAmazon S3やDynamoDBなどのAWSサービスにアクセスする必要がある場合、VPCエンドポイントを通じてプライベートに通信します。この通信はインターネットを経由しません。

異なるVPC間の通信

  1. VPCピアリングを介した別のVPCとの通信:

    • アプリケーションが別のVPCにホストされているリソースにアクセスする必要がある場合、VPCピアリング接続を通じてセキュアに通信します。

  2. TGW(Transit Gateway)を介した複数VPCやオンプレミス環境との通信:

    • より複雑なネットワーク構成の場合、TGWを利用して複数のVPCやオンプレミス環境との間で効率的に通信を行います。

インターネットユーザー
      |
      v
IGW(Internet Gateway)
      |
      v
パブリックサブネット (Webサーバー)
      |
      +-----> VPCエンドポイント ----> AWSサービス(S3, DynamoDBなど)
      |
      v
プライベートサブネット (データベースサーバー)
      |
      v
NAT Gateway (インターネットへのアウトバウンドアクセス)
      |
      v
インターネット (アップデートや外部APIへのアクセス)
      |
      v
VPCピアリング/VPCエンドポイント/TGW
      |
      v
他のVPC/オンプレミス環境




















よろしければサポートお願いします!よりいい情報を発信します。