【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
version (2): ログのバージョン番号。AWSが時々アップデートすることがあり、その際にバージョン番号が変わることがあります。
account_id (123456789012): フローログを生成したAWSアカウントのIDです。
interface_id (eni-1235b8ca123456789): ネットワークインターフェイスのID。VPC内でトラフィックをキャプチャするインターフェイスを指します。
srcaddr (172.31.16.139): 送信元のIPアドレス。
dstaddr (172.31.16.21): 宛先のIPアドレス。
srcport (20641): 送信元ポート番号。このポートを通じて送信元デバイスがデータを送信しました。
dstport (443): 宛先ポート番号。一般的にポート443はHTTPS通信に使われます。
protocol (6): IPプロトコルの番号。例えば、6はTCPプロトコルを示します。
packets (10): キャプチャ期間中に送受信されたパケットの総数。
bytes (840): キャプチャ期間中に送受信されたバイト数。
start (1439387260): ログ記録の開始時刻(UNIXエポック秒)。
end (1439387261): ログ記録の終了時刻(UNIXエポック秒)。
action (ACCEPT): アクションタイプ。この場合、「ACCEPT」はトラフィックが許可されたことを意味します。他のオプションには「REJECT」があります。
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サーバーへのアクセス
インターネットユーザーがWebアプリケーションにアクセス:
ユーザーはインターネットを通じて、パブリックサブネット内のWebサーバーに割り当てられたパブリックIPアドレス(または関連付けられたドメイン名)を使用してアクセスします。
IGW(Internet Gateway)を経由:
リクエストはVPCのIGWを通過し、パブリックサブネットにルーティングされます。
Webサーバーがリクエストを受信:
パブリックサブネット内のWebサーバーがユーザーからのリクエストを受け取り、処理を開始します。
Webサーバーからデータベースへのアクセス
Webサーバーからプライベートサブネット内のデータベースへのリクエスト:
処理の一環として、Webサーバーはプライベートサブネット内にあるデータベースにアクセスする必要があります。この通信はVPC内で完結します。
NAT Gateway(NAT GW)は使用されない:
プライベートサブネット内のデータベースへのアクセスは、VPC内のルーティングによって直接行われるため、この段階ではNAT GWは関与しません。
WebサーバーからAWSサービスへのアクセス
VPCエンドポイントを使用したAWSサービスへのアクセス:
WebサーバーがAmazon S3やDynamoDBなどのAWSサービスにアクセスする必要がある場合、VPCエンドポイントを通じてプライベートに通信します。この通信はインターネットを経由しません。
異なるVPC間の通信
VPCピアリングを介した別のVPCとの通信:
アプリケーションが別のVPCにホストされているリソースにアクセスする必要がある場合、VPCピアリング接続を通じてセキュアに通信します。
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/オンプレミス環境
よろしければサポートお願いします!よりいい情報を発信します。