S3 Advanced Features
Tài liệu này bao gồm các tính năng nâng cao của Amazon S3 dành cho môi trường production: Lifecycle Policies, Replication, Object Lock, Server Access Logging, CORS, và S3 Access Points.
Prerequisite: Đã hiểu S3 basics (buckets, objects, versioning, bucket policy). Xem S3 Object Storage trước.
1. Lifecycle Policies
Tổng quan
Lifecycle Policy tự động chuyển objects giữa các storage class hoặc expire (xóa) chúng dựa trên tuổi của object. Dùng khi:
- Data có vòng đời rõ ràng (logs, backups, media uploads)
- Muốn tối ưu chi phí storage mà không cần can thiệp thủ công
- Cần tự động clean up multipart uploads chưa hoàn thành
Cơ chế hoạt động

Minimum storage duration: AWS vẫn tính phí minimum duration dù bạn transition sớm hơn:
- Standard-IA: 30 ngày
- Glacier Instant: 90 ngày
- Glacier Flexible/Deep Archive: 90/180 ngày
Use case thực tế
| Môi trường | Use case | Rule |
|---|---|---|
| Production | Application logs | Standard → IA (90d) → Glacier (365d) |
| dev/staging | Application logs | Standard → IA (30d) → Glacier (90d) → Deleted (365d) |
Best practices & Pitfalls
Chuyển object sang Standard-IA sau 25 ngày → AWS vẫn tính 30 ngày. Với object nhỏ (<128KB), overhead metadata của IA có thể tốn hơn Standard. Chỉ transition objects lớn hơn 128KB và tuổi >30 ngày.
Multipart uploads bị interrupt tích lũy "orphaned parts" — không xuất hiện trong bucket listing nhưng vẫn tính phí storage. Đặt rule expire sau 7 ngày cho tất cả buckets.
- Dev/Staging: Set expiration ngắn (30 - 365 ngày) để tránh tích lũy data test
- Production: Test lifecycle rule trên staging trước, verify với
aws s3api list-objectssau khi rule chạy - Lifecycle evaluation chạy một lần mỗi ngày — không real-time
2. Replication (CRR & SRR)
Tổng quan
S3 Replication tự động copy objects từ source bucket sang destination bucket:
- CRR (Cross-Region Replication): Khác region — DR, latency reduction, compliance
- SRR (Same-Region Replication): Cùng region — log aggregation, dev/prod sync, backup trong account khác
Prerequisite bắt buộc: Versioning phải bật ở cả source và destination bucket.
Cơ chế hoạt động

Những gì được replicate:
- Objects mới sau khi bật replication
- Object metadata, ACL (nếu config), tags
- Delete markers (nếu bật
DeleteMarkerReplication)
Những gì KHÔNG được replicate:
- Objects đã tồn tại trước khi bật replication (dùng S3 Batch Replication)
- Objects ở Glacier / Glacier Deep Archive
- Replicated objects từ bucket khác (không cascade)
- Permanent deletes (version deletion) — chỉ delete markers nếu bật
So sánh CRR vs SRR
| Tiêu chí | CRR | SRR |
|---|---|---|
| Region | Khác region | Cùng region |
| Account | Same hoặc cross-account | Same hoặc cross-account |
| Use case chính | DR, global latency, data sovereignty | Log aggregation, dev/prod sync |
| Data transfer cost | ✅ Có (inter-region rate) | ❌ Không |
| Replication lag | Vài giây đến vài phút | Vài giây đến vài phút |
| S3 RTC (15-min SLA) | ✅ Optional, thêm phí | ✅ Optional, thêm phí |
Use case thực tế
1. Low Latency Access (Global Users) — CRR
Phục vụ user ở nhiều region với latency thấp bằng cách replicate assets sang region gần user nhất.
Origin Bucket (ap-southeast-1)
──CRR──► Replica Bucket (us-east-1) # Users ở US/EU
──CRR──► Replica Bucket (eu-west-1) # Users ở EU
CloudFront origin group: primary = ap-southeast-1, failover = us-east-1
→ Cache hit: CloudFront Edge (gần nhất)
→ Cache miss: origin bucket gần nhất theo geo-routing
2. Disaster Recovery (DR) — CRR
Backup toàn bộ production data sang region khác. Nếu region chính bị sự cố, chuyển traffic sang DR region.
Production (ap-southeast-1) ──CRR──► DR Bucket (us-east-1)
Versioning: Enabled Storage class: STANDARD_IA
RTC: Enabled (15-min SLA) Object Lock: Governance
RPO: ≤ 15 phút (với S3 RTC)
RTO: Thời gian update DNS / CloudFront origin
S3 Replication Time Control (RTC) đảm bảo 99.99% objects được replicate trong 15 phút. Không bật RTC thì replication lag có thể lên đến hàng giờ trong các sự kiện tải cao.
3. Data Migration & Multi-Account Strategy — CRR
Tách biệt data workload giữa accounts (security isolation, billing separation) hoặc migrate data từ account cũ sang mới.
Legacy Account (123456789012) New Account (987654321098)
prod-data-bucket ──CRR──► prod-data-bucket-new
(cross-account IAM trust)
→ Migration: Chạy CRR song song, validate, rồi cut-over DNS/app config
→ Steady state: Security account nhận replica để audit / DLP scan
Cross-account destination bucket policy (cần thêm vào destination):
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:role/s3-replication-role"
},
"Action": ["s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags"],
"Resource": "arn:aws:s3:::prod-data-bucket-new/*"
}]
}
4. Log Aggregation / Centralized Logging — SRR
Nhiều account/team ghi logs vào bucket riêng → SRR aggregate về một central bucket để phân tích tập trung.
dev-account: app-logs-dev ──SRR──► ┐
staging-account: app-logs-stg ──SRR──► ├──► central-logs-bucket
prod-account: app-logs-prod ──SRR──► ┘ (security-account)
→ Athena / OpenSearch query từ một nơi
→ Security team chỉ cần quyền vào central bucket
→ Prefix separation: logs/dev/, logs/staging/, logs/prod/
5. Blue/Green hoặc Multi-Region Deployment — CRR
Khi deploy phiên bản mới, cần replicate artifacts / config sang tất cả regions trước khi switch traffic.
Deploy pipeline (us-east-1):
Build → Upload artifact v2.1.0 → source-artifacts-bucket
──CRR──► ap-southeast-1/artifacts/ (region B)
──CRR──► eu-west-1/artifacts/ (region C)
→ Pipeline chờ CloudWatch metric ReplicationLatency < 60s
→ Sau khi replicate xong: trigger ECS deploy ở từng region song song
→ Rollback: switch traffic về Green bucket (version cũ vẫn còn)
Pitfalls
Một khi đã bật versioning để dùng replication, bucket chỉ có thể suspend versioning (không delete). Tất cả objects sẽ tích lũy versions → storage cost tăng nếu không có lifecycle rule cho noncurrent versions.
- Cross-account replication: Destination bucket policy phải explicitly allow source account IAM role
- Nếu destination bucket encrypt bằng KMS, IAM role cần quyền
kms:GenerateDataKeytrên destination KMS key - Replication không đảm bảo ordering — dùng S3 Event Notifications nếu cần biết khi nào object đã replicate
3. Object Lock
Tổng quan
Object Lock implements WORM (Write Once, Read Many) — ngăn objects bị xóa hoặc overwrite trong khoảng thời gian xác định. Dùng cho:
- Compliance requirements (SEC 17a-4, HIPAA, FINRA)
- Ransomware protection — backup immutable
- Legal hold trong điều tra
Bật Object Lock phải làm khi tạo bucket — không thể enable sau khi bucket đã tồn tại.
Hai chế độ Retention
| Compliance Mode | Governance Mode | |
|---|---|---|
| Ai có thể xóa? | Không ai (kể cả root) trước ngày hết hạn | User có s3:BypassGovernanceRetention |
| Thay đổi retention? | Chỉ có thể extend, không rút ngắn | User đặc quyền có thể thay đổi |
| Use case | Financial, healthcare compliance | Internal backup protection |
| Mức độ cứng | Absolute | Flexible |
Legal Hold: Tách biệt hoàn toàn với Retention — không có expiry date, giữ object cho đến khi explicitly remove.
Security considerations
Không ai — kể cả AWS Support — có thể xóa object trước retention date trong Compliance mode. Nếu set retention quá dài hoặc nhầm, bạn phải trả phí storage cho đến hết hạn.
- Dùng Governance mode cho dev/staging để có thể recover từ sai lầm
- Dùng Compliance mode cho production compliance data
- Cần MFA Delete kết hợp để bảo vệ toàn diện (prevent accidental bucket delete)
4. Server Access Logging
Tổng quan
Ghi lại mọi request đến S3 bucket — ai request, từ IP nào, bucket nào, object nào, response code, bytes transferred. Dùng cho:
- Security audit và forensics
- Usage analytics (ai đang access object nào nhiều nhất)
- Cost attribution (biết nguồn traffic)
- Compliance requirements
Khác với CloudTrail S3 data events: Server Access Logging granular hơn (có bytes, response time), nhưng delivery không guaranteed và có thể delay. CloudTrail data events integrate với IAM context.
Target bucket phải grant write permission cho S3 log delivery service. Với Object Ownership = BucketOwnerPreferred, điều này được xử lý tự động. Tuy nhiên nếu dùng ACL legacy, cần grant s3:PutObject cho logging.s3.amazonaws.com.
Log format & Analysis
# Log line example:
# 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
# mybucket [06/Feb/2019:00:00:38 +0000] 192.0.2.3
# arn:aws:iam::123456789012:user/developer - REST.GET.OBJECT
# photos/puppy.jpg "GET /mybucket/photos/puppy.jpg HTTP/1.1"
# 200 - 2797690 2797690 19 38 "-"
# "aws-sdk-go/1.33.0 (go1.15.3; linux; amd64)" -
# S3REGREQUESTID HOSTREQUESTEDID
# Query với Athena (cần tạo table trước)
# Tìm top 10 IPs truy cập nhiều nhất
SELECT remoteip, COUNT(*) as request_count
FROM s3_access_logs
WHERE bucket = 'my-prod-bucket'
AND parse_datetime(requestdatetime, 'dd/MMM/yyyy:HH:mm:ss Z')
>= date_add('day', -7, current_timestamp)
GROUP BY remoteip
ORDER BY request_count DESC
LIMIT 10;
Pitfalls
- Log delivery là best-effort (không guaranteed, không real-time)
- Logs của log bucket KHÔNG được tự log (tránh infinite loop — S3 đã xử lý)
- Áp dụng lifecycle policy trên log bucket để tránh tích lũy → tốn phí
5. CORS (Cross-Origin Resource Sharing)
Tổng quan
CORS cho phép web application ở domain A load resources từ S3 bucket ở domain B. Cần khi:
- Frontend (app.example.com) fetch assets từ S3 bucket (assets.example.com)
- Single Page App dùng presigned URL để upload trực tiếp lên S3
- JavaScript request S3 API từ browser
Quan trọng: CORS là browser-side enforcement. Server-to-server calls không bị ảnh hưởng.
Field names khác nhau giữa Terraform HCL và AWS native JSON/Console:
| Terraform HCL | AWS JSON (Console/API) | Ý nghĩa | Production recommendation |
|---|---|---|---|
allowed_origins | AllowedOrigins | Domains được phép | Explicit list, không dùng * trên private buckets |
allowed_methods | AllowedMethods | HTTP methods | Chỉ cấp method cần thiết |
allowed_headers | AllowedHeaders | Request headers cho phép | * OK cho public asset buckets |
expose_headers | ExposeHeaders | Headers browser có thể đọc | ETag cần cho resumable uploads |
max_age_seconds | MaxAgeSeconds | Browser cache preflight request | 3600 cho assets, 300 cho uploads |
Với AWS Console / API (JSON format):
[
{
"AllowedOrigins": ["https://app.example.com"],
"AllowedMethods": ["GET", "PUT", "POST"],
"AllowedHeaders": ["*"],
"ExposeHeaders": ["ETag"],
"MaxAgeSeconds": 300
}
]
AllowedOrigins: ["*"] chỉ phù hợp cho bucket public (không có auth). Với presigned URLs hoặc bucket private, phải list explicit origins để tránh hotlinking từ domain khác.
6. S3 Access Points
Tổng quan
S3 Access Points là named network endpoints với dedicated IAM policies — cho phép nhiều use cases/teams truy cập cùng một bucket với permissions khác nhau, không cần bucket policy phức tạp.
Dùng khi:
- Nhiều team/applications cần truy cập cùng bucket với permissions khác nhau
- Muốn restrict access chỉ từ VPC (không qua Internet)
- Bucket policy đang quá phức tạp và khó maintain
Cơ chế

Truy cập qua Access Point ARN:
# Upload qua Access Point
aws s3api put-object \
--bucket arn:aws:s3:ap-southeast-1:123456789012:accesspoint/uploads-ap \
--key uploads/user123/photo.jpg \
--body photo.jpg
# List qua Access Point
aws s3api list-objects-v2 \
--bucket arn:aws:s3:ap-southeast-1:123456789012:accesspoint/analytics-ap
Limits & Considerations
- Tối đa 10,000 Access Points per account per region
- Access Point trong VPC: traffic không đi qua Internet (cần VPC Endpoint cho S3)
- Access Point policy không thể grant permissions rộng hơn bucket policy
- Không support Static Website Hosting
7. Bảng tổng hợp
| Tính năng | Mục đích chính | Bật được sau khi tạo? | Chi phí thêm | Cần Versioning? |
|---|---|---|---|---|
| Lifecycle Policies | Cost optimization, auto cleanup | ✅ | ❌ | ❌ (recommended) |
| CRR | DR, global latency, compliance | ✅ | ✅ (inter-region transfer) | ✅ Bắt buộc |
| SRR | Log aggregation, dev sync | ✅ | ❌ | ✅ Bắt buộc |
| Object Lock | WORM, immutability, compliance | ❌ Chỉ khi tạo bucket | ❌ | ✅ Auto-enabled |
| Server Access Logging | Audit, forensics, analytics | ✅ | ✅ (storage for logs) | ❌ |
| CORS | Browser cross-origin access | ✅ | ❌ | ❌ |
| Access Points | Multi-team access control | ✅ | ❌ | ❌ |