Bỏ qua để đến nội dung

Amazon S3 – Lưu trữ object

Amazon S3 là một trong những building block (khối xây dựng) chính của AWS. Nó được quảng bá là storage “infinitely scaling” — nghĩa là bạn cứ đẩy dữ liệu vào, không phải lo trước dung lượng, không phải mở rộng ổ đĩa, không phải đặt hàng thêm phần cứng.

Tầm quan trọng của S3 nằm ở hai chỗ. Thứ nhất, rất nhiều website dùng Amazon S3 làm xương sống cho phần lưu trữ của họ. Thứ hai, rất nhiều dịch vụ AWS khác tích hợp với S3 — nên hầu như không có kiến trúc AWS nào mà không đụng tới S3 ở đâu đó. Vì vậy S3 được học theo cách từng bước một: chương này là phần nền, rồi mới tới S3 nâng caoS3 và bảo mật.

Danh sách use case dưới đây cho thấy S3 không chỉ là “chỗ để file” — nó được dùng ở rất nhiều vai trò khác nhau:

  • Backup and storage — sao lưu và lưu trữ nói chung.
  • Disaster Recovery — khôi phục sau thảm họa.
  • Archive — lưu trữ lâu dài.
  • Hybrid Cloud storage — lưu trữ kết hợp giữa on-premises và cloud.
  • Application hostingMedia hosting — chứa ứng dụng, chứa file media.
  • Data lakes & big data analytics — làm hồ dữ liệu cho phân tích dữ liệu lớn.
  • Software delivery — phát hành phần mềm.
  • Static website — chạy website tĩnh.

Amazon S3 cho phép bạn lưu object (file) vào các bucket (có thể hình dung như thư mục). Bucket là đơn vị chứa cấp cao nhất, và có hai đặc điểm rất hay bị hỏi trong đề thi.

  • Tên bucket phải globally unique (duy nhất trên toàn cầu) — duy nhất trên tất cả region và tất cả account. Tên mà người khác đã lấy thì bạn không lấy được nữa.
  • Bucket được định nghĩa ở mức region. S3 trông giống một dịch vụ global, nhưng thực chất bucket được tạo trong một region cụ thể.

Tên bucket phải tuân thủ naming convention sau:

  • Không có chữ in hoa, không có dấu gạch dưới (_).
  • Dài 3–63 ký tự.
  • Không được là một địa chỉ IP.
  • Phải bắt đầu bằng chữ cái thường hoặc chữ số.
  • KHÔNG được bắt đầu bằng tiền tố xn--.
  • KHÔNG được kết thúc bằng hậu tố -s3alias.

Mỗi object (file) trong bucket có một key. Điểm quan trọng nhất cần nhớ: key chính là full path (đường dẫn đầy đủ) của object, chứ không phải chỉ tên file.

s3://my-bucket/my_file.txt
s3://my-bucket/my_folder1/another_folder/my_file.txt

Key được cấu thành từ prefix + object name. Với ví dụ s3://my-bucket/my_folder1/another_folder/my_file.txt thì my_folder1/another_folder/ là prefix và my_file.txt là object name.

Từ đó suy ra một sự thật mà người mới rất hay hiểu sai: bên trong bucket không có khái niệm “directory” (thư mục) — mặc dù giao diện console sẽ làm bạn nghĩ là có. Thực tế chỉ là các key có tên rất dài chứa dấu gạch chéo (/). Console chỉ vẽ ra cây thư mục cho dễ nhìn.

Giá trị (value) của object chính là nội dung phần body của file. Đi kèm nó là một vài thuộc tính cần nhớ:

  • Kích thước object tối đa là 5 TB (5000 GB).
  • Nếu upload lớn hơn 5 GB, bắt buộc phải dùng “multi-part upload” (chia file thành nhiều phần để upload).
  • Metadata — danh sách các cặp key/value dạng text, có thể là system metadata hoặc user metadata.
  • Tags — cặp key/value dạng Unicode, tối đa 10 tag; rất hữu ích cho securitylifecycle.
  • Version ID — chỉ có nếu bucket đã bật versioning.

Việc “ai được làm gì với object nào” trong S3 có thể khai báo từ nhiều phía, và đó là lý do phần này hay gây nhầm lẫn. Slide chia thành hai hướng chính, cộng với mã hóa.

  • User-BasedIAM Policies: quy định API call nào được phép cho một user cụ thể, khai báo từ IAM.
  • Resource-Based:
    • Bucket Policies — luật áp cho toàn bucket, đặt từ S3 console; đây là cách cho phép truy cập cross account (xuyên account).
    • Object Access Control List (ACL) — mức chi tiết hơn, theo từng object (có thể disable).
    • Bucket Access Control List (ACL) — ít dùng hơn (cũng có thể disable).
  • Encryption — mã hóa object trong Amazon S3 bằng các encryption key. Phần này được đào sâu ở chương S3 – Security.

Luật kết hợp quyền cần học thuộc: một IAM principal truy cập được một object S3 khi

  • quyền IAM của user ALLOW, HOẶC resource policy ALLOW,
  • không có explicit DENY (từ chối tường minh) nào.

Bucket Policy là policy viết bằng JSON, gồm các thành phần:

  • Resources — các bucket và object mà policy áp vào.
  • EffectAllow hoặc Deny.
  • Actions — tập các API được phép hoặc bị từ chối.
  • Principal — account hoặc user mà policy áp dụng lên.

Ba việc mà người ta thường dùng Bucket Policy để làm:

  • Cấp quyền truy cập public cho bucket.
  • Bắt buộc object phải được mã hóa khi upload.
  • Cấp quyền cho một AWS account khác (Cross Account).

Các slide ví dụ vẽ bốn tình huống truy cập điển hình. Bảng dưới tóm lại ai truy cập và dùng cơ chế gì:

Tình huống Bên truy cập Cơ chế dùng
Public Access Khách xem website ẩn danh (anonymous visitor) S3 Bucket Policy cho phép public access
User Access to S3 IAM User trong cùng account IAM Policy gắn cho user
EC2 instance access EC2 Instance EC2 Instance Role mang IAM permissions
Cross-Account Access IAM Usermột AWS account khác S3 Bucket Policy cho phép cross-account

Ngoài policy, S3 còn có thêm một lớp chặn riêng gọi là Block Public Access. Những thiết lập này được tạo ra nhằm ngăn dữ liệu công ty bị lộ (data leak) — kể cả khi có ai đó vô tình viết một bucket policy quá rộng.

  • Nếu bạn biết chắc bucket này không bao giờ nên là public, hãy để các thiết lập này bật.
  • Có thể đặt Block Public Access ở mức account (áp cho mọi bucket trong account).

S3 có thể host website tĩnh và cho truy cập được trên Internet. Đây là lựa chọn rất gọn cho các site chỉ gồm HTML/CSS/JS và ảnh: không có server nào phải quản lý, chỉ có bucket.

URL của website sẽ có một trong hai dạng, tùy region (khác nhau ở dấu gạch nối hay dấu chấm trước tên region):

http://bucket-name.s3-website-aws-region.amazonaws.com
http://bucket-name.s3-website.aws-region.amazonaws.com

Ví dụ với bucket demo-bucket ở region us-west-2, URL sẽ là http://demo-bucket.s3-website-us-west-2.amazonaws.com hoặc http://demo-bucket.s3-website.us-west-2.amazonaws.com.

Versioning (đánh phiên bản) cho phép bạn giữ nhiều phiên bản của cùng một file trong S3. Nó được bật ở mức bucket, và khi đã bật, việc ghi đè lên cùng một key sẽ tạo ra “version” mới: 1, 2, 3…

Slide minh họa rất trực quan: user upload s3://my-bucket/my-file.docx ba lần, kết quả là Version 1, Version 2, Version 3 cùng tồn tại dưới một key.

Đây được xem là best practice cho bucket của bạn, vì hai lý do:

  • Bảo vệ khỏi việc xóa ngoài ý muốn — bạn có thể restore lại một version.
  • Roll back về version trước đó rất dễ.

Hai ghi chú nhỏ nhưng hay bị hỏi:

  • File nào chưa được versioning trước khi bật versioning sẽ có version là “null”.
  • Suspend (tạm dừng) versioning KHÔNG xóa các version đã có trước đó.

Replication (nhân bản) cho phép S3 tự động copy object từ bucket này sang bucket khác. Có hai loại, khác nhau ở chỗ bucket đích nằm ở đâu:

  • Cross-Region Replication (CRR) — nhân bản sang region khác.
  • Same-Region Replication (SRR) — nhân bản trong cùng region.

Điều kiện và đặc tính chung:

  • Phải bật Versioning ở cả bucket nguồn và bucket đích.
  • Hai bucket có thể thuộc hai AWS account khác nhau.
  • Việc copy là asynchronous (không đồng bộ) — slide vẽ hai bucket eu-west-1us-east-2 nối với nhau bằng mũi tên “asynchronous replication”.
  • Phải cấp đúng IAM permissions cho S3 để nó thực hiện việc copy.

Use case của từng loại:

Loại Dùng khi
CRR Compliance (tuân thủ quy định), giảm latency khi truy cập, nhân bản xuyên account
SRR Log aggregation (gộp log), nhân bản trực tiếp giữa môi trường production và test

Phần này gần như chắc chắn xuất hiện trong đề thi, vì nó chứa ba cái bẫy:

  • Sau khi bật Replication, chỉ object mới được nhân bản. Nếu muốn nhân bản object đã có sẵn, dùng S3 Batch Replication — nó nhân bản cả object cũ và cả object từng nhân bản thất bại.
  • Với thao tác DELETE:
    • Có thể nhân bản delete marker từ nguồn sang đích — đây là một setting tùy chọn.
    • Xóa kèm version ID thì KHÔNG được nhân bản — để tránh các hành vi xóa có chủ đích xấu (malicious delete).
  • Không có “chaining” (nối chuỗi) replication. Nếu bucket 1 nhân bản sang bucket 2, và bucket 2 nhân bản sang bucket 3, thì object tạo ở bucket 1 sẽ KHÔNG tới được bucket 3.

Không phải dữ liệu nào cũng được đọc thường xuyên, nên trả cùng một giá cho mọi loại dữ liệu là thừa tiền. S3 vì thế có nhiều Storage Class (hạng lưu trữ):

  • Amazon S3 Standard – General Purpose
  • Amazon S3 Standard-Infrequent Access (IA)
  • Amazon S3 One Zone-Infrequent Access
  • Amazon S3 Glacier Instant Retrieval
  • Amazon S3 Glacier Flexible Retrieval
  • Amazon S3 Glacier Deep Archive
  • Amazon S3 Intelligent Tiering

Bạn có thể chuyển object giữa các hạng bằng tay, hoặc dùng S3 Lifecycle configurations để S3 tự chuyển — phần này được trình bày chi tiết ở chương S3 nâng cao.

Hai khái niệm này nghe giống nhau nhưng khác hẳn nhau, và đề thi rất thích điểm này.

  • Durability (độ bền dữ liệu): 99.999999999% (11 số 9) cho object, trải trên nhiều AZ. Nghĩa là nếu bạn lưu 10.000.000 object trong Amazon S3, trung bình bạn sẽ mất một object mỗi 10.000 năm. Con số này giống nhau cho mọi storage class.
  • Availability (độ sẵn sàng): đo mức độ dịch vụ sẵn sàng phục vụ, và thay đổi theo từng storage class. Ví dụ S3 Standard có 99,99% availability, tức là không sẵn sàng khoảng 53 phút mỗi năm.
  • 99,99% Availability.
  • Dùng cho dữ liệu được truy cập thường xuyên (frequently accessed).
  • Latency thấpthroughput cao.
  • Chịu được 2 sự cố hạ tầng (facility failure) đồng thời.
  • Use case: Big Data analytics, ứng dụng mobile & gaming, content distribution

Hai hạng này dành cho dữ liệu ít được truy cập hơn, nhưng khi cần thì phải lấy ra nhanh. Giá thấp hơn S3 Standard.

  • Amazon S3 Standard-Infrequent Access (S3 Standard-IA)
    • 99,9% Availability.
    • Use case: Disaster Recovery, backup.
  • Amazon S3 One Zone-Infrequent Access (S3 One Zone-IA)
    • Durability cao (99.999999999%) nhưng chỉ trong một AZ duy nhất; dữ liệu mất nếu AZ đó bị phá hủy.
    • 99,5% Availability.
    • Use case: lưu bản backup thứ cấp của dữ liệu on-premises, hoặc dữ liệu bạn có thể tạo lại được.

Nhóm Glacier là object storage giá thấp dành cho archiving / backup. Cấu trúc giá của chúng khác hẳn các hạng trên: giá lưu trữ + chi phí lấy object ra (object retrieval cost).

  • Amazon S3 Glacier Instant Retrieval
    • Lấy ra trong millisecond, rất phù hợp với dữ liệu được truy cập khoảng một lần mỗi quý.
    • Minimum storage duration: 90 ngày.
  • Amazon S3 Glacier Flexible Retrieval (tên cũ là Amazon S3 Glacier)
    • Ba chế độ lấy dữ liệu: Expedited (1 đến 5 phút), Standard (3 đến 5 giờ), Bulk (5 đến 12 giờ – miễn phí).
    • Minimum storage duration: 90 ngày.
  • Amazon S3 Glacier Deep Archive — dành cho lưu trữ rất dài hạn
    • Hai chế độ: Standard (12 giờ), Bulk (48 giờ).
    • Minimum storage duration: 180 ngày.

Nếu bạn không biết trước dữ liệu sẽ được truy cập ra sao, Intelligent-Tiering để S3 tự quyết: nó tự chuyển object giữa các Access Tier dựa trên mức sử dụng, đổi lại một phí monitoring và auto-tiering nhỏ hằng tháng. Điểm hấp dẫn: không có phí retrieval trong S3 Intelligent-Tiering.

Các tier và mốc thời gian:

Access Tier Tự động / tùy chọn Điều kiện
Frequent Access tier Tự động Tier mặc định
Infrequent Access tier Tự động Object không được truy cập trong 30 ngày
Archive Instant Access tier Tự động Object không được truy cập trong 90 ngày
Archive Access tier Tùy chọn Cấu hình được từ 90 ngày đến 700+ ngày
Deep Archive Access tier Tùy chọn Cấu hình được từ 180 ngày đến 700+ ngày

Đây là bảng cần xem lại trước khi vào phòng thi. Lưu ý Durability của tất cả các class đều là 99.999999999% (11 số 9).

Standard Intelligent-Tiering Standard-IA One Zone-IA Glacier Instant Retrieval Glacier Flexible Retrieval Glacier Deep Archive
Availability 99,99% 99,9% 99,9% 99,5% 99,9% 99,99% 99,99%
Availability SLA 99,9% 99% 99% 99% 99% 99,9% 99,9%
Availability Zones ≥ 3 ≥ 3 ≥ 3 1 ≥ 3 ≥ 3 ≥ 3
Min. Storage Duration Charge None None 30 Days 30 Days 90 Days 90 Days 180 Days
Min. Billable Object Size None None 128 KB 128 KB 128 KB 40 KB 40 KB
Retrieval Fee None None Per GB retrieved Per GB retrieved Per GB retrieved Per GB retrieved Per GB retrieved

Bảng giá dưới đây minh họa độ chênh lệch chi phí giữa các hạng — đây là lý do tồn tại của cả cơ chế lifecycle.

Standard Intelligent-Tiering Standard-IA One Zone-IA Glacier Instant Retrieval Glacier Flexible Retrieval Glacier Deep Archive
Storage Cost (per GB per month) $0.023 $0.0025 – $0.023 $0.0125 $0.01 $0.004 $0.0036 $0.00099
Retrieval Cost (per 1000 request) GET: $0.0004
POST: $0.005
GET: $0.0004
POST: $0.005
GET: $0.001
POST: $0.01
GET: $0.001
POST: $0.01
GET: $0.01
POST: $0.02
GET: $0.0004
POST: $0.03
Expedited: $10
Standard: $0.05
Bulk: free
GET: $0.0004
POST: $0.05
Standard: $0.10
Bulk: $0.025
Retrieval Time Instantaneous Instantaneous Instantaneous Instantaneous Instantaneous Expedited (1–5 mins)
Standard (3–5 hours)
Bulk (5–12 hours)
Standard (12 hours)
Bulk (48 hours)
Monitoring Cost (per 1000 objects) $0.0025

S3 Express One Zone là một storage class riêng, hướng tới hiệu năng cao trong một Availability Zone duy nhất. Object của nó được lưu trong một Directory Bucket — tức là bucket nằm gọn trong một AZ (slide minh họa bucket stephane--use1-az4--x-s3 trong Region us-east-1, Availability Zone AZ 4, và chính tên bucket đã mã hóa thông tin AZ).

Đặc tính:

  • Xử lý được hàng trăm nghìn request mỗi giây với latency một chữ số millisecond.
  • Hiệu năng tốt hơn S3 Standard tới 10 lần, với chi phí thấp hơn 50%.
  • Durability cao (99.999999999%)Availability 99,95%.
  • Cho phép đặt storage và compute trong cùng một AZ — nhờ đó giảm latency.

Use case: các ứng dụng nhạy cảm với latency, ứng dụng tiêu thụ nhiều dữ liệu (data-intensive), AI & ML training, financial modeling, media processing, HPC… Nó cũng tích hợp tốt nhất với SageMaker Model Training, Athena, EMR, Glue

Chủ đề Phải nhớ
Bucket Tên globally unique, nhưng bucket thuộc một region; 3–63 ký tự, không in hoa, không _, không phải IP, không bắt đầu xn--, không kết thúc -s3alias
Object Key = full path = prefix + object name; không có directory thật trong bucket; tối đa 5 TB, > 5 GB phải multi-part upload, tag tối đa 10
Quyền truy cập Được phép khi (IAM ALLOW HOẶC resource policy ALLOW) VÀ không có explicit DENY; public → Bucket Policy, user trong account → IAM Policy, EC2 → Instance Role, account khác → Bucket Policy
Block Public Access Chống lộ dữ liệu; đặt được ở mức account; bucket không bao giờ public thì để bật
Static Website URL có dạng bucket-name.s3-website-aws-region.amazonaws.com hoặc bucket-name.s3-website.aws-region.amazonaws.com; 403 Forbidden = bucket policy chưa cho public read
Versioning Bật ở mức bucket; file có trước khi bật có version null; suspend không xóa version cũ
Replication Bắt buộc versioning ở cả hai bucket, copy asynchronous; chỉ object mới (object cũ cần S3 Batch Replication); không có chaining; xóa kèm version ID không được nhân bản
Durability vs Availability Durability 11 số 9 cho mọi class; availability khác nhau theo class (Standard 99,99% ≈ 53 phút/năm)
Min. storage duration Standard & Intelligent-Tiering: None; Standard-IA & One Zone-IA: 30 ngày; Glacier IR & Flexible: 90 ngày; Deep Archive: 180 ngày
Thời gian lấy dữ liệu Glacier Instant Retrieval: millisecond; Flexible: Expedited 1–5 phút / Standard 3–5 giờ / Bulk 5–12 giờ; Deep Archive: Standard 12 giờ / Bulk 48 giờ
Intelligent-Tiering Tự chuyển tier, không có phí retrieval; tự động ở 30 ngày (IA) và 90 ngày (Archive Instant Access)
S3 Express One Zone Directory Bucket trong 1 AZ, latency một chữ số ms, nhanh hơn Standard 10 lần, rẻ hơn 50%, availability 99,95%