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 4 Lượt xem 4 Lượt thích 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
- 
Vào S3 Console. 
- 
Tạo một bucket tên: cdn.example.com (hoặc bất kỳ). 
- 
Bật Block all public access. 
- 
Upload vài file test vào (image, video, v.v.). 
- 
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)
- 
Chuyển region sang us-east-1 
- 
Vào Certificate Manager → Request a certificate 
- 
Nhập: cdn.example.com (subdomain bạn sẽ dùng) 
- 
Chọn xác minh bằng DNS 
- 
Nếu domain nằm trong Route 53: - 
Chọn Add record to Route 53 → Xác minh tự động 
 
- 
- 
Khi chứng chỉ được "Issued", bạn sẵn sàng gắn vào CloudFront 
Bước 3: Tạo CloudFront Distribution
- 
Vào CloudFront → Create Distribution 
- 
Origin domain: chọn bucket bạn vừa tạo (S3 bucket name) 
- 
Origin Access: - 
Choose: Origin access control (recommended) 
- 
Bấm Create control setting → đặt tên → chọn Sign requests 
 
- 
- 
Viewer protocol policy: Redirect HTTP to HTTPS 
- 
Alternate domain names (CNAMEs): nhập cdn.example.com 
- 
SSL certificate: chọn certificate bạn đã tạo ở bước 2 
- 
Caching, Logging,... giữ mặc định hoặc tùy chọn 
- 
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:
- 
Vào S3 → Bucket → Permissions → Bucket policy 
- 
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
- 
Vào Route 53 → Hosted Zones → example.com 
- 
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)