Cái nào chứa cái nào?
Trước tiên hãy xem sơ đồ tổng quan – đây là thứ bạn cần nhớ ngay cả khi quên hết mọi thứ khác.
Gateway
→ Gắn trực tiếp vào VPC (1 IGW / 1 VPC)
→ Stateful – không filter, chỉ route
Web
GW
App
DB
Web
Replica
IGW gắn vào VPC. NAT GW đặt trong Public Subnet, phục vụ Private Subnet. Route Table quyết định subnet là Public hay Private.
Region & Availability Zone
ap-southeast-3 (Jakarta) – mới hơn, latency tương đương, một số dịch vụ chưa có.
VPC – Virtual Private Cloud
VPC là mạng ảo riêng tư của bạn trong AWS. Nó hoàn toàn bị cô lập với các account AWS khác và với Internet (trừ khi bạn chủ động mở). Hãy nghĩ VPC như một tòa nhà văn phòng riêng – bên trong có phòng ban, hành lang, quy tắc vào ra.
| Đặc điểm | Giá trị / Giới hạn | Ghi chú |
|---|---|---|
| CIDR block | /16 đến /28 | Thường dùng 10.0.0.0/16 (65,536 IP). Không thể thay đổi sau khi tạo. |
| VPC mặc định | 1 mỗi Region | AWS tạo sẵn, có thể xóa nhưng nên giữ cho lab/dev. |
| VPC tối đa | 5 mỗi Region (soft limit) | Có thể tăng bằng cách request AWS. |
| Tenancy | Default hoặc Dedicated | Dedicated = chạy trên phần cứng riêng, giá cao hơn. |
| DNS | enableDnsSupport + enableDnsHostnames | Bật cả hai để instance nhận hostname DNS tự động. |
VPC Peering & VPC Endpoints
- Kết nối 2 VPC với nhau (cùng hoặc khác account, khác Region)
- Traffic đi qua private AWS network, không qua Internet
- Không transitive: A↔B, B↔C ≠ A↔C
- CIDR 2 VPC không được overlap
- Truy cập AWS services (S3, DynamoDB...) từ Private Subnet mà không cần NAT
- Gateway Endpoint: S3 và DynamoDB (miễn phí)
- Interface Endpoint: 150+ AWS services (có phí)
- Traffic không ra Internet – bảo mật và nhanh hơn
Subnet – Phân đoạn mạng
Subnet là phân đoạn của VPC, nằm trong một AZ cụ thể. Điều làm subnet trở thành Public hay Private là Route Table – không phải tên gọi hay bất kỳ thuộc tính nào khác.
- Route Table có entry:
0.0.0.0/0 → IGW - Instance CÓ THỂ có Public IP hoặc Elastic IP
- Traffic từ Internet có thể vào (nếu SG cho phép)
- Dùng cho: Web server, ALB, Bastion host, NAT GW
- Ví dụ CIDR: 10.0.1.0/24 (254 IP dùng được)
- Route Table KHÔNG có entry đến IGW
- Instance chỉ có Private IP, không có Public IP
- Internet không thể chủ động kết nối vào
- Dùng cho: Database, App server, Lambda, ElastiCache
- Ra ngoài Internet được qua NAT Gateway (1 chiều)
10.0.1.0/24 có 256 địa chỉ nhưng chỉ dùng được 251:.0 Network address · .1 VPC Router · .2 DNS · .3 Reserved tương lai · .255 Broadcast
Thiết kế subnet phổ biến (3-tier architecture)
| Tier | Subnet | Thành phần | CIDR ví dụ |
|---|---|---|---|
| Web Tier | Public | ALB, Web server (EC2), NAT GW | 10.0.1.0/24, 10.0.2.0/24 |
| App Tier | Private | App server (EC2), Lambda, ECS | 10.0.11.0/24, 10.0.12.0/24 |
| Data Tier | Private | RDS, ElastiCache, DynamoDB | 10.0.21.0/24, 10.0.22.0/24 |
Route Table – Bảng định tuyến
Route Table là tập hợp các rules định tuyến traffic từ subnet đến đích. Mỗi subnet phải được liên kết với đúng một Route Table. Đây là thứ quyết định subnet có "nhìn thấy" Internet không.
| Destination | Target | Ý nghĩa | Loại Route Table |
|---|---|---|---|
10.0.0.0/16 | local | Traffic trong VPC → đi nội bộ. Mọi Route Table đều có rule này, không xóa được. | Tất cả |
0.0.0.0/0 | igw-xxxxxxxx | Mọi traffic ra ngoài → qua Internet Gateway | Public |
0.0.0.0/0 | nat-xxxxxxxx | Mọi traffic ra ngoài → qua NAT Gateway (trong Public Subnet) | Private |
10.1.0.0/16 | pcx-xxxxxxxx | Traffic đến VPC được peer → qua VPC Peering connection | Khi có Peering |
pl-xxxxxxxx | vpce-xxxxxxxx | Traffic đến S3/DynamoDB → qua VPC Endpoint (không qua Internet) | Khi có Endpoint |
10.0.1.5 sẽ match 10.0.1.0/24 thay vì 10.0.0.0/16, dù cả hai đều match.
Internet Gateway (IGW)
IGW là cầu nối duy nhất giữa VPC và Internet. Không có IGW = không có gì trong VPC tiếp cận Internet được (kể cả EC2 trong Public Subnet). Ngược lại, không có IGW = Internet cũng không gọi vào được.
NAT Gateway
NAT Gateway cho phép instance trong Private Subnet khởi tạo kết nối ra Internet (download update, gọi API bên ngoài...) mà không để Internet gọi ngược vào. Đây là cơ chế một chiều hoàn hảo cho các resource nhạy cảm như database.
Muốn tải package từ Internet
(trong Public Subnet)
Elastic IP: 54.x.x.x
Không biết Private Subnet tồn tại
Không thể initiate kết nối ngược vào
NAT Gateway vs NAT Instance
| Tiêu chí | NAT Gateway (Managed) | NAT Instance (EC2) |
|---|---|---|
| Quản lý | AWS fully managed | Tự quản lý OS, patch, HA |
| Bandwidth | Đến 100 Gbps (tự scale) | Giới hạn bởi instance type |
| HA | Tự động trong AZ | Cần tự cấu hình failover |
| Chi phí | Cao hơn | Thấp hơn nhưng ops overhead |
| Security Group | Không thể gắn SG trực tiếp | Có thể gắn SG |
| Bastion Host | Không thể dùng làm bastion | Có thể dùng làm cả bastion |
| Khuyến nghị | Production | Dev/test để tiết kiệm |
Security Group
Security Group là firewall ảo gắn trực tiếp vào instance (EC2, RDS, Lambda, ALB...). Nó kiểm soát traffic vào/ra ở tầng instance, không phải tầng subnet. Một instance có thể gắn nhiều SG; một SG có thể gắn vào nhiều instance.
sg-webserver – Ví dụ Web Server
→ ALB SG: allow 443 from 0.0.0.0/0
→ EC2 SG: allow 8080 from sg-alb (chỉ ALB mới vào được)
→ RDS SG: allow 3306 from sg-ec2 (chỉ EC2 mới vào được)
Kết quả: database hoàn toàn không thể reach từ Internet dù không có Firewall rule "deny".
Inbound & Outbound
Inbound và Outbound là hướng nhìn từ instance – không phải từ user hay từ Internet.
- User gọi vào web server của bạn → Inbound port 443
- ALB forward request đến EC2 → Inbound port 8080
- EC2 kết nối vào RDS → Inbound port 3306 (nhìn từ RDS)
- Admin SSH vào EC2 → Inbound port 22
- Mặc định: tất cả bị chặn nếu không có allow rule
- EC2 gọi API bên ngoài → Outbound port 443
- EC2 download package → Outbound port 80/443
- EC2 kết nối vào RDS → Outbound port 3306 (nhìn từ EC2)
- Response trả về user (stateful, tự động) → Không cần outbound rule
- Mặc định: tất cả được phép (default SG allow all outbound)
Ví dụ thực tế: User mở website của bạn
1.2.3.4
Nhận packet
0.0.0.0/0 → local?
Check Inbound
10.0.1.5
Response
Auto-allow response
NAT: 10.0.1.5 → 54.x
Nhận response
Ví dụ: Private Subnet EC2 gọi ra Internet (qua NAT)
10.0.11.5
0.0.0.0/0 → NAT
Public Subnet
Package server
Response
Translate ngược lại
Nhận packages
Network ACL (NACL)
NACL là firewall ở tầng subnet, kiểm tra mọi traffic vào/ra subnet. Trong khi Security Group gắn vào instance, NACL gắn vào subnet – tất cả traffic qua subnet đều bị kiểm tra.
- SG: Gắn vào instance · NACL: Gắn vào subnet
- SG: Stateful · NACL: Stateless (phải viết rule cả 2 chiều)
- SG: Chỉ Allow · NACL: Allow VÀ Deny (có thể block IP cụ thể)
- SG: Đánh giá tất cả rules · NACL: Đánh giá theo số thứ tự (100, 200...) và dừng khi match
- SG: Chặn traffic giữa instances cùng SG · NACL: Không thể phân biệt instances trong subnet
- Block IP cụ thể đang tấn công DDoS → NACL Deny rule
- Chặn traffic từ một country range (IP block)
- Defense in depth: thêm tầng kiểm soát ngoài SG
- Compliance yêu cầu subnet-level firewall
- Thực tế: hầu hết project chỉ dùng SG là đủ
Traffic Flow – Kiểm tra từng lớp
Khi troubleshoot network issue trong AWS, hãy đi theo đúng thứ tự các lớp kiểm tra này:
| Thứ tự | Lớp kiểm tra | Câu hỏi cần hỏi | Fix nếu sai |
|---|---|---|---|
| 1 | IGW | VPC đã có IGW gắn chưa? | Tạo và attach IGW vào VPC |
| 2 | Route Table | Subnet có route 0.0.0.0/0 → IGW (Public) hoặc → NAT (Private) không? | Thêm route entry vào Route Table, associate với subnet |
| 3 | NACL | NACL của subnet có allow traffic không? (Check cả inbound lẫn outbound vì stateless) | Thêm NACL allow rules, nhớ cả ephemeral ports |
| 4 | Security Group | SG gắn vào instance có inbound rule cho port đó không? | Thêm inbound rule vào SG |
| 5 | Public IP | Instance có Public IP hoặc Elastic IP không? (Với Public Subnet) | Bật "Auto-assign Public IP" hoặc gắn Elastic IP |
| 6 | OS Firewall | iptables / Windows Firewall trên instance có block không? | Kiểm tra và mở trong OS-level firewall |
| 7 | Application | App có đang listen trên đúng port không? (netstat -tlnp) | Kiểm tra config app, restart service |
So sánh tất cả thành phần
| Thành phần | Cấp độ | Scope | Stateful? | Allow / Deny | Ghi chú chính |
|---|---|---|---|---|---|
| Region | Địa lý | Chứa tất cả | — | — | Dữ liệu không tự chuyển giữa Region |
| VPC | Mạng | Trong Region | — | — | Isolated network, CIDR /16–/28 |
| Subnet | Phân đoạn | Trong VPC, 1 AZ | — | — | Public/Private phụ thuộc Route Table |
| Route Table | Định tuyến | Gắn vào Subnet | — | — | Quyết định traffic đi đâu |
| Internet Gateway | Cửa ngõ | Gắn vào VPC | — | — | 1 IGW / 1 VPC, không filter |
| NAT Gateway | Dịch địa chỉ | Trong Public Subnet | Yes | — | Private → Internet 1 chiều, có phí |
| NACL | Firewall | Tầng Subnet | No | Allow + Deny | Stateless, check theo số thứ tự rule |
| Security Group | Firewall | Tầng Instance | Yes | Allow only | Có thể reference SG khác làm source |