AWS VPC 入門(上):單一 VPC 路由、防火牆與帳單

建置雲端基礎架構時,VPC(Virtual Private Cloud)常被當作理所當然的背景設定:拉幾張子網路、掛個 NAT Gateway、設定幾條安全群組規則,系統就能運作。直到遇上「封包連不到」或「月底帳單暴增」,才發現路由、防火牆與 DNS 的設定彼此牽動,很難從單一環節找出問題。

VPC 內繁雜的元件看似零散,本質上其實只在回答三個核心問題:

  1. 位址:資源的 IP 是什麼、從哪段空間切分出來?(VPC CIDR、Subnet)
  2. 路徑:封包該往哪裡送?(Route Table、Internet Gateway、NAT Gateway、VPC Endpoint)
  3. 許可:封包是否允許通過?(Security Group、Network ACL)

橫跨這三個問題的,還有兩條隱形支線:名稱(DNS 解析決定封包走哪條路)與帳單(每條路徑的資料傳輸定價)。本文作為系列上篇,將徹底拆解單一 VPC 的運作邏輯,建立清晰的心智模型與故障排除體系。

 +----------------------------------------------------+
 |                   Single AWS VPC                   |
 |                                                    |
 | +------------------------------------------------+ |
 | | Address: CIDR & Subnets (AZ-a / AZ-b)          | |
 | +------------------------------------------------+ |
 |                         |                          |
 |                         v                          |
 | +------------------------------------------------+ |
 | | DNS: Route 53 Resolver (Base + 2)              | |
 | +------------------------------------------------+ |
 |                         |                          |
 |                         v                          |
 | +------------------------------------------------+ |
 | | Routing: Route Table (LPM) -> IGW / NAT / VPCE | |
 | +------------------------------------------------+ |
 |                         |                          |
 |                         v                          |
 | +------------------------------------------------+ |
 | | Permission: Security Groups & Network ACLs     | |
 | +------------------------------------------------+ |
 |                         |                          |
 |                         v                          |
 | +------------------------------------------------+ |
 | | Billing: Data Transfer & Gateway Costs         | |
 | +------------------------------------------------+ |
 |                                                    |
 +----------------------------------------------------+

一、位址規劃:VPC、CIDR、Subnet 與 AZ

VPC 與 Subnet 的層級邊界

VPC 是區域級(Region)的私有虛擬網路,建立時必須指定主要的 IPv4 CIDR 區段(例如 10.0.0.0/16)。Subnet 則是從 VPC CIDR 劃分出的子網段。每個 Subnet 只能存在於單一可用區(AZ)。

AZ 是彼此獨立供電、網路各自獨立的機房群,單一 AZ 故障不會波及其他 AZ。由於 Subnet 綁定單一 AZ,同一個 Subnet 內的資源也就與該 AZ 同生共死。

因此,跨 AZ 高可用在網路層的前提,是在每個目標 AZ 各建一組功能對應的 Subnet(Public、App、DB 各一),ALB、Auto Scaling Group 與 RDS Multi-AZ 才能把副本分散到不同 AZ。只切 Subnet 而不放備援資源,仍然不算高可用。

 VPC: 10.0.0.0/16 (Region-level)
 +-- AZ-a
 |   +-- Public Subnet:  10.0.0.0/24
 |   +-- App Subnet:     10.0.32.0/19
 |   +-- DB Subnet:      10.0.128.0/24
 +-- AZ-b
     +-- Public Subnet:  10.0.1.0/24
     +-- App Subnet:     10.0.64.0/19
     +-- DB Subnet:      10.0.129.0/24

AWS 規定單一 Subnet 的遮罩範圍介於 /28 至 /16 之間(詳見 Subnet CIDR blocks)。斜線後的數字代表前幾個位元固定為網段,剩下的位元才能分給主機:IPv4 位址共 32 位元,/24 留下 8 位元,即 2⁸ = 256 個位址;/28 只留 4 位元,即 2⁴ = 16 個。

值得注意的是,每個 Subnet 固定保留 5 個 IP:前 4 個與最後 1 個。以 10.0.0.0/24 為例,分別是 .0 網路位址、.1 VPC Router、.2 DNS、.3 保留供未來使用,以及 .255 廣播位址。扣掉這 5 個,/24 實際可用 256 − 5 = 251 個,/28 則只剩 16 − 5 = 11 個。

此外,VPC 內所有具備 IP 的實體(EC2、RDS、Lambda 網卡、Interface Endpoint 等),底層皆為 ENI(Elastic Network Interface)。IP 與安全群組皆綁定於 ENI 上,而非虛擬機器本體。

為什麼位址規劃必須一次到位

在雲端環境中,多數資源設定皆可事後調整,唯獨子網路位址極難變更:Subnet 建立後無法動態擴容,已運作的工作負載更無法無縫更換 IP。

前期規劃不當會帶來三大痛點:

實務建議的初始設定原則為:VPC 至少給予 /16;放置容器等密集計算資源的 Private Subnet 切割 /19 或 /20;僅放置負載平衡器與 NAT 的 Public Subnet 則切 /24 即可。

IPv6 與 Public IPv4 成本考量

自 2024 年 2 月起,AWS 對所有 Public IPv4 位址全面計費(包含使用中的分配位址),us-east-1 費率為每小時 $0.005(單個 IP 每月約 $3.6),詳見 VPC 定價頁。這使過去「每台機器掛 Public IP」的架構產生實質營運成本。

引入 IPv6 是兼顧連線與成本的解法。VPC 可啟用 Dual-stack 模式分配全球可路由的 IPv6 位址。

針對 IPv6 的「只出不進」需求,改由 Egress-only Internet Gateway 負責:它只允許由內向外建立連線,本身不做 NAT。IPv6 位址數量充裕,每個實例都能分到全球唯一的位址,直接以自己的位址對外通訊,不必像 IPv4 那樣轉換。


二、路由機制:Route Table、IGW 與 NAT Gateway

Route Table 比對原則:最長前綴匹配

每個 Subnet 必須關聯一張 Route Table。表中必定存在一條由系統維護的 local 路由(例如 10.0.0.0/16 → local),確保 VPC 內所有 Subnet 彼此互通。

當封包目的地同時符合多條路由規則時,VPC Router 依循 Longest Prefix Match(最長前綴匹配) 原則轉發。「前綴」就是 CIDR 斜線後的數字,數字越大,涵蓋的範圍越小、越精確;路由器會挑範圍最精確的那條規則。

因此,10.0.0.0/16 → local 永遠優先於 0.0.0.0/0 → nat-xxx;針對特定服務的 Prefix List 路由也會優先於預設網際網路出口。

 Packet Destination: 10.0.32.15
 +-- Rule 1: 0.0.0.0/0       -> nat-0123456789abcdef0
     (Prefix /0)
 +-- Rule 2: 10.0.0.0/16     -> local
     (Prefix /16, Matches & Wins ✅)

 Packet Destination: 52.216.0.1 (AWS S3 IP in us-east-1)
 +-- Rule 1: 0.0.0.0/0       -> nat-0123456789abcdef0
     (Prefix /0)
 +-- Rule 2: pl-63a5400a     -> vpce-0123456789abcdef
     (Contains 52.216.0.0/15, Matches & Wins ✅)

Internet Gateway

Internet Gateway(IGW)是 VPC 與網際網路間的完全託管閘道,具備**水平擴充與高可用**特性,無頻寬瓶頸與單點故障問題。

IGW 扮演兩個角色:

  1. 作為 Route Table 中網際網路流量的出口目標。
  2. 在 EC2 的私有 IP 與其對應的 Public IPv4 間執行一對一網路位址轉換(1:1 NAT)。實例的作業系統內部永遠只看得到私有 IP,外部轉換全由 IGW 處理。

「Public Subnet」本質上是一條路由

Subnet 本身並無內建的「公有」屬性開關。決定一個 Subnet 是否為 Public 的唯一條件,是其關聯的 Route Table 是否包含導向 Internet Gateway 的預設路由(0.0.0.0/0 → igw-xxx)。

Subnet 設定中的「自動指派公有 IPv4」,僅決定新啟動的實例(Instance)是否獲配 Public IP;若具備 Public IP 但所屬路由表缺乏 IGW 條目,對外連線依然無法建立。

未手動關聯 Route Table 的 Subnet,會自動繼承 VPC 的 Main Route Table。若有人誤在 Main Route Table 加入 IGW 路由,後續所有未明確關聯的 Subnet 都會默默暴露為 Public。

標準安全作法是保持 Main Route Table 僅有預設 local 路由,其餘 Subnet 一律明確綁定自訂 Route Table。

NAT Gateway:Zonal vs Regional

Private Subnet 內的應用程式經常需要單向存取外網(如拉取套件或呼叫外部 API),同時禁止外部連線直接打入。NAT Gateway 透過多對一的 SNAT 機制實現此需求。

傳統 NAT Gateway 為 Zonal(可用區級) 架構,必須部署在特定 AZ 的 Public Subnet 並綁定 Elastic IP。這衍生經典的架構取捨:

部署模式可用性考量成本與傳輸影響
每 AZ 獨立部署 NAT單一 AZ 故障不影響其他 AZ 出網需支付多個 NAT 每小時基本租費
全 VPC 共用單一 NAT該 AZ 發生故障時,全 VPC 立即斷網省下每小時基本租費,但跨 AZ 流量需付雙向傳輸費(來回合計 $0.02/GB)

2025 年 11 月,AWS 正式推出 Regional NAT Gateway,大幅緩解了這個架構痛點:

Regional NAT 的小時費率與 Zonal 相同(每個 AZ 每小時 $0.045),其價值在於消除 Public Subnet 的設定風險並簡化維運。需注意:新 AZ 擴充需約 60 分鐘暖機時間,且目前尚不支援 Private NAT 情境。


三、存取許可:Security Group 與 Network ACL

設計理念與機制對比

Security Group(安全群組)與 Network ACL(網路存取控制清單)共同構成 VPC 的防禦縱深,兩者在運作層級與狀態管理上有本質差異:

比較面向Security Group (SG)Network ACL (NACL)
掛載位置ENI 虛擬網卡層級Subnet 子網路邊界層級
連線狀態Stateful(具狀態):進站允許則回應自動放行Stateless(無狀態):進站與出站封包各自獨立檢查
規則類型僅支援 Allow支援 Allow 與 Deny
評估機制所有規則取聯集,命中任一條即放行依 Rule Number 由小到大排序,首條命中即決定
預設行為新增 SG 預設無 inbound、放行所有 outbound預設 NACL 全開;自訂 NACL 預設全擋

Stateless 的代價:Ephemeral Ports

由於 NACL 具備無狀態(Stateless)特性,若在 inbound 開放 TCP 443,當外部客戶端由隨機高位連接埠(如 52311)連入時,進站封包可順利通過;但伺服器回傳給 52311 的回應封包,若 outbound 未開放對應範圍,回應將在 Subnet 邊界被直接丟棄。

因此,使用自訂 NACL 時,outbound 必須顯式開放 Ephemeral Ports(臨時連接埠,實務常開 1024–65535)。

SG 參照 SG:解耦 IP 的多層架構

在多層式 Web 架構中,SG 規則的來源不應綁死 CIDR,而應直接填入來源端 SG ID。

 [sg-alb]  Inbound: 443 from 0.0.0.0/0
    |
    v (HTTP 8080)
 [sg-app]  Inbound: 8080 from sg-alb
    |
    v (PostgreSQL 5432)
 [sg-db]   Inbound: 5432 from sg-app

此寫法的優勢在於:無論 Auto Scaling 新增多少 App 實例,只要掛載 sg-app,便自動取得連線 DB 的權限;且外部流量完全無法繞過 ALB 直連後端服務。

何時需要介入自訂 NACL

絕大多數情境下,維持 NACL 預設全開、以 SG 作為主要防線即可。只有以下兩種情境值得額外設定 NACL:

  1. 緊急封鎖特定來源:SG 只能設定 Allow,若要擋下特定惡意 IP 或 CIDR,可在 NACL 加一條編號較小的 Deny 規則,使其優先生效。不過 NACL 每個方向預設僅 20 條規則,封鎖名單一長就不敷使用;流量經由 ALB 或 CloudFront 進入時,AWS WAF 的 IP 封鎖清單通常是更合適的選擇。
  2. 防禦縱深與分權管理:在 DB Subnet 邊界只放行 App Subnet 網段,即使有人誤將 sg-db 開放為 0.0.0.0/0,Subnet 層仍能擋下外部流量。部分合規稽核也要求這道與 SG 分開管理的第二防線。代價是必須同步維護雙向規則與 Ephemeral Ports。

四、不出網存取 AWS 服務:VPC Endpoint

當 Private Subnet 內的應用程式需要呼叫 S3、DynamoDB、SQS 或 ECR 等託管服務時,預設會經由 NAT Gateway 連向服務的公開端點。這段流量其實不會離開 AWS 網路:依 VPC FAQ,AWS 內部往公開服務端點的封包都留在 AWS 全球骨幹上。

真正的代價有二:每 GB 都要付 NAT 資料處理費,而且 Subnet 必須具備出網路徑才能使用這些服務。

VPC Endpoint 讓流量不經 NAT、直接抵達服務,同時解決這兩個問題。它分為兩種,運作原理截然不同:Gateway Endpoint 在路由表加一條路由,把往特定服務的流量攔截下來;Interface Endpoint 則在 Subnet 內放一張網卡,讓服務在 VPC 內擁有私有 IP,其底層技術稱為 PrivateLink。

規格特性Gateway EndpointInterface Endpoint (PrivateLink)
支援服務僅限 S3 與 DynamoDB絕大多數 AWS 託管服務、S3 及第三方端點
實作方式Route Table 新增 Prefix List 路由(pl-xxx → vpce-xxx)在 Subnet 內建立專屬 ENI 獲取私有 IP
計費模型完全免費每 AZ 每小時 $0.01 + 每 GB 傳輸費 $0.01
安全控制僅能掛載 Endpoint Policy可完整綁定 Security Group 與 Endpoint Policy
混合雲支援不支援地端經 VPN/DX 直接存取支援(本質為 VPC 內的一張私有網卡 IP)

S3 Gateway Endpoint 的攔截機制

S3 沒有 VPC 內部私有 IP。應用程式呼叫 S3 時,DNS 依然解析為公開 IP(例如 52.216.x.x)。

之所以能透明繞過 NAT,全靠路由表的最長前綴匹配(LPM):AWS 在路由表中自動加入一條以 S3 Prefix List 為目的地的路由(ID 依區域而異,格式為 pl-xxxxxxxx),這份清單收錄該區域 S3 使用的多段 CIDR(例如 52.216.0.0/15)。

這些網段都比預設路由 0.0.0.0/0 更精確,出站封包因此直接被轉入 Gateway Endpoint,完全不需要修改 SDK 或 DNS。

Interface Endpoint 的接管機制:Private DNS

Interface Endpoint 靠 Private DNS 接管流量。啟用後,VPC 內的 DNS 會把 sqs.us-east-1.amazonaws.com 這類服務網址直接解析成該 Endpoint 的私有 IP,應用程式與 SDK 無須修改任何 Endpoint URL,流量就會自動改走 PrivateLink。前提是 VPC 的兩項 DNS 屬性都已開啟(見第五節)。

選型準則與成本試算

$0.01×730×3≈$21.9\$0.01 \times 730 \times 3 \approx \$21.9

若同時開啟 10 個服務的 PrivateLink,每月光是固定費用就達 $219。只有在資料傳輸量極大(走 NAT 費用遠高於 $21.9)或資安要求「網路環境絕對零出口」時,才建議大量導入 Interface Endpoint。


五、VPC 內的 DNS 架構與陷阱

Route 53 Resolver(AmazonProvidedDNS)

每個 VPC 皆內建專屬 DNS 解析器(Route 53 Resolver),其 IPv4 位址固定為 VPC 主要 CIDR 的起始位址再加 2(例如 10.0.0.0/16 的 DNS 即為 10.0.0.2),亦可透過全域 Link-local 位址 169.254.169.253 存取。這也是 Subnet 保留 .2 位址的核心原因。

關鍵屬性設定與常見陷阱

VPC 具備兩項控制 DNS 行為的關鍵屬性:

屬性名稱功能定義預設狀態
enableDnsSupport是否啟用 VPC 內建 Amazon DNS 解析服務true
enableDnsHostnames具備 Public IP 的實例是否自動取得公開 DNS 名稱Default VPC 為 true;自建 VPC 預設為 false

IMPORTANT

若要讓 Private Hosted Zone 正常解析,或讓 Interface Endpoint 啟用 Private DNS,上述兩項屬性皆必須手動啟用為 true。以 Terraform 或 AWS CLI 建立自訂 VPC 時最常漏掉 enableDnsHostnames,結果就是「以 IP 連線正常、但網域名稱無法解析」。

另一個陷阱是自訂 DHCP Option Set:若把 DNS 伺服器改指向自建 DNS,實例就不再查詢 AmazonProvidedDNS,除非自建 DNS 轉發回 10.0.0.2,否則 Private Hosted Zone 與 Endpoint 的私有紀錄都查不到。

此外需注意:往 10.0.0.2 的 DNS 查詢流量不會被 SG 或 NACL 阻擋。

不過,存取 Link-local 位址服務(Route 53 Resolver DNS、IMDS、NTP 等)的流量有 1024 PPS(Packets Per Second) 的聚合配額上限,且無法調高;抵達配額時 Resolver 會直接拒絕流量,高並行短連線環境便可能出現 DNS 查詢逾時(i/o timeout),建議在節點層建置本機 DNS 快取(如 NodeLocal DNSCache)。


六、網路帳單:流量與成本結構拆解

以下為 us-east-1 的主要網路傳輸與閘道費率(基準日期 2026-09):

網路計費項目費率標準
NAT Gateway 租費與處理費每 AZ 每小時 $0.045 + 每 GB 資料處理費 $0.045
跨 AZ 傳輸費(Cross-AZ Data Transfer)每 GB $0.01(去程與回程雙向各計一次,合計每 GB $0.02)
同 AZ 內部傳輸免費
Gateway Endpoint免費
Interface Endpoint每 AZ 每小時 $0.01 + 每 GB 資料處理費 $0.01
Public IPv4 使用費每個 IP 每小時 $0.005
Internet 傳出流量(Egress)每月前 100 GB 免費;其後首 10 TB 每 GB $0.09

實戰計費案例:S3 10 TB 存取的路徑對比

假設某 Private Subnet 內的批次運算叢集每月需自 S3 讀取 10 TB 資料,不同架構路徑的費用差異極大:

單一架構決策每月費用相差將近 500 美元。


七、進階專題:EKS 與 VPC CNI 的 IP 耗盡陷阱

VPC-Native CNI 的架構代價

AWS EKS 預設採用 AWS VPC CNI 外掛。其設計哲學為 VPC-Native:每個 Kubernetes Pod 皆直接獲配 VPC CIDR 內的真實私有 IP。

好處是 Pod 享有 VPC 內的一等公民地位,無須經由 Overlay 封裝,可直接套用 SG、Flow Logs 與 Direct Connect 路由;代價則是 Pod 的增長會急遽消耗 Subnet 的 IP 位址池。

在預設 Secondary IP 模式下,每個 EC2 機型能掛載的 ENI 數量與每張 ENI 能分配的 IPv4 數量存在硬體上限(例如 m5.large 最多掛 3 張 ENI、每張 10 個 IP;每張 ENI 有 1 個主 IP 保留給節點自身,Pod 實際可用 3 × 9 = 27 個,再加上 VPC CNI 與 kube-proxy 兩個不占用 IP 的系統元件,依 max pods 公式單節點上限為 29 個 Pod)。

更關鍵的是 Warm Pool 預熱機制:CNI 為了讓 Pod 啟動得快,會預先替節點多保留一些 IP,即使 Pod 還沒建立,這些 IP 也已經從 Subnet 預先扣走。

IP 耗盡症狀

當叢集節點擴充至一定數量,Subnet 容量見底時,將出現典型症狀:

一個 /24 Subnet(僅 251 個可用 IP)在數十個節點加上 Warm Pool 預扣下,可能在數分鐘內消耗殆盡。

三大緩解機制與選型建議

緩解架構實作機制適用情境與代價
Prefix DelegationENI 改以 /28 前綴(16 個 IP)整批掛載大幅提升單節點 Pod 密度;但要求 Subnet 具備連續區塊,空間破碎時可能引發 InsufficientCidrBlocks
Secondary CIDR + Custom NetworkingVPC 附加 Secondary CIDR(如 100.64.0.0/10),專門分配給 Pod將 Pod 流量與 Node 網段在網路層獨立切分;但設定較繁瑣,且單節點可容納 Pod 數量可能略微下降
IPv6 EKS Cluster建立原生 IPv6 Kubernetes 叢集從根本消除 IPv4 稀缺問題;但需全套基礎架構與外部相依皆支援 IPv6

實務上的選擇順序:

  1. 新叢集若周邊相依都支援 IPv6,直接建立 IPv6 叢集最一勞永逸,但 IP 家族只能在建立叢集時決定,事後無法切換。
  2. 仍需 IPv4 的叢集,先啟用 Prefix Delegation,並以 Subnet CIDR Reservation 預留連續區塊,避免空間破碎。
  3. 只有在主 CIDR 已無空間、或企業可路由 IP 受限時,才動用 Secondary CIDR + Custom Networking。

八、觀測與故障排除工具:Flow Logs 與 Reachability Analyzer

查修 VPC 網路問題時,AWS 提供兩大觀測工具,分別代表「實際流量」與「靜態路徑」:


九、實戰整合:三層式架構完整封包追蹤與故障排除

架構規格定義

設定雙可用區的 VPC(10.0.0.0/16):

 +--------------------------------------------+
 | VPC: 10.0.0.0/16                           |
 |                                            |
 | [ Public Tier ]                            |
 | AZ-a: 10.0.0.0/24 | AZ-b: 10.0.1.0/24      |
 | Routes: local + 0.0.0.0/0 -> IGW           |
 | SG (sg-alb): Inbound 443 from 0.0.0.0/0    |
 |                                            |
 | [ App Tier ]                               |
 | AZ-a: 10.0.32.0/19 | AZ-b: 10.0.64.0/19    |
 | Routes: local + 0.0.0.0/0 -> Regional NAT  |
 |         + S3 Prefix -> Gateway Endpoint    |
 | SG (sg-app): Inbound 8080 from sg-alb      |
 |                                            |
 | [ DB Tier ]                                |
 | AZ-a: 10.0.128.0/24 | AZ-b: 10.0.129.0/24  |
 | Routes: local only                         |
 | SG (sg-db): Inbound 5432 from sg-app       |
 +--------------------------------------------+

封包逐跳(Hop-by-Hop)流程拆解

 User (Internet)
   | (1) DNS lookup -> ALB Public IP
   v
 [ IGW ] -> 1:1 NAT -> Public Subnet (sg-alb allows 443)
   |
   | (2) Local Route
   |     -> App Subnet (sg-app allows 8080 from sg-alb)
   v
 [ App Instance ]
   +-- (3) Local Route
   |     -> RDS Private IP (sg-db allows 5432 from sg-app)
   +-- (4) S3 Prefix List Route
   |     -> S3 Gateway Endpoint (Bypasses NAT, $0)
   +-- (5) Default Route (0.0.0.0/0)
         -> Regional NAT -> IGW -> External API
  1. 第一跳(客戶端 → ALB):使用者查詢 DNS 獲取 ALB 公開 IP,封包抵達 IGW 轉換為 ALB 節點私有 IP,進入 Public Subnet,sg-alb 放行 443 請求。
  2. 第二跳(ALB → App):ALB 節點以私有 IP 為來源連向 App 實例私有 IP,比對 VPC 內部 local 路由。sg-app 確認來源掛載 sg-alb,放行 8080。
  3. 第三跳(App → RDS):App 向內建 DNS(10.0.0.2)解析 RDS 網址取得 DB 私有 IP,走 local 路由抵達 DB Subnet,sg-db 放行 5432。若 App 與 RDS 分處不同 AZ,此段就會產生跨 AZ 傳輸費。
  4. 第四跳(App → S3):App 解析 S3 公有網址,Route Table 命中 S3 Prefix List 具體路由,封包直接注入 S3 Gateway Endpoint,不經 NAT、不計傳輸費。
  5. 第五跳(App → 外部 API):目的地為網際網路 IP,命中 0.0.0.0/0 路由轉發至 Regional NAT Gateway,SNAT 為公有出口 IP 後經 IGW 送出。

常見症狀診斷速查表

異常症狀潛在根因元件建議查修步驟
Public Subnet 實例無法連網路由表遺漏 0.0.0.0/0 → IGW,或 Subnet 誤用 Main Route Table檢查 Subnet 關聯之 Route Table;確認實例具備 Public IP
Private Subnet 無法安裝套件或呼叫外網NAT 路由丟失,或 NAT 所在 Subnet/AZ 出口異常查驗 Private Route Table 之 0.0.0.0/0 目標;使用 Reachability Analyzer 測試 ENI 至外部 IP
ALB Target Group 健康檢查持續失敗sg-app 未放行來自 sg-alb 的 Health Check Port比對 Target Group 設定之檢查連接埠與 sg-app Inbound 規則
連線一律逾時,或僅部分客戶端逾時自訂 NACL 未放行 Ephemeral Ports,或放行範圍過窄(如只開 32768–61000,擋掉使用其他範圍的客戶端)檢視 VPC Flow Logs 是否出現 Outbound REJECT;補齊 NACL 1024–65535 規則
IP 可連通,但無法解析 Private Hosted ZonePrivate Hosted Zone 未關聯此 VPC,或 VPC 屬性 enableDnsHostnames 處於 false在 Route 53 確認 Hosted Zone 已關聯此 VPC;執行 aws ec2 describe-vpc-attribute 檢查屬性;利用 dig 確認查詢是否打至 10.0.0.2
新增 Interface Endpoint 後流量仍走 NAT未啟用 Private DNS,服務網址仍解析為公開 IP在實例上執行 dig <service-endpoint>,確認回傳是否為 VPC 內私有 IP
NAT Gateway 帳單無預警暴增S3 或 ECR 等高流量存取未建立專屬 VPC Endpoint檢視 Cost Explorer NatGateway-Bytes;比對 Flow Logs 找出高流量目的地
EKS Pod 卡在 ContainerCreatingSubnet 可用 IP 耗盡,或 Prefix Delegation 遭遇空間破碎查詢 Subnet 剩餘可用 IP 數;檢查 CNI Log 是否出現 InsufficientCidrBlocks
應用程式存取 RDS 延遲偏高且帳單出現跨 AZ 傳輸費App 與 RDS 主節點分處不同 AZ查驗實例與 RDS 的 AZ 分佈;在 Cost Explorer 檢視 DataTransfer-Regional-Bytes

結語與下篇預告

掌握單一 VPC 的精髓,在於建立收斂的心智模型:由 CIDR 與 Subnet 劃定空間、Route Table 決定路徑、Security Group 與 NACL 執行過濾、DNS 導引方向,而每條路徑直接決定了帳單結構。

故障排除時依「名稱 → 路徑 → 許可」循序定位,搭配 Flow Logs 與 Reachability Analyzer,絕大多數單一網路拓撲的疑難雜症皆能迎刃而解。

然而,單一 VPC 僅是起點。跨入多帳號、多 VPC 互聯與地端混合雲後,VPC Peering、Transit Gateway、Direct Connect 與 Route 53 Resolver Endpoints 將陸續登場,這些留待下篇展開。