AWS 服務系列(四):網路架構與安全 - VPC、ELB 與 Route 53 設計指南
前言
對於後端工程師來說,網路架構往往是最令人頭痛,但也是最關鍵的一環。一個設計良好的網路架構,不僅能確保系統的安全性,還能提供高可用性與低延遲的服務。
在 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
- AZ-a:
- Private Subnets (用於 App, ECS):
- AZ-a:
10.0.10.0/24 - AZ-b:
10.0.11.0/24
- AZ-a:
- Database Subnets (用於 RDS, ElastiCache):
- AZ-a:
10.0.20.0/24 - AZ-b:
10.0.21.0/24
- AZ-a:
為什麼要這樣分層?
- 安全性:資料庫和應用程式伺服器不應直接暴露在 Internet。
- 路由控制:不同層級可以有不同的路由策略(例如 DB 層完全斷網)。
- ACL 管理:可以針對不同層級設定不同的網路存取控制列表。
網路安全防禦層
AWS 提供了兩層主要的防火牆機制:Security Groups 和 Network 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 | # Health Check 設定範例 |
實務建議:
- 應用程式應提供專用的
/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
設計重點解析
網路分層:
- Public Layer: 放置 ALB、NAT Gateway、Bastion Host。只有這些資源有 Public IP。
- App Layer: 放置應用程式伺服器。透過 NAT Gateway 存取外網,透過 ALB 接收流量。
- Data Layer: 放置資料庫與快取。完全不對外,只允許 App Layer 存取。
高可用性 (HA):
- 所有層級都跨越至少兩個 AZ。
- ALB 自動跨 AZ 分流。
- Auto Scaling Group 確保 EC2 數量並跨 AZ 分佈。
- RDS 開啟 Multi-AZ 確保資料庫備援。
安全性:
- Security Group 嚴格限制來源(Chain Reference)。
- NACL 作為第二道防線(可選)。
- 只有 ALB 開放 443 Port 對外。
常見網路問題排查 (Troubleshooting)
當連線不通時,請依序檢查:
Security Groups:
- Inbound 規則是否允許來源 IP/SG?
- 應用程式是否監聽正確的 Port?
Route Tables:
- Public Subnet 是否有路由指向 IGW?
- Private Subnet 是否有路由指向 NAT Gateway?
NACLs:
- 是否有 Deny 規則阻擋了流量?
- 是否忘記允許 Ephemeral Ports (1024-65535) 的回傳流量?
VPC Reachability Analyzer:
- 使用 AWS 提供的這個工具,可以視覺化並分析兩個資源之間的網路路徑是否暢通。
本章重點回顧
關鍵要點
VPC 規劃
- 採用 Multi-AZ 架構
- 區分 Public 與 Private Subnet
- 合理規劃 CIDR 避免 IP 不足
安全防護
- 優先使用 Security Group(Stateful)
- 善用 SG Chaining 建立信任鏈
- 最小權限原則開放 Port
負載平衡
- Web 應用優先選 ALB(Layer 7)
- 高吞吐/靜態 IP 需求選 NLB(Layer 4)
- 正確設定 Health Check
DNS 管理
- 使用 Alias Record 指向 AWS 資源
- 善用 Routing Policy 實現全域負載平衡與災難復原
下一篇預告
在系列的第五篇文章中,我們將探討 訊息佇列與事件驅動架構:
- SQS 與 SNS 的差異與整合
- EventBridge 事件匯流排
- Kinesis 資料串流處理
- 如何構建解耦的微服務架構
系列文章導覽
- Part 1:入門與核心概念
- Part 2:運算服務深度解析
- Part 3:儲存與資料庫服務
- Part 4:網路架構與安全(本篇)
- Part 5:訊息佇列與事件驅動(SQS、SNS、EventBridge)
- Part 6:DevOps 與 CI/CD(CodePipeline、CDK)
- Part 7:監控與可觀測性(CloudWatch、X-Ray)
- Part 8:進階架構設計(高可用、災難復原、成本優化)











