VPCとは?
- AWS上に構築する仮想ネットワーク
- データセンターのネットワークをクラウドに再現できる
- サブネット、ルーティング、セキュリティグループなどを設計可能
- 1アカウントにつき複数VPCを作成可能
VPCとサブネット
- VPC = CIDRブロック(例: 10.0.0.0/16)で定義するネットワーク空間
- サブネット = VPC内の小さなネットワーク単位(例: 10.0.1.0/24)
- パブリックサブネット = インターネットゲートウェイ経由で外部アクセス可能
- プライベートサブネット = インターネットから直接アクセス不可
- AZごとにサブネットを分けるのがベストプラクティス
AWSにおけるサブネットの注意点
- CIDRで表されている範囲のIPアドレスの中に使えない(すでに予約されいる)ものがある
- 以下5つのIPアドレスはインスタンスに割り当て不可
- 例:10.0.0.0/24の場合
- 10.0.0.0:ネットワークアドレス
- 10.0.0.1:VPCルータ用
- 10.0.0.2:AWSが提供するDNSマッピング用
- 10.0.0.3:AWSが将来使う用
- 10.0.0.255:ネットワークのブロードキャストアドレス
- 32-24=8, 2^8=256, 256-5=251個使える
- 例:10.0.0.0/24の場合
- CIDRについて
プライベートIPとパブリックIPアドレスの範囲
- IANA (Internet Assigned Numbers Authority)がIPアドレスを管理している
- この国のIP範囲はここまで、あの国はここまで
- プライベートIPでは、特定の値のみ使うことが可能
- 10.0.0.0/8(10.0.0.0~10.255.255.255):大規模ネットワーク向け
- 172.16.0.0/12(172.16.0.0~172.31.255.255):中規模向け、AWS VPCのデフォルト
- 192.168.0.0/16(192.168.0.0~192.168.255.255):社内ネットワークなど
- 上記以外の全てがパブリックIPアドレス
Bastion Host(踏み台サーバ)
- パブリックサブネットにあり、プライベートサブネット内のインスタンスにアクセスするためのもの
- セキュリティ強化のため接続可能なIPは制限しておく
ルーティング
インターネットゲートウェイ (IGW)
- VPCをインターネットに接続、1つのVPCに1つのIGW
ルートテーブル
- サブネットの通信経路を制御
- パブリックサブネット用、プライベートサブネット用それぞれで1つずつ作成
- ※パブリックサブネット2, プライベートサブネット2でもルートテーブルはパブリックサブネット用1, プライベートサブネット用1
- ルートとして、通信をIGWに送信するよう設定するとパブリックサブネットとなる
-
10.0.0.0/16 local※指定範囲プライベートIPの場合、パブリックサブネット内へ -
0.0.0.0/0 IGW※上記以外の全ての通信をIGWへ
-
- プライベートサブネット内のインスタンスがインターネットと通信したい場合、ルートとして、通信をNATゲートウェイに送信するよう設定する
-
10.0.0.0/16 local※指定範囲プライベートIPの場合、プライベートサブネット内へ -
0.0.0.0/0 NATGW※上記以外の全ての通信をNATゲートウェイへ
-
- ルートテーブル + IGWでインターネットに接続できる
NATゲートウェイ / NATインスタンス
- プライベートサブネットからのアウトバウンド通信を可能にする
- 外部からの通信は受け付けない(非対称)
- 1つのAZに1つ
- パブリックサブネットに設置
セキュリティ制御
セキュリティグループ (SG)
- インスタンス単位のファイアウォール
- ステートフル(戻り通信は自動で許可)
- デフォルトで全拒否(ルールを追加して許可)
ネットワークアクセスコントロールリスト (NACL)
- サブネット単位のファイアウォール
- ステートレス(戻り通信も明示的に許可が必要)
- デフォルトで全許可(ルールを追加して制御)
エフェメラルポート
- クライアントがサーバーと通信するとき、一時的に自動割り当てられる送信元ポート番号
- 例えば:
- クライアント → サーバー(HTTP: 80)にアクセスするとき
- クライアントは 1024〜65535の範囲 からランダムにポートを選んで使う
- NACLがステートレスなので「戻り(インバウンド)のエフェメラルポートも許可」しないと通信が成立しない
well-knownポート
- 22:SSH(Secure Shell)-Linuxマシンに遠隔で安全にログイン
- 21:FTP-ファイル共有のためにファイルをアップロード
- 22:SFTP-SSHでファイルをアップロード
- 80:HTTP-安全でないWebサイトへのアクセス
- 443:HTTPS-安全なWebサイトへのアクセス
- 3389:RDP(Remote Desktop Protocol)-windowsインスタンスにログイン
VPC接続
VPCエンドポイント
- S3やDynamoDBなどのAWSサービスに プライベートネットワーク経由 でアクセス可(インターネットに出ずにアクセスできる)
- 2種類ある:
- Gateway型
- S3, DynamoDB専用
- ルートテーブルの作成必要
- 無料
- Interface型
- ENIを使って接続
- 有料
- Gateway型
site to site VPN
- オンプレ ↔ VPC をVPNで接続
- インターネット経由なので簡単・安価だが遅延/帯域制限あり
- Virtual Private Gateway (VGW)
- オンプレミス環境とインターネットVPNを接続する際にVPC側で使用
- Customer Gateway (CGW)
- オンプレミス環境とインターネットVPNを接続する際にオンプレミス側で使用
Direct Connect(DX)
- オンプレ ↔ AWS を 専用線 で接続
- 導入に数週間〜数か月かかる(回線工事必要)
- コストが高い(回線費用+DX利用料)
- Virtual Private Gateway (VGW)の設定必要
- 複数のVPCに接続したい場合は、Direct Connect Gatewayを使用する必要あり
AWS PrivateLink
- VPC間やオンプレ環境から、AWSサービスや他VPC内のサービスへプライベートIPアドレスで安全に接続できる仕組み
- 基盤となるのは VPCエンドポイント (Interface型)
- 「サービス公開側はNLB、利用側はENI」 で繋がる
- 例: 「VPC Aで動く自社の決済APIを、VPC Bのアプリから呼び出したい」
VPC Peering
- 2つのVPCを直接接続(プライベート接続)
- トランジティブ接続不可(A-B, B-C接続してもA-Cには行けない)
- 各VPCのサブネットのルートテーブルに対象VPCのCIDR登録する必要あり
- 異なるリージョン、アカウント間で動作
Transit Gateway
- 複数VPCやオンプレを一元接続するハブ的存在
- ルートテーブル必要
- Direct Connect Gatewayにも対応
AWS CloudHub
- 複数のオンプレ拠点を Site-to-Site VPN経由でAWS上で中継
| 項目 | VPC Peering | Transit Gateway | PrivateLink |
|---|---|---|---|
| 通信範囲 | VPC全体の双方向 | 複数VPC/オンプレ集約 | 特定サービス(NLB配下)のみ |
| 経路制御 | ルートテーブル必要 | ルートテーブル必要 | ルート不要、ENIに直接 |
| 利用ケース | VPC間をフルメッシュ接続 | 大規模ハブ&スポーク | サービス単位でセキュア公開 |
VPCのDNS設定
enableDnsSupport
- デフォルト:true
- 意味:
- DNS解決を有効/無効にする
- 無効にすると、VPC内から 「名前解決 → IP」 ができなくなる(例: ec2-xx-xx-xx.compute.amazonaws.com を解決できない)
enableDnsHostnames
- デフォルト:
- デフォルトVPC → true
- カスタムVPC → false
- 意味:
- VPC内で起動するEC2インスタンスに パブリックDNSホスト名を割り当てるか を制御する
- true → インスタンスに ec2-xx-xx-xx.compute.amazonaws.com 形式の名前がつく
- false → DNS名は割り当てられず、IPアドレスでしかアクセスできない
VPCフローログ
- VPC内で流れるIPトラフィックをキャプチャしてログ化するサービス
- ログには「どのトラフィックを許可したか / 拒否したか」が記録される
- パケットの中身(ペイロード)は記録されない、あくまで「メタ情報のログ」だけ
- ログの出力先は以下から選択できる
- Amazon CloudWatch Logs
- Amazon S3
- Athenaで分析可、攻撃の特定などに
- ログフォーマット
- srcaddr(送信元IP)
- dstaddr(宛先IP)
- srcport / dstport(送受信ポート)
- protocol(TCP/UDPなど)
- action(accept / reject) ← 超重要!
- bytes / packets(通信量)
ユースケース
- S3にプライベートサブネットから安全にアクセスしたい
- VPCエンドポイント(Gateway型)を利用
- 複数VPCを接続したいが、フルメッシュは避けたい
- Transit Gateway
- EC2をパブリックサブネットに配置して外部公開
- IGWが必要、かつパブリックIPまたはElastic IPを付与
- プライベートサブネットのEC2が外部に出たい
- NAT Gateway
- セキュリティ制御をサブネット単位で厳格にしたい
- NACL(ステートレス)を利用
