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 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)