</>Học Dev
Bài học

Tuần 3 - Ngày 1: Amazon S3 Fundamentals

Tuần 3 – Ngày 1

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 caseService S3
Static website hostingS3 + CloudFront
Backup & archiveS3 + Glacier
Data lakeS3 + Athena/Redshift Spectrum
Big data analyticsS3 + EMR
Media storageS3 (image, video)
Software distributionS3 + presigned URL
Log storageS3 (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

  1. Enable "Static website hosting" trong bucket Properties
  2. Set index document: index.html
  3. Set error document: error.html
  4. 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:BypassGovernanceRetention có 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

  1. 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.

  2. S3 bucket name có unique global không?

    Xem đáp án

    — 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.

  3. Block Public Access có override bucket policy public không?

    Xem đáp án

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

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

  5. 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