メインコンテンツまでスキップ

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

S3 Lifecycle Policy – 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ườngUse caseRule
ProductionApplication logsStandard → IA (90d) → Glacier (365d)
dev/stagingApplication logsStandard → IA (30d) → Glacier (90d) → Deleted (365d)

Best practices & Pitfalls

Minimum storage charge trap

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.

Luôn bật AbortIncompleteMultipartUpload

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-objects sau 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

S3 Replication – Cơ chế hoạt động (CRR &amp; SRR)

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íCRRSRR
RegionKhác regionCùng region
AccountSame hoặc cross-accountSame hoặc cross-account
Use case chínhDR, global latency, data sovereigntyLog aggregation, dev/prod sync
Data transfer cost✅ Có (inter-region rate)❌ Không
Replication lagVài giây đến vài phútVà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
RTC cho DR critical

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

Versioning không thể tắt sau khi bật replication

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:GenerateDataKey trê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 ModeGovernance Mode
Ai có thể xóa?Không ai (kể cả root) trước ngày hết hạnUser có s3:BypassGovernanceRetention
Thay đổi retention?Chỉ có thể extend, không rút ngắnUser đặc quyền có thể thay đổi
Use caseFinancial, healthcare complianceInternal backup protection
Mức độ cứngAbsoluteFlexible

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

Compliance Mode là irreversible

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.

Log bucket grant

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 HCLAWS JSON (Console/API)Ý nghĩaProduction recommendation
allowed_originsAllowedOriginsDomains được phépExplicit list, không dùng * trên private buckets
allowed_methodsAllowedMethodsHTTP methodsChỉ cấp method cần thiết
allowed_headersAllowedHeadersRequest headers cho phép* OK cho public asset buckets
expose_headersExposeHeadersHeaders browser có thể đọcETag cần cho resumable uploads
max_age_secondsMaxAgeSecondsBrowser cache preflight request3600 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
}
]
Wildcard origin cho public bucket

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ế

S3 Access Points – Cơ chế hoạt động

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ăngMục đích chínhBật được sau khi tạo?Chi phí thêmCần Versioning?
Lifecycle PoliciesCost optimization, auto cleanup❌ (recommended)
CRRDR, global latency, compliance✅ (inter-region transfer)✅ Bắt buộc
SRRLog aggregation, dev sync✅ Bắt buộc
Object LockWORM, immutability, compliance❌ Chỉ khi tạo bucket✅ Auto-enabled
Server Access LoggingAudit, forensics, analytics✅ (storage for logs)
CORSBrowser cross-origin access
Access PointsMulti-team access control