AWS VPC: Tổng hợp các best practice cho anh em Cloud

Hôm nay tôi sẽ nói về một trong những thứ cơ bản nhưng cực kỳ quan trọng khi làm việc với AWS: đó là Amazon Virtual Private Cloud (VPC). Nó giống như cái móng nhà của mọi người trên cloud vậy, thiết kế không chuẩn ngay từ đầu thì sau này sửa lại cực kỳ mệt mỏi.

Trong bài này, tôi sẽ chia sẻ một vài best practice về Network ACLs (NACLs), Subnets, Routing Tables, và các cấu hình bảo mật nói chung, kèm theo một kịch bản thực tế với EC2 instance để mọi người dễ hình dung.

82e8f855-8af3-43b1-b0c1-ccaf15da4631

1. Hiểu rõ cấu trúc của AWS VPC

Đầu tiên, một cái VPC trên AWS được tạo nên từ nhiều mảnh ghép, mỗi thằng có một nhiệm vụ riêng:

  • Subnets: Giống như việc mọi người chia nhỏ cái mạng to của VPC ra thành các mạng con logic.
  • Route Tables: Cái bảng chỉ đường, quy định traffic đi từ đâu đến đâu.
  • Network ACLs (NACLs): Tường lửa ở cấp độ subnet. Nó là stateless, tức là rule cho chiều vào và chiều ra là riêng biệt.
  • Security Groups (SGs): Tường lửa ở cấp độ instance/resource. Nó là stateful, tức là nếu mọi người cho phép traffic đi vào, thì chiều trả về sẽ tự động được cho phép.
  • Internet Gateways (IGWs) & NAT Gateways: Cổng để kết nối ra ngoài internet.

2. Best Practices cho Subnets

Nguyên tắc vàng ở đây là luôn chia VPC thành public subnetprivate subnet. Việc này giúp tăng cường bảo mật và khả năng mở rộng.

  • Public Subnet: Dành cho những tài nguyên cần truy cập trực tiếp từ internet, ví dụ như web server, load balancer.
  • Private Subnet: Dành cho những thứ nhạy cảm, không được phép lộ mặt ra internet như application server, database server.
  • Bastion Host: Nếu cần SSH/RDP vào các resource trong private subnet, mọi người nên dựng một con Bastion Host nằm ở public subnet để làm trạm trung chuyển.

Ví dụ chia Subnet:

  • 10.0.0.0/16 – Dải IP của cả cái VPC
  • 10.0.1.0/24 – Public Subnet (đặt ở Availability Zone A)
  • 10.0.2.0/24 – Private Subnet (đặt ở Availability Zone A)

3. Best Practices cho Routing Tables

Routing Table quyết định luồng đi của traffic. Kinh nghiệm xương máu là:

  • Tách riêng Route Table: Dùng một Route Table cho public subnet và một cái khác cho private subnet. Đừng dùng chung!
  • Định tuyến rõ ràng: Chỉ định tuyến cho những gì thực sự cần thiết, tránh hớ hênh lộ mạng ra ngoài.
  • Dùng NAT Gateway: Cho các resource trong private subnet cần đi ra internet, ví dụ để update OS, download package, hãy cho nó đi qua một con NAT Gateway.

Ví dụ Route Table cho Public Subnet:

Destination Target
10.0.0.0/16 local
0.0.0.0/0 igw-123456 (trỏ ra Internet Gateway)

Ví dụ Route Table cho Private Subnet:

Destination Target
10.0.0.0/16 local
0.0.0.0/0 nat-123456 (trỏ ra NAT Gateway)

4. Best Practices cho Network ACL (NACL)

NACL hoạt động như một lớp bảo vệ ở cổng subnet. Nhớ rằng nó là stateless, nên phải cấu hình rule cho cả inbound và outbound.

  • Chỉ mở những port cần thiết: Whitelist các port như 22 (SSH), 443 (HTTPS), 80 (HTTP).
  • Mặc định là DENY: Rule cuối cùng luôn là DENY ALL, và chỉ ALLOW những IP/dải IP cụ thể mà mọi người tin tưởng.
  • Sắp xếp Rule đúng thứ tự: NACL duyệt rule từ trên xuống dưới theo số thứ tự (Rule #). Gặp rule nào khớp là nó dừng lại ngay.

Ví dụ cấu hình NACL:

Rule # Type Protocol Port Range Source Action
100 HTTP TCP 80 0.0.0.0/0 ALLOW
110 HTTPS TCP 443 0.0.0.0/0 ALLOW
120 SSH TCP 22 203.0.113.0/24 ALLOW
* ALL ALL ALL 0.0.0.0/0 DENY

5. Kịch bản thực tế: Web App trên EC2

Giờ mình xem một kịch bản thực tế nhé: một web application chạy trên EC2 instance nằm ở public subnet và có một con database (RDS) nằm ở private subnet.

  • Phân tích kiến trúc:

    • EC2 Web Server: Đặt trong Public Subnet, cho phép truy cập qua port 80/443.
    • Database Instance (RDS): Đặt trong Private Subnet, chỉ cho phép truy cập từ EC2 web server.
    • NACLs & Security Groups: Siết chặt traffic. Inbound vào web server chỉ cho phép port 80, 443. Port 22 (SSH) chỉ cho phép từ IP của Bastion Host hoặc IP văn phòng. Security group của database chỉ cho phép traffic từ security group của web server.
  • Sơ đồ luồng traffic:

64806dac-53fc-4fb9-a4bc-762c11920be4

6. Tổng kết các Best Practices về bảo mật cho VPC

  • Dùng IAM Roles: Tuyệt đối không hardcode credentials (access key, secret key) trong code. Gắn IAM Role cho EC2 là xong.
  • Bật VPC Flow Logs: Để theo dõi và debug traffic mạng khi có sự cố. Rất hữu ích!
  • Mã hóa dữ liệu trên đường truyền: Luôn dùng TLS để đảm bảo giao tiếp an toàn.
  • Siết chặt truy cập bằng Security Groups: Luôn tuân theo nguyên tắc đặc quyền tối thiểu (least privilege). Cần port nào thì mở port đó thôi.
Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận