devHọc Dev
Bài học

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

Tuần 3 – Ngày 1

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 khuyến nghị virtual-hosted style; kế hoạch loại bỏ path-style đã bị hoãn vô thời hạn — path-style hiện vẫn hoạt động nhưng sẽ bị loại bỏ trong tương lai.

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 (SigV4, với IAM user credentials dài hạn)
  • Với temporary credentials (IAM role): URL chỉ sống bằng thời hạn session của credentials (role session max 12 giờ); tạo từ console max 12 giờ

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

    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.

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

  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