VPC・ネットワーク基礎 - AWS
最終更新日: 2026-07-30
TOP(About this memo)) > 一覧(AWS) > VPC・ネットワーク基礎
用語
- リージョン
- アベイラビリティーゾーン
- Amazon VPC
- Virtual Private Cloud(仮想的なネットワーク)
- Amazon EC2
基本構成
サブネット
- Amazon VPCを作成すると、それをいくつかのネットワークに分割して利用する。分割したネットワークをサブネットという。
- 例: VPC(10.0.0.0〜10.0.255.255)でサブネット1(10.0.1.0〜10.0.1.255)、サブネット2(10.0.2.0〜10.0.2.255)
インターネットゲートウェイ
- 一般的にインターネットに接続するルーター。
- Amazon VPCにおいて、あるサブネットをインターネットに接続するには「インターネットゲートウェイ」を使う。
- 「自分のネットワークにインターネット回線を引き込む」というイメージ。
- パブリックサブネット内のEC2インスタンス(パブリックIPが割り当てられたもの)は、プライベートIPとパブリックIPを1対1で変換する(Static NAT)。
- Static NATの場合、NATテーブルには通信前から「プライベートIPとパブリックIPの変換ルール」が定義されているため、EC2から始まる通信であっても、インターネットのクライアントから始まる通信であっても、IPは変換され通信が可能になる。
- そのためインターネットGWの使い道は主に「インターネットからのアクセス」と「インターネットへのアクセス」の両方を実現すること。
- インターネットGWはVPCに配置する。
- パブリックサブネットとは、デフォルトルート(0.0.0.0/0)がIGWに向いているサブネットのこと。
- (参考) https://milestone-of-se.nesuke.com/sv-advanced/aws/internet-nat-gateway/
NAT(Network Address Translation)
- NAT-GWはプライベートIPとパブリックIPを多対1で変換する。
- 複数のEC2インスタンスから発する通信が、各々のプライベートIPでNAT-GWを通過する際、NAT-GWで1つのパブリックIPに変換される。
- ただし、複数のプライベートIPを1つのパブリックIPに変換すると、戻りの通信でどのプライベートIPに変換すればよいか一意に定まらなくなるため、TCP/UDPポート番号も変換することで回避している。
- このようなNAT方式を「動的NAPT(Dynamic NAPT)」と呼ぶ。
- 動的NAPTでは、NATテーブルは初期状態では空。
- プライベートIPが入ってきたタイミングで変換と同時に動的にNATエントリが生成される。
- NATエントリには変換前後のIP:TCP/UDPポート(またはICMP)が含まれるため、インターネットからの戻りの通信はそのエントリを使って元のIP:ポートに戻される。
- つまりインターネットから始まる通信は(NATエントリが無いので)アクセスできない(=セキュリティを高めることができる)。
- これは一般的な家庭用NATルータと同等の動き。
- プライベートIPアドレスのみを持つDBサーバーなどで、yumなどを使ってミドルウェアをインストールする場合などに便利。
- 踏み台サーバーからscpで必要なソフトをコピーする方法もあるが、手間がかかりすぎる。
- NAT-GWだけではインターネットとの接続性が無いため、NAT-GWは「パブリックサブネット」(デフォルトルートのターゲットが「インターネットGW」となっているルーティングテーブルに関連付けられたサブネット)に配置する。
- プライベートサブネット側はルーティングテーブルで0.0.0.0/0をNAT-GWに向ける。
- NATゲートウェイは使わないときは削除しておくのが望ましい。
- 存在するだけで課金されるうえ、セキュリティの観点でも不要な通信経路を持たないほうがよい。
- (参考) https://milestone-of-se.nesuke.com/sv-advanced/aws/internet-nat-gateway/
ルートテーブル
- ネットワークに情報を流すためには「ルーティング情報」と呼ばれる設定が必要。
- 各ルーターがルーティング情報を保有することで、IPアドレスを受け取った際に次にどのルーターへパケットを転送するか判断できる。
- Amazon VPCではこの設定を「ルートテーブル」と呼ぶ。
- VPCを作成した直後にはデフォルトのルートテーブルが作られ、サブネットを作成するとそのデフォルトのルートテーブルが適用される。
パケットフィルタリング
- IPアドレスやポート番号などを基準にパケット通過の可否を決める仕組み。EC2ではセキュリティグループとして設定する。
- ファイアウォールは「通してよいデータだけを通し、それ以外を遮断する」機能を指し、その最も簡単な構造がパケットフィルタリング。
- AWSではデフォルトで、インバウンドとしてポート22(SSH)への全通信(0.0.0.0/0)を許可する設定がある(?)。アウトバウンドはデフォルトで全て許可になっていることが多い(?)。
ENI(Elastic Network Interface)
- EC2上で構築される仮想インスタンスは、仮想環境にあるとはいえ物理的なサーバー上で動く。
- そのため、選定したインスタンスタイプによって設定できるIPアドレスの数に制限が生じる。
- 例: 「a1.medium」はネットワークインターフェースの数は2まで。ネットワークインターフェースあたりのIPv4/IPv6アドレス数は4まで。
- 物理的な環境でネットワークインターフェースを増やすにはサーバーにNIC(ネットワークインターフェースカード)を挿す必要があるが、AWSではENIにMACアドレスやIPアドレス、セキュリティグループなどを設定してネットワークインターフェースを作成し、仮想インスタンスへの取り付け・取り外しができる。
- 仮想インスタンスにはデフォルトでネットワークインターフェース(eth0)が取り付けられており、これは取り外せない。
- 仮想インスタンスに対してネットワーク設定するには、まずデフォルトのネットワークインターフェースに設定する。ネットワークインターフェースの追加が必要な場合はENIを新たに追加する。
- 代表的な用途は管理用ネットワークの作成。
- ほかにも、ENIを追加することでネットワークインターフェースを冗長化することもできる。
- (参考) https://www.fenet.jp/aws/column/aws-beginner/548/
VPCエンドポイント
- NAT Gatewayはトラフィック量に応じた通信料金が発生するため、AWSサービス宛の通信が多い場合はVPCエンドポイントで代替するとコスト削減になる。
- 2種類ある。
- Gatewayエンドポイント: S3とDynamoDBのみ対応。ルートテーブルにエントリを追加するだけで、対象サービスへの通信が自動的にエンドポイント経由になる。追加料金なし。
- Interfaceエンドポイント(AWS PrivateLink): 上記2つ以外の大半のサービスに対応(ECR、Secrets Manager、SSMなど)。ENIとしてサブネットに配置し、セキュリティグループでアクセス制御する。エンドポイントごとに時間課金+データ処理料金が発生する。
- Interfaceエンドポイントは「プライベートDNS」を有効にすると、通常のAWSサービスのDNS名(
xxx.amazonaws.com)への名前解決がそのままエンドポイント経由に切り替わるため、アプリケーション側のコード変更は不要。
- インターネットに出られないプライベートサブネットでECRからイメージをpullしたり、Secrets Managerからシークレットを取得したりする場合(例: NAT Gatewayを使わない構成のFargateタスク)、これらのInterfaceエンドポイントが無いと通信できない点に注意。
構成例
サブネットの3層構成パターン
- Web/APサーバーとDB/キャッシュのようにセキュリティ要件が異なるプライベートリソースが混在する場合、プライベートサブネットをさらに用途別に分けることがある。
- パブリックサブネット: ALBなど、インターネットからの入口。
- プライベートサブネット(アプリ層): ECS/EC2などのアプリケーションサーバー。NAT Gateway経由でインターネットへの通信は可能。
- プライベートサブネット(データ層): RDS/ElastiCacheなど。ルートテーブルにNAT Gatewayへのルートを一切持たせず、インターネットへの経路を完全に断つ。
- データ層のサブネットにはローカルルート(VPC内)のみのルートテーブルを持たせることで、「そもそも外に出られない」状態にできる。アプリ層からしかアクセスできないことをセキュリティグループだけでなくネットワーク経路のレベルでも保証でき、多層防御になる。
具体例
VPC(10.0.0.0/16)
インターネットゲートウェイ
プライベートサブネット(10.0.2.0/24)
RDS(SSH,MySQL) プライベートIP:10.0.2.10
★ルートテーブル
宛先 ネクストホップ
10.0.0.0/16 local
・・・10.0.0.0/16に含まれるIPアドレス宛のパケットであれば、
ローカル(=VPC領域のルーター。普段意識することはないが、AWS内部的にVPC内のサブネットをつなぐ見えないルーターが存在する)へパケットを転送する、という意味。
0.0.0.0/0 NATゲートウェイ
「0.0.0.0/0」はすべてのIPアドレスを表す。つまりデフォルトの転送先(デフォルトゲートウェイ)。
パブリックサブネット(10.0.1.0/24)
EC2(SSH,Apache,WordPress) プライベートIP:10.0.1.10, パブリックIP:xxx.xxx.xxx.xxx
NATゲートウェイ(SSH,NAT): EIP(固定のパブリックIP)
★ルートテーブル
宛先 ネクストホップ
10.0.0.0/16 local
0.0.0.0/0 インターネットゲートウェイ
※ VPC領域のルーターには、自動的に全てのインスタンスと対応するサブネットが登録されていると考えられる(?)。
(例) EC2(パブリックIP:xxx.xxx.xxx.xxx)にSSH(22)で外部からアクセス
外部 -> インターネットゲートウェイ -> VPC領域のルーター -> パブリックサブネット -> EC2(22番ポート)
※ 外部のルーティングテーブルを経由して、AWS内の該当VPCにたどり着く。
パブリックIPからプライベートIPへの変換がどこで行われるかは、AWS利用者側では気にしなくてよい。
RDSからインターネットへのアクセス
RDS -> NATゲートウェイ -> インターネットゲートウェイ
※ NATは片方向の送受信だけを通すため、インターネット側から始まる通信はアクセスできない。
EC2からRDSへのデータベースアクセス(10.0.2.10:3306を指定してアクセス)
EC2 -> VPC領域のルーター -> プライベートサブネット -> RDS(3306)
ロードバランサー
TODO
- ネットワークACL(インバウンド/アウトバウンド) (概要はセキュリティグループも参照)
- タグ
- サブネットの「デフォルトのサブネット」
- サブネットの「パブリックIP自動割り当て」