0
0
Lập trình
Hưng Nguyễn Xuân 1
Hưng Nguyễn Xuân 1xuanhungptithcm

Hành Trình VPC: Triển Khai Website Trong Môi Trường Multi-AZ

Đăng vào 7 tháng trước

• 6 phút đọc

Chủ đề:

KungFuTech

Hành Trình VPC: Triển Khai Website Trong Môi Trường Multi-AZ

Khi bạn xây dựng một ứng dụng để sản xuất, việc "chỉ cần khởi chạy một EC2" không bao giờ là câu chuyện đầy đủ. Mạng, định tuyến, cổng và các biện pháp bảo mật sẽ quyết định liệu ứng dụng của bạn có bền vững và an toàn hay không, hay hoàn toàn bị lộ.

Gần đây, tôi đã thiết lập một môi trường VPC AWS multi-AZ để lưu trữ một trang web, và quá trình này đã trở thành một bài học thực tế trong việc kết nối đám mây. Dưới đây là phân tích chi tiết toàn bộ hành trình của tôi từ các subnet và gateway đến truy cập bastion và cân bằng tải.

Mục Lục

  1. Subnet và Internet Gateway
  2. NAT Gateway – Kiểm Soát Truy Cập Ra Ngoài
  3. Bastion Host – Điểm Nhảy An Toàn
  4. Các Instance Riêng Tư với Load Balancer
  5. DNS và Giải Quyết Nội Bộ
  6. Default VPC
  7. Tóm Tắt Thực Hành Cấp Độ Sản Xuất
  8. Kết Luận

1. Subnet và Internet Gateway

Tôi đã tạo một VPC trong us-west-1 với CIDR 10.0.0.0/16. Bên trong nó, tôi đã tạo bốn subnet qua hai Availability Zones để đảm bảo khả năng chịu lỗi:

  • 10.0.1.0/24 → Subnet công cộng ở AZ1 (us-west-1a)
  • 10.0.2.0/24 → Subnet công cộng ở AZ2 (us-west-1c)
  • 10.0.3.0/24 → Subnet riêng tư ở AZ1
  • 10.0.4.0/24 → Subnet riêng tư ở AZ2

Mặc định, các subnet là riêng tư (không có đường dẫn đến internet). Để làm cho các subnet công cộng thực sự công cộng:

  1. Đính kèm một Internet Gateway (IGW) vào VPC.

  2. Tạo một bảng định tuyến công cộng:

    Copy
    Destination   Target
    0.0.0.0/0     igw-xxxxxx
  3. Liên kết bảng định tuyến này với các subnet công cộng.

  4. Bật tự động gán IP công cộng trong cài đặt subnet.

Ghi chú kỹ thuật: Nếu không bật tự động gán IP, ngay cả một “subnet công cộng” cũng sẽ không cho phép các instance EC2 của bạn truy cập internet.

Điểm Chính

  • Các subnet là riêng tư cho đến khi được định tuyến đến IGW.
  • Subnet công cộng = đường dẫn IGW + IP công cộng tự động.
  • Luôn phân bổ Elastic IP để đảm bảo tính ổn định.

2. NAT Gateway – Kiểm Soát Truy Cập Ra Ngoài

Các subnet riêng tư của tôi (10.0.3.0/24, 10.0.4.0/24) cần internet ra ngoài (cho cập nhật, vá lỗi, cài đặt yum) mà không bị truy cập trực tiếp. Giải pháp là NAT Gateway.

Các bước tôi đã thực hiện:

  • Tạo NAT trong một subnet công cộng (điều này quan trọng -> NAT bản thân cần truy cập IGW).

  • Phân bổ một Elastic IP và gán nó cho NAT.

  • Cập nhật bảng định tuyến riêng tư:

    Copy
    Destination   Target
    0.0.0.0/0     nat-xxxxxx
  • Liên kết bảng định tuyến riêng tư này với các subnet riêng tư.

Ghi chú kỹ thuật: NAT là trạng thái. Nó theo dõi các kết nối được mở bởi các instance riêng tư và cho phép lưu lượng quay về, nhưng sẽ từ chối lưu lượng không được yêu cầu.

Điểm Chính

  • NAT phải sống trong một subnet công cộng.
  • Elastic IP là bắt buộc để đảm bảo tính nhất quán.
  • Định tuyến các subnet riêng tư qua NAT, không phải IGW.

3. Bastion Host – Điểm Nhảy An Toàn

Bạn không nên công khai các EC2 riêng tư trực tiếp cho SSH. Thay vào đó, hãy triển khai một bastion host trong subnet công cộng để làm điểm truy cập được kiểm soát.

Những gì tôi đã làm:

  • Khởi chạy một CIS-hardened Amazon Linux AMI.

  • Cấu hình Security Group (SG):

    • Inbound tcp/22 chỉ cho phép từ IP công ty/công cộng của tôi.
    • Outbound tcp/22 cho phép đến các instance riêng tư.
  • Sử dụng ProxyJump cho việc nối SSH:

    Copy
    ssh -i bastion.pem -J ec2-user@bastion-public-ip ec2-user@private-instance
  • Sử dụng scp với ProxyJump để chuyển SSH keys/tệp:

    Copy
    scp -i bastion.pem -o ProxyJump=ec2-user@bastion-public-ip mykey.pem ec2-user@private-instance:/home/ec2-user/
  • Bảo vệ các khóa với lệnh chmod 400.

Thực Hành An Ninh

  • Giới hạn quyền truy cập bastion chỉ cho các IP đã biết.
  • Sử dụng AMIs cứng hóa để tránh rủi ro zero-day.
  • Bật giám sát (CloudTrail, GuardDuty) cho các cố gắng SSH.

4. Các Instance Riêng Tư với Load Balancer

Các máy chủ ứng dụng của tôi chạy bên trong các subnet riêng tư. Chúng cần phục vụ lưu lượng mà không bị công khai. Giải pháp: Application Load Balancer (ALB).

Cấu hình:

  • Triển khai ALB trong cả hai subnet công cộng (multi-AZ).
  • Listener: cổng HTTP 80.
  • Nhóm mục tiêu: các EC2 riêng tư trên cổng 8080.
  • SGs:
    • SG ALB cho phép inbound cổng 80 từ 0.0.0.0/0.
    • SG Instance cho phép inbound cổng 8080 chỉ từ SG ALB.

Kiểm Tra Sức Khỏe

Copy
Path: /health
Protocol: HTTP
Port: 8080
Healthy threshold: 3
Unhealthy threshold: 2

Ghi chú kỹ thuật: Các kiểm tra sức khỏe đảm bảo rằng các nút không khỏe mạnh sẽ bị loại bỏ và lưu lượng sẽ tự động chuyển hướng đến các backend khỏe mạnh.

Điểm Chính

  • ALB phải sống trong các subnet công cộng.
  • Các EC2 riêng tư không bao giờ cần IP công khai trực tiếp.
  • Quy tắc SG thực thi các đường dẫn lưu lượng được kiểm soát.

5. DNS và Giải Quyết Nội Bộ

Việc kết nối mạng hoạt động tốt hơn với tên hơn là IP thô. Trong cài đặt VPC, tôi:

  • Bật DNS hostnamesgiải quyết DNS.
  • Cho phép các instance riêng tư giải quyết lẫn nhau dưới dạng ip-10-0-3-5.ec2.internal.
  • Định dạng một miền tùy chỉnh qua Route 53 → DNS tên ALB.

Điểm Chính

  • Luôn bật DNS hostnames trong VPC.
  • Route 53 + ALB = định tuyến miền sẵn sàng cho sản xuất.

6. Default VPC

Không xóa Default VPC. Các dịch vụ AWS đôi khi phụ thuộc vào nó ở chế độ nền.

Điểm Chính

  • Để Default VPC nguyên vẹn — nó là một mạng an toàn.

7. Tóm Tắt Thực Hành Cấp Độ Sản Xuất

  • Subnet multi-AZ cho khả năng sẵn sàng cao.
  • Tách biệt bảng định tuyến cho các vùng công cộng và riêng tư.
  • NAT với Elastic IP cho truy cập riêng tư ra ngoài.
  • Bastion như một máy chủ nhảy cứng hóa với các quy tắc SG nghiêm ngặt.
  • ALB trong các subnet công cộng phơi bày các máy chủ ứng dụng riêng tư.
  • Route 53 cho DNS + ánh xạ tên ALB.
  • Security Groups với thiết kế ít quyền nhất.

8. Kết Luận

Đây không chỉ là việc khởi chạy một instance EC2 duy nhất. Nó là về việc thiết kế một mạng lưới:

  • IGW xử lý lưu lượng vào.
  • NAT bảo mật lưu lượng ra.
  • Bastion quản lý SSH.
  • ALB phân phối lưu lượng web.
  • SG thực thi các ranh giới.

Kết quả: một môi trường VPC cấp độ sản xuất bền vững và an toàn, nơi mỗi tài nguyên đóng vai trò xác định.

Hãy nghĩ về nó như một hệ thống ống nước. Các subnet là các ống, IGW là vòi, NAT là bộ lọc, bastion là cổng truy cập, và ALB là van áp suất. Lỗi trong dòng chảy, mọi thứ sẽ không hoạt động. Đúng thì người dùng của bạn sẽ truy cập trang web một cách mượt mà.


Danh Sách Kiểm Tra Chuyên Nghiệp

  • Subnet công cộng → IGW + tự động IP.
  • Subnet riêng tư → NAT cho truy cập ra ngoài.
  • Bastion với SSH IP hạn chế.
  • ALB cho việc phơi bày instance riêng tư.
  • Default VPC không đụng đến.
Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào