Tuần 3 - Ngày 1: Amazon S3 Fundamentals
Mục tiêu học tập
- Hiểu khái niệm bucket, object, key
- Nắm S3 access control: bucket policy, ACL, IAM, Block Public Access
- Hiểu durability, availability, region của S3
- Biết các tính năng cơ bản: hosting, presigned URL, CORS
1. Tổng quan S3
Amazon S3 (Simple Storage Service) = object storage service với:
- 99.999999999% (11 nines) durability
- 99.99% availability (Standard class)
- Unlimited storage, object size lên đến 5 TB
- Pay-as-you-go: $/GB-month + requests + data transfer
S3 trong Solutions Architecture
| Use case | Service S3 |
|---|---|
| Static website hosting | S3 + CloudFront |
| Backup & archive | S3 + Glacier |
| Data lake | S3 + Athena/Redshift Spectrum |
| Big data analytics | S3 + EMR |
| Media storage | S3 (image, video) |
| Software distribution | S3 + presigned URL |
| Log storage | S3 (centralized logs) |
2. Bucket và Object
Bucket
- Container chứa objects
- Bucket name unique globally (không phải chỉ trong account)
- Name rules: 3-63 chars, lowercase, không underscore, format DNS-compliant
- Bucket được tạo trong 1 Region
- Soft limit: 100 buckets/account (có thể tăng lên 1000)
Object
- Key = full path (ví dụ:
folder/subfolder/file.txt) - Value = nội dung (binary, text, image...)
- Metadata: system + user-defined headers
- Tags: key-value (lên đến 10 tags/object)
- Version ID (nếu versioning enabled)
- Max object size 5 TB, max upload single PUT 5 GB (lớn hơn cần multipart)
URL Format
Path-style (legacy):
https://s3.us-east-1.amazonaws.com/my-bucket/path/to/file.txt
Virtual-hosted style (recommended):
https://my-bucket.s3.us-east-1.amazonaws.com/path/to/file.txt
AWS đã ngừng path-style cho buckets tạo sau Sep 2020.
3. Durability vs Availability
Durability (Độ bền)
- 99.999999999% (11 nines) cho mọi storage class
- 1 object/10 triệu/10,000 năm có thể bị mất
- Replicated across multiple AZs trong cùng Region (trừ One Zone class)
Availability (Độ sẵn sàng)
- Khác nhau theo storage class:
- Standard: 99.99%
- Standard-IA: 99.9%
- One Zone-IA: 99.5%
- Glacier Instant: 99.9%
4. S3 Region
Đặc điểm
- S3 bucket tạo trong 1 Region
- Data không rời Region (trừ khi bạn replicate)
- Bucket name unique global nhưng data lưu regional
Latency
- Truy cập từ cùng Region: ms
- Truy cập từ Region khác: cao hơn, có thể tăng tốc bằng:
- Transfer Acceleration (qua CloudFront edge)
- Multi-Region Access Points
5. Access Control (4 mechanisms)
Hierarchy của Access Control
1. Block Public Access (account/bucket level) → override mọi thứ khác
2. IAM Policy (identity-based)
3. Bucket Policy (resource-based)
4. ACL (legacy, không khuyến nghị)
5. Object-level Permission
5.1 Block Public Access (BPA)
- Setting bật mặc định cho bucket mới (từ 2023)
- 4 sub-settings:
- Block public ACLs
- Ignore public ACLs
- Block public bucket policies
- Restrict public bucket access (cho cross-account)
- Override mọi policy → bucket KHÔNG public dù policy allow
5.2 IAM Policy
- Gắn vào IAM user/group/role
- Format JSON quen thuộc
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:::my-bucket/*"
}]
}
5.3 Bucket Policy (Resource-based)
- Gắn vào bucket
- Bắt buộc có Principal
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-public-bucket/*"
}]
}
Use cases bucket policy
- Cross-account access
- Force HTTPS only (
"aws:SecureTransport": "true") - Force encryption (
"s3:x-amz-server-side-encryption": "AES256") - IP restriction (
"aws:SourceIp") - VPC Endpoint restriction (
"aws:SourceVpce")
Ví dụ: Force HTTPS
{
"Sid": "DenyHTTP",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
],
"Condition": {
"Bool": { "aws:SecureTransport": "false" }
}
}
5.4 ACL (Access Control List) — Legacy
- Permission cho object/bucket dạng XML
- Khuyến nghị TẮT ACL (default cho bucket mới từ 2023)
- Setting "Object Ownership": Bucket owner enforced → tắt ACL
6. Static Website Hosting
Setup
- Enable "Static website hosting" trong bucket Properties
- Set index document:
index.html - Set error document:
error.html - Make bucket public (disable BPA, add bucket policy)
Endpoint
http://my-bucket.s3-website-us-east-1.amazonaws.com
hoặc
http://my-bucket.s3-website.us-east-1.amazonaws.com
Lưu ý
- HTTP only, không HTTPS (cần CloudFront cho HTTPS)
- Cần custom domain → Route 53 alias hoặc CNAME
- Best practice: S3 (private) + CloudFront + OAC
7. Presigned URL
Định nghĩa
URL có temporary credentials embedded, cho phép thực hiện 1 action (GET/PUT) trên S3 object trong thời gian giới hạn.
Use case
- Cho phép user download private file (Premium content)
- Upload file trực tiếp từ client lên S3 (không qua backend)
- Sharing file ngắn hạn
Tạo qua CLI
aws s3 presign s3://my-bucket/private-file.pdf --expires-in 3600
# Output: https://my-bucket.s3.amazonaws.com/private-file.pdf?X-Amz-Algorithm=...
Expiration
- CLI default: 3600s (1 hour)
- Max: 7 ngày (với signing key dài hạn)
- Max: 36 hours (với temporary IAM role credentials)
8. CORS (Cross-Origin Resource Sharing)
Khi nào cần?
- Browser ở domain A gọi S3 ở domain B
- Browser check CORS preflight
Configuration
Trong bucket → Permissions → CORS:
[
{
"AllowedHeaders": ["*"],
"AllowedMethods": ["GET", "PUT", "POST"],
"AllowedOrigins": ["https://example.com"],
"ExposeHeaders": ["ETag"],
"MaxAgeSeconds": 3000
}
]
9. Object Operations cơ bản
Upload
# Single file
aws s3 cp local.txt s3://my-bucket/
# Folder
aws s3 sync ./local-folder s3://my-bucket/remote-folder/
# Multipart upload (auto cho file > 8 MB qua CLI)
aws s3 cp big-file.zip s3://my-bucket/
Multipart Upload
- Tự động khi file > 8 MB (qua CLI/SDK)
- Bắt buộc cho file > 5 GB
- Lợi ích:
- Resume nếu fail
- Parallel upload nhanh hơn
- Mỗi part: 5 MB - 5 GB (trừ part cuối)
- Lưu ý: Multipart fails → incomplete parts vẫn tính phí (dọn dẹp qua Lifecycle rule)
Download
aws s3 cp s3://my-bucket/file.txt ./
aws s3 sync s3://my-bucket/folder/ ./local/
Delete
aws s3 rm s3://my-bucket/file.txt
aws s3 rm s3://my-bucket/folder/ --recursive
10. S3 Strong Consistency
Định nghĩa
Strong read-after-write consistency cho TẤT CẢ operations (từ Dec 2020):
- PUT new object → GET ngay lập tức = read được
- UPDATE (PUT cùng key) → GET ngay = read version mới
- DELETE → GET = 404 ngay
Lưu ý
- Trước Dec 2020: chỉ eventual consistency cho UPDATE/DELETE
- Hiện tại: strong consistency 100%, không tăng cost, no perf impact
11. S3 Object Lock
Định nghĩa
Object Lock = WORM (Write Once Read Many): prevent delete/overwrite của object trong khoảng thời gian.
Modes
- Governance Mode: User có
s3:BypassGovernanceRetentioncó thể remove lock - Compliance Mode: KHÔNG AI có thể delete/modify (kể cả root)
Retention
- Retain until date: Set timestamp
- Legal Hold: Indefinite hold, no expiration (chỉ user với permission remove được)
Use case
- Compliance (SEC Rule 17a-4, FINRA, HIPAA)
- Backup chống ransomware
- Audit logs cần immutable
12. S3 Replication (Brief — chi tiết Tuần 3 Day 3)
2 loại
- Same-Region Replication (SRR): Replicate trong cùng Region
- Cross-Region Replication (CRR): Replicate sang Region khác
Yêu cầu
- Versioning bật ở cả source và destination bucket
- IAM role với quyền replicate
- Destination bucket exist (cùng hoặc khác account)
Câu hỏi ôn tập
-
Object S3 max size là bao nhiêu? Multipart upload bắt buộc khi file > ?
Xem đáp án
Object max size là 5 TB. Single PUT upload max là 5 GB — nếu file > 5 GB bắt buộc dùng Multipart Upload. AWS khuyến nghị dùng Multipart Upload cho file > 100 MB (để tận dụng parallel upload, resumable, và tốc độ nhanh hơn). Multipart Upload có thể upload lên đến 10,000 parts, mỗi part 5 MB - 5 GB.
-
S3 bucket name có unique global không?
Xem đáp án
Có — bucket name unique across toàn bộ AWS (all accounts, all Regions). Đây là vì S3 dùng bucket name trong URL:
https://bucket-name.s3.amazonaws.com/. Tuy nhiên bucket được tạo trong một Region cụ thể — data lưu tại Region đó. Namespace global nhưng data regional. -
Block Public Access có override bucket policy public không?
Xem đáp án
Có. Block Public Access (BPA) là layer cao nhất — kể cả khi bucket policy cho phép public access, BPA vẫn block. BPA có thể set ở account level (áp dụng cho tất cả buckets) hoặc bucket level. Khi BPA bật, mọi bucket policy/ACL granting public access đều bị override. Best practice: bật BPA ở account level, chỉ tắt cho từng bucket khi thực sự cần public.
-
Static website hosting trên S3 có hỗ trợ HTTPS không?
Xem đáp án
Không trực tiếp — S3 static website endpoint chỉ hỗ trợ HTTP. Để có HTTPS, đặt CloudFront trước S3 bucket: CloudFront terminate TLS với ACM certificate, serve content từ S3 via HTTPS. Đây là pattern phổ biến nhất cho static website: S3 (origin) + CloudFront (HTTPS + CDN + custom domain).
-
Strong consistency cho S3 áp dụng từ năm nào?
Xem đáp án
Từ tháng 12/2020. Trước đó S3 có eventual consistency cho overwrite PUT và DELETE. Kể từ 2020, S3 cung cấp strong read-after-write consistency cho tất cả operations (PUT, GET, DELETE, LIST) — ngay sau khi write thành công, read sẽ thấy data mới nhất. Không cần giải pháp workaround nào nữa để đảm bảo consistency.
Bài tập thực hành
- Tạo bucket private, upload vài file
- Tạo bucket public với static website hosting, deploy 1 trang HTML
- Tạo presigned URL cho 1 object, expires 5 phút
- Apply bucket policy force HTTPS, test với HTTP request bị deny
- Enable Object Lock với Compliance mode 7 ngày, thử delete
- Setup CORS cho bucket cho phép origin
https://example.com
Tài liệu tham khảo chính thức
Tiếp theo: S3 Storage Classes