AWS Learning
Networking

VPC Cheatsheet — Toàn bộ thành phần & Setup thực tế

Toàn bộ thành phần VPC, cách chúng tương tác, setup phổ biến và best practices

Bản đồ VPC — Tất cả thành phần một cái nhìn

                         🌐 Internet


┌──────────────────────────────────────────────────────────────────────────────────┐
│                         VPC (10.0.0.0/16) — Regional Resource                    │
│                                                                                  │
│  ┌──────────────────────┐                                                        │
│  │   Internet Gateway   │ ← 1 per VPC, FREE, cổng 2 chiều                        │
│  └──────────┬───────────┘                                                        │
│             │                                                                    │
│  ┌──────────▼──────────────────────────────────────────────────────────────────┐ │
│  │                   PUBLIC SUBNET (10.0.1.0/24) — AZ-a                        │ │
│  │                                                                             │ │
│  │  Route Table: 0.0.0.0/0 → IGW                                               │ │
│  │  NACL: Stateless firewall (subnet level)                                    │ │
│  │                                                                             │ │
│  │  ┌───────────────┐  ┌───────────────┐  ┌───────────────┐                    │ │
│  │  │      ALB      │  │ NAT Gateway   │  │ Bastion Host  │                    │ │
│  │  │  (có ENI+SG)  │  │ (có Elastic   │  │ (SSH jump)    │                    │ │
│  │  │  Load balance │  │  IP, cho      │  │               │                    │ │
│  │  │  traffic      │  │  Private ra   │  │               │                    │ │
│  │  │  vào app      │  │  Internet)    │  │               │                    │ │
│  │  └───────┬───────┘  └───────┬───────┘  └───────────────┘                    │ │
│  └──────────┼──────────────────┼───────────────────────────────────────────────┘ │
│             │                  │                                                 │
│  ┌──────────▼──────────────────▼───────────────────────────────────────────────┐ │
│  │                  PRIVATE SUBNET (10.0.2.0/24) — AZ-a                        │ │
│  │                                                                             │ │
│  │  Route Table: 0.0.0.0/0 → NAT, S3 prefix → GW Endpoint                      │ │
│  │  NACL: Stateless firewall (subnet level)                                    │ │
│  │                                                                             │ │
│  │  ┌───────────────┐  ┌───────────────┐  ┌───────────────┐                    │ │
│  │  │   EC2 App     │  │    RDS DB     │  │  Interface    │                    │ │
│  │  │  (có ENI+SG)  │  │  (có ENI+SG)  │  │  Endpoint     │                    │ │
│  │  │  sg: allow    │  │  sg: allow    │  │  (ENI → SQS,  │                    │ │
│  │  │  80 from ALB  │  │  3306 from    │  │   SSM, ECR)   │                    │ │
│  │  │               │  │  sg-app       │  │               │                    │ │
│  │  └───────────────┘  └───────────────┘  └───────────────┘                    │ │
│  └─────────────────────────────────────────────────────────────────────────────┘ │
│                                                                                  │
│  ┌──────────────────┐   ┌──────────────────┐   ┌──────────────────┐              │
│  │ Gateway Endpoint │   │  VPC Peering     │   │ Virtual Private  │              │
│  │ (S3, DynamoDB)   │   │  (nối 2 VPC)     │   │ Gateway / TGW    │              │
│  │ FREE, chỉ route  │   │  FREE            │   │ (VPN/DX to       │              │
│  └──────────────────┘   └──────────────────┘   │  On-Premises)    │              │
│                                                └──────────────────┘              │
└──────────────────────────────────────────────────────────────────────────────────┘

Cheat Table — 14 thành phần VPC

🏗️ Nền tảng (Foundation)

#Thành phầnVai tròScopeChi phí
1VPCMạng ảo riêng1 Region, nhiều AZFREE
2SubnetChia nhỏ VPC1 AZ duy nhấtFREE
3Route TableQuyết định traffic đi đâu1 VPC, gán vào subnetFREE
4ENI"Card mạng ảo" — mọi IP, SG gắn vào đây1 AZFREE

🚪 Cổng kết nối (Gateways)

#Thành phầnVai tròScopeChi phí
5Internet GatewayCổng 2 chiều ra Internet1 per VPCFREE
6NAT GatewayCho Private Subnet ra Internet (1 chiều)1 AZ~$32/tháng
7VPC Endpoint (Gateway)Đường riêng đến S3, DynamoDB1 VPCFREE
8VPC Endpoint (Interface)ENI đến 100+ AWS services1 Subnet~$7.2/tháng

🔒 Bảo mật (Security)

#Thành phầnVai tròLevelStateful?Allow/Deny
9Security GroupFirewall cho instanceENI (instance)✅ StatefulChỉ Allow
10Network ACLFirewall cho subnetSubnet❌ StatelessAllow + Deny

🔗 Kết nối (Connectivity)

#Thành phầnVai tròChi phí
11Elastic IPIP public tĩnh, không đổi$3.6/tháng
12VPC PeeringNối 2 VPC (không transitive)FREE (chỉ data)
13Transit GatewayHub nối nhiều VPC + on-prem$36/tháng per VPC
14VPN / Direct ConnectNối on-premises ↔ AWS$36+/tháng

📊 Giám sát (Monitoring)

#Thành phầnVai tròChi phí
15VPC Flow LogsGhi log tất cả trafficPhí lưu trữ

Traffic Flow — Packet đi qua những gì?

Flow 1: Internet → EC2 App (qua ALB)

User truy cập website → request đi qua những gì trước khi đến EC2?

┌────────┐    ┌─────┐    ┌────────┐    ┌──────┐    ┌────────┐    ┌─────┐    ┌────────┐    ┌──────┐    ┌─────┐
│  User  │───▶│ IGW │───▶│NACL    │───▶│SG    │───▶│  ALB   │───▶│NACL │───▶│SG      │───▶│ ENI  │───▶│ EC2 │
│        │    │     │    │(Public)│    │(ALB) │    │        │    │(Pri)│    │(App)   │    │      │    │ App │
└────────┘    └─────┘    └────────┘    └──────┘    └────────┘    └─────┘    └────────┘    └──────┘    └─────┘
  Internet     Cổng,       Firewall     Firewall    Route đến     Firewall   Firewall     Card       Nhận
               không       subnet       instance    target        subnet     instance     mạng ảo    request!
               filter      (allow/      (chỉ        group         private    (allow 80
                           deny)        allow                     subnet     from
                                        80,443)                              sg-alb)
BướcThành phầnLàm gìChặn được không?
Internet GatewayMở cửa cho traffic vào VPC❌ Không filter
NACL (Public)Kiểm tra IP/port theo rules✅ Allow hoặc Deny
Security Group (ALB)Chỉ cho phép port 80, 443✅ Chỉ Allow
ALBForward request đến EC2 phù hợp
NACL (Private)Kiểm tra traffic vào private subnet✅ Allow hoặc Deny
Security Group (EC2)Chỉ cho phép từ sg-alb✅ Chỉ Allow
ENI → EC2EC2 nhận và xử lý request

Flow 2: EC2 Private → Internet (apt update, gọi API)

EC2 trong private subnet muốn chạy apt update — đi đường nào?

┌─────┐    ┌────────┐    ┌──────┐    ┌─────────┐    ┌─────┐    ┌──────────┐
│ EC2 │───▶│Route   │───▶│NACL  │───▶│   NAT   │───▶│ IGW │───▶│ Internet │
│ App │    │Table   │    │(Pri) │    │ Gateway │    │     │    │          │
└─────┘    └────────┘    └──────┘    └─────────┘    └─────┘    └──────────┘
 Private    "0.0.0.0/0    Check       Đổi IP:       Cổng       apt.ubuntu
 Subnet     → NAT"        outbound    10.0.2.5      ra         .com
                                      → 52.1.2.3    ngoài
                                      (Elastic IP)
BướcThành phầnLàm gì
Route TableTra bảng: 0.0.0.0/0 → nat-xxx → gửi đến NAT
NACL (Private)Kiểm tra outbound rules
NAT GatewayThay private IP bằng Elastic IP (public)
IGWĐẩy ra Internet

⚠️ Chiều ngược lại KHÔNG được! Internet không thể gửi request VÀO qua NAT → EC2 private an toàn.

Flow 3: EC2 Private → S3 (qua Gateway Endpoint)

EC2 upload file lên S3 — không đi qua Internet, không cần NAT

┌─────┐    ┌────────┐    ┌───────────┐    ┌──────────────┐    ┌─────┐
│ EC2 │───▶│Route   │───▶│  Gateway  │───▶│ AWS Private  │───▶│  S3 │
│ App │    │Table   │    │ Endpoint  │    │   Network    │    │     │
└─────┘    └────────┘    └───────────┘    └──────────────┘    └─────┘
 Private    "S3 prefix    Không tạo       Nhanh, bảo mật,
 Subnet     → vpce-s3"   ENI, chỉ        không qua
                          thêm route      Internet
So sánhQua NAT GatewayQua Gateway Endpoint
Đường điEC2 → NAT → IGW → Internet → S3EC2 → Endpoint → S3
Chi phí$32/tháng + $0.045/GBFREE
Tốc độChậm hơn (qua Internet)Nhanh hơn (AWS backbone)
Bảo mậtTraffic đi qua InternetTraffic ở trong AWS

Flow 4: EC2 Private → SQS (qua Interface Endpoint)

EC2 gửi message đến SQS — cũng không cần Internet

┌─────┐    ┌──────────────────┐    ┌──────────────┐    ┌─────┐
│ EC2 │───▶│ Interface        │───▶│ AWS Private  │───▶│ SQS │
│ App │    │ Endpoint (ENI)   │    │   Network    │    │     │
│     │    │ IP: 10.0.2.100   │    │              │    │     │
└─────┘    └──────────────────┘    └──────────────┘    └─────┘
 Private    Tạo ENI trong subnet
 Subnet     Cần Security Group
            (allow 443 from VPC)

Khác Gateway Endpoint:

Gateway EndpointInterface Endpoint
Dùng choS3, DynamoDB (2 cái)100+ services (SQS, SSM, ECR...)
Cách hoạt độngThêm routeTạo ENI trong subnet
Cần SG?✅ (vì có ENI)
Chi phíFREE$7.2/tháng

Cách nhớ: Ai làm gì?

Mẹo ghi nhớ: Nghĩ VPC như một tòa nhà văn phòng

VPC ComponentVí dụ tòa nhàVai trò
VPCTòa nhàKhông gian riêng biệt
SubnetTầng lầuPhân khu (tầng public, tầng private)
Internet GatewayCổng chínhAi cũng đi qua, không kiểm tra
Route TableBảng chỉ đường"Tầng 3 rẽ phải, tầng 5 đi thang máy"
NACLBảo vệ tầngKiểm tra ID ở cửa thang máy mỗi tầng
Security GroupKhóa cửa phòngChỉ người có chìa khóa mới vào được
NAT GatewayQuầy gửi bưu phẩmNgười trong tầng private gửi đồ ra ngoài
BastionPhòng kháchKhách đến đây trước, rồi mới vào phòng trong
VPC EndpointĐường hầm nội bộĐi thẳng đến kho (S3) không cần ra cổng
VPC PeeringCầu nối 2 tòaĐi sang tòa bên cạnh qua cầu
Transit GatewayBến xe trung tâmTừ đây đi đến BẤT KỲ tòa nào
ENIỔ cắm mạngMỗi phòng cần ổ cắm để có mạng
Elastic IPSố phòng cố địnhDù đổi phòng, số vẫn giữ nguyên
Flow LogsCamera giám sátGhi lại ai ra vào, lúc nào

Kết nối ra ngoài VPC — 6 cách

                               ┌──────────────────────────────┐
                               │        YOUR VPC              │
                               │                              │
① IGW ◄─────── Internet ─────►│ Public Subnet (2 chiều)      │
                               │                              │
② NAT ◄─────── Internet ─────►│ Private Subnet (chỉ ra)      │
                               │                              │
③ GW Endpoint ◄── AWS Net ───►│ Private → S3/DynamoDB        │
                               │                              │
④ IF Endpoint ◄── AWS Net ───►│ Private → SQS/SSM/ECR...     │
                               │                              │
⑤ VPN ◄──── IPsec/Internet ──►│ On-premises (encrypted)      │
                               │                              │
⑥ DX ◄──── Cáp riêng ────────►│ On-premises (dedicated)      │
                               │                              │
                               └──────────────────────────────┘
#CáchTừĐếnQuaChi phí
IGWPublic SubnetInternetInternet GatewayFREE
NATPrivate SubnetInternet (chỉ ra)NAT → IGW$32+/tháng
GW EndpointPrivate SubnetS3, DynamoDBAWS Private NetFREE
IF EndpointPrivate Subnet100+ servicesENI → AWS Net$7.2/tháng
Site-to-Site VPNOn-premisesVPCInternet (IPsec)$36/tháng
Direct ConnectOn-premisesVPCCáp quang riêng$239+/tháng

Kết nối giữa các VPC — So sánh 3 cách

Tiêu chíVPC PeeringTransit GatewayPrivateLink
Kết nối2 VPC toàn bộN VPC + on-prem1 service cụ thể
Transitive❌ A↔B, B↔C ≠ A↔C✅ Có❌ Không
CIDR trùng❌ Không được❌ Không được✅ OK
ScalePhức tạp (N*(N-1)/2)Dễ (N connections)Dễ
Chi phíFREE (chỉ data)$36/tháng per VPC$7.2/tháng
Khi nào2-3 VPC4+ VPC, on-premExpose 1 service

Setup #1 — Startup / MVP

Đơn giản, rẻ, đủ dùng cho MVP hoặc side project

VPC: 10.0.0.0/16

├── Public Subnet:  10.0.1.0/24 (AZ-a)
│   └── EC2 (web + app) + Public IP

├── Private Subnet: 10.0.2.0/24 (AZ-a)
│   └── RDS (database)

├── Internet Gateway ✅
├── Route Table Public: 0.0.0.0/0 → IGW
├── Route Table Private: chỉ local
├── Security Group Web: allow 80, 443 from 0.0.0.0/0
├── Security Group DB:  allow 3306 from sg-web
└── Gateway Endpoint S3 ✅ (miễn phí, tại sao không?)

Chi phí VPC: ~$0 (chỉ trả EC2 + RDS)

Hạn chế:

  • ❌ Không HA (1 AZ)
  • ❌ EC2 private không ra được Internet (không có NAT)
  • ❌ Không có Load Balancer

Setup #2 — Production chuẩn (Multi-AZ)

Setup phổ biến nhất — đây là cách AWS recommend cho production workloads

Ref: AWS VPC with servers in private subnets and NAT

VPC: 10.0.0.0/16

├── AZ-a
│   ├── Public Subnet:  10.0.1.0/24
│   │   ├── NAT Gateway (Elastic IP)
│   │   └── ALB node
│   ├── Private Subnet: 10.0.10.0/24
│   │   └── EC2 App (Auto Scaling Group)
│   └── DB Subnet:      10.0.20.0/24
│       └── RDS Primary

├── AZ-b
│   ├── Public Subnet:  10.0.2.0/24
│   │   ├── NAT Gateway (Elastic IP)
│   │   └── ALB node
│   ├── Private Subnet: 10.0.11.0/24
│   │   └── EC2 App (Auto Scaling Group)
│   └── DB Subnet:      10.0.21.0/24
│       └── RDS Standby

├── Internet Gateway
├── Route Table Public:  0.0.0.0/0 → IGW
├── Route Table Private-a: 0.0.0.0/0 → NAT-a
├── Route Table Private-b: 0.0.0.0/0 → NAT-b

├── Security Groups
│   ├── sg-alb:  Inbound 80,443 from 0.0.0.0/0
│   ├── sg-app:  Inbound 80 from sg-alb
│   ├── sg-db:   Inbound 3306 from sg-app
│   └── sg-vpce: Inbound 443 from 10.0.0.0/16

├── Gateway Endpoint → S3 (FREE)
├── Interface Endpoint → SSM (cho SSH không cần Bastion)

└── VPC Flow Logs → S3 bucket

Route Tables chi tiết

Public Subnet Route Table:

DestinationTargetGhi chú
10.0.0.0/16localTraffic nội bộ VPC
0.0.0.0/0igw-xxxRa Internet

Private Subnet Route Table (AZ-a):

DestinationTargetGhi chú
10.0.0.0/16localTraffic nội bộ VPC
0.0.0.0/0nat-a-xxxRa Internet qua NAT
S3 prefix-listvpce-s3Đến S3 qua Endpoint

Security Group Referencing Chain

Internet → sg-alb (allow 80,443 from 0.0.0.0/0)


           sg-app (allow 80 from sg-alb)     ← SG referencing!


           sg-db (allow 3306 from sg-app)    ← SG referencing!

Tại sao SG referencing? Khi EC2 scale thêm/bớt, không cần update IP trong SG rules. Chỉ cần EC2 thuộc đúng SG là tự động được phép.

Chi phí VPC ước tính

Thành phầnChi phí/tháng
NAT Gateway × 2~$65
Public IPv4 × 2 (NAT EIP)~$7
Interface Endpoint (SSM)~$7
Flow Logs storage~$5
Tổng~$84/tháng

Setup #3 — Enterprise Multi-Account

Dùng AWS Organizations, mỗi team/env có account riêng

AWS Organizations

├── Account: Network (central)
│   ├── Transit Gateway (hub)
│   ├── VPC Shared Services
│   │   ├── Active Directory
│   │   ├── Logging / Monitoring
│   │   └── VPN / Direct Connect endpoint
│   └── Share subnets cho các account khác (VPC Sharing)

├── Account: Production
│   ├── VPC-App-A (10.0.0.0/16) ──── attach TGW
│   └── VPC-App-B (10.1.0.0/16) ──── attach TGW

├── Account: Staging
│   └── VPC-Staging (10.2.0.0/16) ── attach TGW

└── Account: Development
    └── VPC-Dev (10.3.0.0/16) ────── attach TGW

Tất cả VPC kết nối qua Transit Gateway:
  VPC-App-A ↔ TGW ↔ VPC-App-B ↔ TGW ↔ On-premises
  (transitive routing = tất cả có thể gọi nhau)

Tại sao không dùng VPC Peering?

  • 4 VPC = cần 6 peering connections
  • 10 VPC = cần 45 peering connections 😱
  • Transit Gateway: N VPC = N connections ✅

Best Practices — Checklist

🏗️ Thiết kế VPC

  • VPC CIDR chọn /16 (65K IPs) — dư dả, không tốn tiền
  • Không trùng CIDR giữa các VPC nếu cần Peering/TGW sau này
  • Plan CIDR trước: 10.0.0.0/16 (Prod), 10.1.0.0/16 (Staging), 10.2.0.0/16 (Dev)
  • Tối thiểu 2 AZ cho production
  • Bật DNS Resolution + DNS Hostnames cho VPC

🏠 Subnet

  • Public subnet: chỉ đặt ALB, NAT Gateway, Bastion
  • Private subnet: đặt EC2 app, Lambda, ECS
  • DB subnet: riêng cho RDS, ElastiCache (isolated hơn)
  • Mỗi AZ tạo đủ 3 tầng: public + private + db

🔒 Security

  • Security Group referencing thay vì hard-code IP
  • Principle of least privilege — chỉ mở port cần thiết
  • KHÔNG mở SSH (22) từ 0.0.0.0/0 — dùng SSM Session Manager hoặc Bastion
  • Tách SG theo role: sg-alb, sg-app, sg-db, sg-cache
  • NACL: giữ default (allow all), chỉ thêm rule khi cần block IP cụ thể

🚪 Connectivity

  • Gateway Endpoint cho S3 — luôn tạo (FREE!)
  • NAT Gateway mỗi AZ cho HA (không share 1 NAT cho nhiều AZ)
  • Interface Endpoint cho SSM → SSH không cần Bastion, không cần NAT
  • Direct Connect + VPN backup cho on-premises kết nối

📊 Monitoring

  • VPC Flow Logs bật cho production
  • Lưu Flow Logs vào S3 (rẻ hơn CloudWatch)
  • GuardDuty để phát hiện traffic bất thường

💰 Tiết kiệm chi phí

  • Dev/Test: dùng NAT Instance (t3.micro ~$8) thay NAT Gateway ($32)
  • Dùng IPv6 khi có thể (miễn phí public IP)
  • Xóa Elastic IP không dùng (vẫn bị tính phí!)
  • S3 traffic đi qua Gateway Endpoint (FREE) thay vì NAT ($0.045/GB)

Anti-Patterns — Những sai lầm phổ biến

❌ Sai✅ ĐúngTại sao
Database ở Public SubnetDatabase ở Private SubnetHacker không thể truy cập trực tiếp
Dùng Default VPC cho prodTạo Custom VPCDefault VPC không đủ bảo mật
1 Security Group cho tất cảTách SG theo roleLeast privilege, dễ quản lý
SSH (22) mở 0.0.0.0/0SSM Session ManagerKhông expose port SSH ra Internet
S3 traffic qua NAT GatewayGateway Endpoint (FREE)Tiết kiệm ~$32/tháng + $0.045/GB
1 NAT Gateway cho nhiều AZ1 NAT per AZHA — nếu AZ chết, AZ kia vẫn ra Internet
Hard-code IP trong SGSG referencing (sg-xxx)Tự động update khi scale
VPC Peering cho 10+ VPCTransit Gateway45 peering vs 10 attachments
VPC CIDR /24 (256 IPs)VPC CIDR /16 (65K IPs)Dư dả mở rộng, CIDR không tốn tiền
Quên bật DNS HostnamesBật cả DNS Resolution + HostnamesInterface Endpoint cần để hoạt động

Chi phí VPC — Cái gì tốn tiền?

FREE (Không tốn tiền)

Thành phầnGhi chú
VPCTạo bao nhiêu cũng miễn phí
SubnetKhông giới hạn
Route TableKhông giới hạn
Internet Gateway1 per VPC
Security GroupKhông giới hạn
Network ACLKhông giới hạn
VPC PeeringChỉ trả data transfer
Gateway Endpoint (S3, DDB)Hoàn toàn miễn phí

CÓ PHÍ (Tốn tiền hàng tháng)

Thành phầnChi phí/thángTips tiết kiệm
NAT Gateway~$32 + $0.045/GBDev: dùng NAT Instance ($8)
Public IPv4~$3.6 per IPDùng IPv6 khi có thể
Elastic IP (không dùng)~$3.6Xóa ngay khi không cần
Interface Endpoint~$7.2 per endpointChỉ tạo khi thực sự cần
Transit Gateway~$36 per attachmentDùng Peering nếu <4 VPC
VPN Connection~$36Dùng VPN thay DX nếu budget thấp
Direct Connect~$239+Chỉ khi cần bandwidth >1.25Gbps
Flow LogsPhí storageLưu S3 rẻ hơn CloudWatch

Quick Reference — Exam Keywords

Keyword trong đềNghĩ đến
"Block specific IP"NACL (SG chỉ có Allow)
"Return traffic automatically"Security Group (stateful)
"Private subnet access S3"Gateway Endpoint (FREE)
"Private subnet access internet"NAT Gateway
"Connect on-premises, need encryption"Site-to-Site VPN (hoặc DX + VPN)
"Consistent bandwidth, low latency"Direct Connect
"Connect 10+ VPCs"Transit Gateway
"Expose service to another VPC"PrivateLink (Endpoint Service)
"Multi-account shared VPC"VPC Sharing (RAM)
"Defense in depth"SG + NACL (2 layers)
"Firewall at subnet level"NACL
"Static IP for NLB"Elastic IP
"Monitor VPC traffic"VPC Flow Logs
"No public IP but needs to call AWS API"Interface Endpoint hoặc NAT
"Highest availability VPN"2 Direct Connect ở 2 locations

Tài liệu tham khảo


Liên kết: