前言

對於後端工程師來說,網路架構往往是最令人頭痛,但也是最關鍵的一環。一個設計良好的網路架構,不僅能確保系統的安全性,還能提供高可用性與低延遲的服務。

在 AWS 中,VPC(Virtual Private Cloud)是你構建雲端城堡的地基。本篇將帶你深入理解 AWS 的網路世界,從底層的子網路規劃,到外層的負載平衡與 DNS 路由。

本篇重點:

  • VPC 核心概念與子網路規劃策略
  • Security Group 與 NACL 的多層防禦
  • ALB 與 NLB 的選擇與配置
  • Route 53 的進階路由策略
  • 實戰:設計一個高可用的三層式架構

VPC:虛擬私有雲

VPC 核心架構

VPC 是你在 AWS 雲端中的邏輯隔離網路環境。理解 VPC 的組成元件是構建安全架構的第一步。

graph TB
    subgraph "AWS Region"
        subgraph "VPC (10.0.0.0/16)"
            subgraph "AZ A"
                A[Public Subnet A<br/>10.0.1.0/24]
                B[Private Subnet A<br/>10.0.2.0/24]
            end
            
            subgraph "AZ B"
                C[Public Subnet B<br/>10.0.3.0/24]
                D[Private Subnet B<br/>10.0.4.0/24]
            end
            
            IGW[Internet Gateway]
            NAT[NAT Gateway]
        end
    end
    
    Internet((Internet)) <--> IGW
    A <--> IGW
    C <--> IGW
    
    B --> NAT
    D --> NAT
    NAT --> IGW

關鍵元件解析

元件 說明 作用
CIDR Block IP 位址範圍 定義 VPC 的大小(如 10.0.0.0/16 提供 65,536 個 IP)
Subnet VPC 的子區塊 區分 Public(可直連 Internet)與 Private(不可直連)區域
Route Table 路由表 決定流量的去向(導向 IGW、NAT 或 Peering)
Internet Gateway (IGW) 網際網路閘道 讓 Public Subnet 連接 Internet 的出口
NAT Gateway NAT 閘道 讓 Private Subnet 的資源能單向訪問 Internet(如下載更新)

子網路規劃策略

一個標準的高可用生產環境,通常建議採用 Multi-AZ 架構,每個 AZ 包含一組 Public 和 Private Subnet。

CIDR 規劃範例

  • VPC: 10.0.0.0/16
  • Public Subnets (用於 ALB, Bastion):
    • AZ-a: 10.0.1.0/24
    • AZ-b: 10.0.2.0/24
  • Private Subnets (用於 App, ECS):
    • AZ-a: 10.0.10.0/24
    • AZ-b: 10.0.11.0/24
  • Database Subnets (用於 RDS, ElastiCache):
    • AZ-a: 10.0.20.0/24
    • AZ-b: 10.0.21.0/24

為什麼要這樣分層?

  1. 安全性:資料庫和應用程式伺服器不應直接暴露在 Internet。
  2. 路由控制:不同層級可以有不同的路由策略(例如 DB 層完全斷網)。
  3. ACL 管理:可以針對不同層級設定不同的網路存取控制列表。

網路安全防禦層

AWS 提供了兩層主要的防火牆機制:Security GroupsNetwork ACLs

Security Group vs NACL

特性 Security Group (SG) Network ACL (NACL)
作用層級 執行個體層級 (Instance Level) 子網路層級 (Subnet Level)
狀態 Stateful (有狀態) Stateless (無狀態)
規則 僅允許 (Allow only) 允許與拒絕 (Allow & Deny)
順序 無順序,所有規則皆評估 按編號順序評估
回傳流量 自動允許 需明確允許 (Ephemeral Ports)

Stateful 的意義
如果你在 SG 允許了 Inbound Port 80,那麼回應的 Outbound 流量會自動被允許,不需要額外設定。

Security Group 最佳實踐

1. 最小權限原則
只開放必要的 Port 和來源 IP。

2. 鏈式參考 (Chaining)
這是 SG 最強大的功能。你可以將「來源」設定為另一個 SG ID,而不是 IP 範圍。

graph LR
    ALB_SG[ALB SG<br/>In: 443 from 0.0.0.0/0]
    APP_SG[App SG<br/>In: 8080 from ALB SG]
    DB_SG[DB SG<br/>In: 5432 from App SG]
    
    Internet --> ALB_SG
    ALB_SG --> APP_SG
    APP_SG --> DB_SG

設定範例

  • ALB SG: 允許 0.0.0.0/0 存取 Port 443
  • App SG: 只允許 來自 ALB SG 的流量存取 Port 8080
  • DB SG: 只允許 來自 App SG 的流量存取 Port 5432

這樣即使有人知道你的 App Server IP,也無法繞過 ALB 直接連線,因為 SG 鎖死了來源必須是 ALB。


ELB:彈性負載平衡

ALB vs NLB

AWS 主要提供兩種負載平衡器,選擇錯誤會導致功能受限或效能瓶頸。

特性 Application Load Balancer (ALB) Network Load Balancer (NLB)
OSI 層級 Layer 7 (HTTP/HTTPS) Layer 4 (TCP/UDP/TLS)
適用場景 Web 應用、微服務、容器 高吞吐量、低延遲、靜態 IP
功能 路徑路由、主機路由、重導向、WAF 整合 靜態 IP、PrivateLink 支援
延遲 較高 (毫秒級) 極低 (微秒級)
健康檢查 HTTP/HTTPS 代碼 TCP 連線或 HTTP

ALB 進階功能

1. 路徑路由 (Path-Based Routing)
將不同路徑的請求導向不同服務,適合微服務架構。

graph LR
    Client --> ALB
    ALB -->|/api/*| ServiceA[API Service]
    ALB -->|/admin/*| ServiceB[Admin Service]
    ALB -->|/*| ServiceC[Frontend Service]

2. 黏性會話 (Sticky Sessions)
確保來自同一使用者的請求總是導向同一台伺服器。

  • 透過 Cookie 實現
  • 適用於有狀態應用(但建議盡量設計為無狀態)

3. 整合 WAF (Web Application Firewall)
ALB 可以直接掛載 WAF,防禦 SQL Injection、XSS 等常見攻擊。

Target Group 與健康檢查

Target Group 是 ELB 後端的伺服器群組。正確設定 Health Check 至關重要。

1
2
3
4
5
6
7
8
9
# Health Check 設定範例
Protocol: HTTP
Port: traffic-port
Path: /health
Matcher: 200
Interval: 30 seconds
Timeout: 5 seconds
HealthyThreshold: 2
UnhealthyThreshold: 3

實務建議

  • 應用程式應提供專用的 /health 端點
  • 健康檢查不應只回傳 200,應檢查關鍵依賴(如 DB 連線)
  • 設定 Grace Period 給予應用程式啟動時間

Route 53:DNS 與流量管理

記錄類型 (Record Types)

  • A Record: 網域 -> IPv4
  • AAAA Record: 網域 -> IPv6
  • CNAME: 網域 -> 網域 (不能用於 Zone Apex,如 example.com)
  • Alias Record: AWS 特有,網域 -> AWS 資源 (ALB, S3, CloudFront)
    • 優點:免費查詢、自動更新 IP、可用於 Zone Apex

路由策略 (Routing Policies)

Route 53 不只是 DNS 解析,更是全域流量管理器。

1. 簡單路由 (Simple Routing)
最基本的一對一或一對多映射,隨機回傳。

2. 加權路由 (Weighted Routing)
按比例分配流量,適合藍綠部署或 A/B 測試。

  • v1 版本: 權重 90
  • v2 版本: 權重 10

3. 延遲路由 (Latency Routing)
將使用者導向延遲最低的 Region。

  • 台灣使用者 -> 東京 Region
  • 美國使用者 -> 維吉尼亞 Region

4. 故障轉移路由 (Failover Routing)
主動/被動 (Active-Passive) 高可用架構。

graph TD
    User --> Route53
    Route53 -->|Primary (Active)| ALB_Primary[東京 Region]
    Route53 -.->|Secondary (Passive)| ALB_Secondary[新加坡 Region]
    
    Route53 -->|Health Check| ALB_Primary

實戰:高可用三層式架構設計

結合上述所有概念,我們來設計一個標準的高可用 Web 應用架構。

架構圖

graph TB
    User((User)) -->|HTTPS| R53[Route 53]
    R53 -->|Alias| ALB[Application Load Balancer]
    
    subgraph "VPC (10.0.0.0/16)"
        subgraph "Public Subnets"
            ALB
            NAT[NAT Gateway]
            Bastion[Bastion Host]
        end
        
        subgraph "Private Subnets (App Layer)"
            ASG[Auto Scaling Group]
            EC2_1[App Server AZ-a]
            EC2_2[App Server AZ-b]
        end
        
        subgraph "Private Subnets (Data Layer)"
            RDS_M[RDS Primary]
            RDS_S[RDS Standby]
            Redis[ElastiCache]
        end
    end
    
    ALB --> EC2_1
    ALB --> EC2_2
    ASG --> EC2_1
    ASG --> EC2_2
    
    EC2_1 --> NAT
    EC2_1 --> RDS_M
    EC2_1 --> Redis
    
    RDS_M -.->|Sync Replication| RDS_S

設計重點解析

  1. 網路分層

    • Public Layer: 放置 ALB、NAT Gateway、Bastion Host。只有這些資源有 Public IP。
    • App Layer: 放置應用程式伺服器。透過 NAT Gateway 存取外網,透過 ALB 接收流量。
    • Data Layer: 放置資料庫與快取。完全不對外,只允許 App Layer 存取。
  2. 高可用性 (HA)

    • 所有層級都跨越至少兩個 AZ。
    • ALB 自動跨 AZ 分流。
    • Auto Scaling Group 確保 EC2 數量並跨 AZ 分佈。
    • RDS 開啟 Multi-AZ 確保資料庫備援。
  3. 安全性

    • Security Group 嚴格限制來源(Chain Reference)。
    • NACL 作為第二道防線(可選)。
    • 只有 ALB 開放 443 Port 對外。

常見網路問題排查 (Troubleshooting)

當連線不通時,請依序檢查:

  1. Security Groups:

    • Inbound 規則是否允許來源 IP/SG?
    • 應用程式是否監聽正確的 Port?
  2. Route Tables:

    • Public Subnet 是否有路由指向 IGW?
    • Private Subnet 是否有路由指向 NAT Gateway?
  3. NACLs:

    • 是否有 Deny 規則阻擋了流量?
    • 是否忘記允許 Ephemeral Ports (1024-65535) 的回傳流量?
  4. VPC Reachability Analyzer:

    • 使用 AWS 提供的這個工具,可以視覺化並分析兩個資源之間的網路路徑是否暢通。

本章重點回顧

關鍵要點

  1. VPC 規劃

    • 採用 Multi-AZ 架構
    • 區分 Public 與 Private Subnet
    • 合理規劃 CIDR 避免 IP 不足
  2. 安全防護

    • 優先使用 Security Group(Stateful)
    • 善用 SG Chaining 建立信任鏈
    • 最小權限原則開放 Port
  3. 負載平衡

    • Web 應用優先選 ALB(Layer 7)
    • 高吞吐/靜態 IP 需求選 NLB(Layer 4)
    • 正確設定 Health Check
  4. DNS 管理

    • 使用 Alias Record 指向 AWS 資源
    • 善用 Routing Policy 實現全域負載平衡與災難復原

下一篇預告

在系列的第五篇文章中,我們將探討 訊息佇列與事件驅動架構

  • SQS 與 SNS 的差異與整合
  • EventBridge 事件匯流排
  • Kinesis 資料串流處理
  • 如何構建解耦的微服務架構

系列文章導覽


參考資源