Quay lại

Hướng Dẫn Triển Khai Hệ Thống Phân Phối Nội Dung Với S3 + CloudFront + ACM + OAC + Route 53 Chuyên mục Devops    2025-04-08    3 Lượt xem    3 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

📌 Mục tiêu bài viết

Chúng ta sẽ triển khai một hệ thống phân phối nội dung tĩnh (static content delivery system) sử dụng:

  • Amazon S3: để lưu trữ file tĩnh như ảnh, video, CSS/JS…

  • CloudFront: để cache & phân phối nội dung toàn cầu với hiệu suất cao.

  • ACM (AWS Certificate Manager): để cài SSL miễn phí, dùng HTTPS cho custom domain.

  • OAC (Origin Access Control): để tăng bảo mật, chỉ CloudFront mới có thể đọc từ S3.

  • Route 53: để cấu hình domain hoặc subdomain trỏ về CloudFront.


⚙️ Tổng quan kiến trúc

User (truy cập cdn.example.com)
       |
       v
Route 53 (DNS)
       |
       v
CloudFront (cache + HTTPS + geo-distribution)
       |
       v
S3 Bucket (private, truy cập qua OAC)​

Bước 1: Tạo S3 bucket để lưu trữ nội dung

  1. Vào S3 Console.

  2. Tạo một bucket tên: cdn.example.com (hoặc bất kỳ).

  3. Bật Block all public access.

  4. Upload vài file test vào (image, video, v.v.).

  5. Vào tab Permissions Bucket Policyđể trống (sẽ cấu hình sau với OAC).


Bước 2: Tạo SSL certificate với ACM

CloudFront chỉ hỗ trợ certificate ở us-east-1 (N. Virginia)

  1. Chuyển region sang us-east-1

  2. Vào Certificate ManagerRequest a certificate

  3. Nhập: cdn.example.com (subdomain bạn sẽ dùng)

  4. Chọn xác minh bằng DNS

  5. Nếu domain nằm trong Route 53:

    • Chọn Add record to Route 53 → Xác minh tự động

  6. Khi chứng chỉ được "Issued", bạn sẵn sàng gắn vào CloudFront


Bước 3: Tạo CloudFront Distribution

  1. Vào CloudFrontCreate Distribution

  2. Origin domain: chọn bucket bạn vừa tạo (S3 bucket name)

  3. Origin Access:

    • Choose: Origin access control (recommended)

    • Bấm Create control setting → đặt tên → chọn Sign requests

  4. Viewer protocol policy: Redirect HTTP to HTTPS

  5. Alternate domain names (CNAMEs): nhập cdn.example.com

  6. SSL certificate: chọn certificate bạn đã tạo ở bước 2

  7. Caching, Logging,... giữ mặc định hoặc tùy chọn

  8. Bấm Create distribution

CloudFront sẽ mất vài phút để triển khai.


Bước 4: Gắn OAC vào S3 Bucket Policy

Sau khi CloudFront được tạo, bạn cần cho phép nó truy cập vào bucket:

  1. Vào S3BucketPermissionsBucket policy

  2. Dán đoạn policy sau, nhớ thay phần CLOUDFRONT_OAC_ID bằng OAC Principal ID:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowCloudFrontAccessOnly",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudfront.amazonaws.com"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::cdn.example.com/*",
      "Condition": {
        "StringEquals": {
          "AWS:SourceArn": "arn:aws:cloudfront::YOUR_ACCOUNT_ID:distribution/YOUR_DIST_ID"
        }
      }
    }
  ]
}​

Bạn có thể vào phần Origin settings của distribution để copy thông tin ARN và OAC.


Bước 5: Trỏ subdomain về CloudFront với Route 53

  1. Vào Route 53Hosted Zonesexample.com

  2. Tạo Record type A hoặc CNAME (nếu là subdomain):

    • Name: cdn

    • Type: A – IPv4 address

    • Alias: Yes

    • Alias to CloudFront distribution

    • Chọn distribution bạn đã tạo

Hoặc nếu không dùng Alias:

  • Dùng record kiểu CNAME

  • Value: ds4jsc20zj7ri.cloudfront.net


🎉 Kiểm tra kết quả

  • Truy cập https://cdn.example.com/yourfile.jpg

  • Nếu hiện ra file → triển khai thành công!

  • Kiểm tra headers, bạn sẽ thấy CloudFront cache response từ S3


📌 Tổng kết: Tại sao nên dùng cấu trúc này?

 

Thành phần Lợi ích chính
S3 (private) Lưu trữ đáng tin cậy, giá rẻ
CloudFront Tăng tốc tải nội dung toàn cầu, có cache
ACM Miễn phí SSL cho HTTPS
OAC Bảo vệ nội dung, không ai bypass CloudFront
Route 53 Quản lý domain chính xác, dễ dàng tích hợp

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday