[AWS] Chapter 9: AWS S3
Xin chào tất cả bạn, lại là mình đây ạ. Trong chương này, chúng ta sẽ tìm hiểu về Amazon S3, một dịch vụ lưu trữ đám mây phổ biến của AWS. Vậy S3 là gì nhỉ? Có những loại S3 nào? Cách sử dụng S3 như thế nào? Hãy cùng mình tìm hiểu nhé!
I. Amazon S3 là gì?
Amazon S3 (Simple Storage Service) là một dịch vụ lưu trữ đối tượng được cung cấp bởi Amazon Web Services (AWS). S3 cho phép bạn lưu trữ và truy xuất bất kỳ lượng dữ liệu nào, bất kỳ lúc nào, từ bất kỳ đâu trên web. Dưới đây là một số đặc điểm chính của Amazon S3:
- Lưu trữ đối tượng: S3 lưu trữ dữ liệu dưới dạng các đối tượng trong các bucket. Mỗi đối tượng bao gồm dữ liệu, siêu dữ liệu và một ID duy nhất.
- Khả năng mở rộng: S3 có khả năng mở rộng linh hoạt, cho phép bạn lưu trữ từ vài byte đến hàng petabyte dữ liệu.
- Độ bền và tính sẵn sàng cao: S3 được thiết kế để cung cấp độ bền dữ liệu 99.999999999% (11 số 9) và tính sẵn sàng 99.99%.
- Bảo mật: S3 cung cấp nhiều tính năng bảo mật như mã hóa dữ liệu, kiểm soát truy cập và tích hợp với AWS Identity and Access Management (IAM).
- Tích hợp với các dịch vụ AWS khác: S3 tích hợp chặt chẽ với nhiều dịch vụ AWS khác như EC2, Lambda, CloudFront, và nhiều dịch vụ khác.
Amazon S3 có thể được sử dụng trong nhiều trường hợp khác nhau, bao gồm:
- Sao lưu và lưu trữ: Lưu trữ dữ liệu sao lưu một cách an toàn và đáng tin cậy.
- Khôi phục sau thảm họa: Dữ liệu có thể được khôi phục nhanh chóng trong trường hợp xảy ra thảm họa.
- Lưu trữ lâu dài: Lưu trữ dữ liệu lâu dài với chi phí thấp.
- Lưu trữ đám mây lai: Kết hợp lưu trữ tại chỗ và đám mây để tối ưu hóa chi phí và hiệu suất.
- Lưu trữ ứng dụng: Lưu trữ các ứng dụng web và di động.
- Lưu trữ phương tiện: Lưu trữ và phân phối các tệp phương tiện như hình ảnh, video.
- Hồ dữ liệu và phân tích dữ liệu lớn: Lưu trữ và phân tích dữ liệu lớn.
- Phân phối phần mềm: Lưu trữ và phân phối các tệp phần mềm.
- Trang web tĩnh: Lưu trữ và phục vụ các trang web tĩnh.
II. Các khái niệm trong S3
1. Bucket
Bucket là một thùng chứa chứa tất cả các đối tượng (objects) trong Amazon S3. Mỗi bucket phải có một tên duy nhất trên toàn bộ AWS. Tên bucket phải tuân thủ các quy tắc sau:
- Không được có chữ hoa, không có dấu gạch dưới (_).
- Tên bucket phải có độ dài từ 3 đến 63 ký tự.
- Tên không được là một địa chỉ IP.
- Tên bucket phải bắt đầu bằng chữ cái thường hoặc số.
- Không được bắt đầu với tiền tố
xn--
. - Không được kết thúc bằng hậu tố
-s3alias
.
Đặc điểm của Bucket trong S3:
- Tên bucket phải duy nhất toàn cầu (áp dụng cho tất cả các khu vực và tất cả các tài khoản).
- Bucket được xác định ở cấp khu vực (region level).
- Dù S3 trông giống như một dịch vụ toàn cầu, nhưng các bucket được tạo ra trong một khu vực cụ thể.
2. Object
-
Đối tượng (tệp) trong S3 có một Key (khóa).
-
Key là đường dẫn đầy đủ của đối tượng:
- Ví dụ:
s3://my-bucket/my_file.txt
- Ví dụ:
s3://my-bucket/my_folder1/another_folder/my_file.txt
- Ví dụ:
-
Key được cấu thành bởi tiền tố (prefix) + tên đối tượng:
- Ví dụ:
s3://my-bucket/my_folder1/another_folder/my_file.txt
- Ví dụ:
-
Lưu ý: Trong S3, không có khái niệm “thư mục” thực sự trong các bucket (mặc dù giao diện người dùng có thể khiến bạn nghĩ khác).
- Thực chất chỉ là các khóa có tên rất dài chứa các dấu gạch chéo ("/").
-
Kích thước tối đa của một đối tượng là 5TB (5000GB).
-
Nếu tải lên đối tượng lớn hơn 5GB, bạn phải sử dụng tính năng multi-part upload (tải lên nhiều phần).
-
Metadata: là danh sách các cặp khóa/giá trị văn bản (có thể là metadata hệ thống hoặc do người dùng định nghĩa).
-
Tags: cặp khóa/giá trị Unicode (tối đa 10) – hữu ích cho việc quản lý bảo mật và vòng đời đối tượng.
-
Version ID: mã định danh phiên bản của đối tượng (nếu tính năng phiên bản hóa được bật).
3. Security
3.1 Bảo Mật Dựa Trên Người Dùng (User-Based Security)
- Chính Sách IAM (IAM Policies):
- Quy định các lệnh API nào được phép thực hiện cho một người dùng cụ thể trong IAM.
- Ví dụ: Bạn có thể giới hạn quyền truy cập của một người dùng chỉ cho phép họ tải lên tệp mà không được phép xóa.
3.2 Bảo Mật Dựa Trên Tài Nguyên (Resource-Based Security)
- Chính Sách Bucket (Bucket Policies):
- Đặt ra các quy tắc rộng cho cả bucket thông qua giao diện S3 console.
- Chính sách này có thể cho phép truy cập cross-account (truy cập giữa các tài khoản khác nhau).
- Danh Sách Kiểm Soát Truy Cập Đối Tượng (Object Access Control List - ACL):
- Quy định chi tiết quyền truy cập cho từng đối tượng cụ thể. ACL cho phép kiểm soát ai có thể đọc, ghi hoặc xóa một đối tượng.
- Lưu ý: Tính năng ACL có thể bị vô hiệu hóa nếu không cần thiết.
- Danh Sách Kiểm Soát Truy Cập Bucket (Bucket Access Control List - ACL):
- Ít được sử dụng hơn so với Object ACL, nhưng vẫn có thể quản lý quyền truy cập toàn bộ bucket.
- ACL cho bucket cũng có thể bị vô hiệu hóa.
3.3 Ghi Chú Quan Trọng:
- Một người dùng IAM có thể truy cập vào một đối tượng S3 nếu:
- Chính sách IAM của người dùng cho phép HOẶC chính sách tài nguyên cho phép truy cập.
- VÀ không có lệnh từ chối (DENY) rõ ràng nào được thiết lập.
3.4 Mã Hóa (Encryption):
- Bạn có thể mã hóa các đối tượng trong Amazon S3 bằng cách sử dụng các khóa mã hóa (encryption keys).
- Điều này giúp bảo vệ dữ liệu của bạn khỏi các truy cập trái phép và đảm bảo tính bảo mật của dữ liệu lưu trữ.
Phần này mình sẽ có một bài viết riêng về bảo mật trong Amazon S3, các bạn hãy đón chờ đọc kỹ nhé!
4. Bucket Policies
Trong Amazon S3, policies cũng tương tự như IAM Policies, là những tài liệu JSON cho phép bạn kiểm soát quyền truy cập vào các tài nguyên S3 của mình, chẳng hạn như các bucket và đối tượng. Policies này có thể cho phép hoặc từ chối quyền truy cập dựa trên một số điều kiện.
Một chính sách S3 Bucket bao gồm các thành phần sau:
- Resources: Chỉ định các bucket và đối tượng mà chính sách áp dụng.
- Effect: Xác định hành động cho phép (Allow) hoặc từ chối (Deny).
- Actions: Các hành động của API S3 mà bạn muốn cho phép hoặc từ chối, chẳng hạn như s3:GetObject, s3:PutObject.
- Principal: Tài khoản hoặc người dùng mà chính sách áp dụng.
Ví dụ cho phép truy cập công khai vào bucket:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::example-bucket/*"
}
]
}
Ví dụ cho phép bắt buộc mã hóa đối tượng khi tải lên
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ForceEncryption",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::example-bucket/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "AES256"
}
}
}
]
}
Ví dụ cấp quyền truy cập cho một tài khoản khác (Cross Account):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CrossAccountAccess",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:root"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::example-bucket",
"arn:aws:s3:::example-bucket/*"
]
}
]
}
4. Static Website Hosting
- Amazon S3 có thể lưu trữ các website tĩnh và cho phép truy cập chúng qua Internet.
- URL của website sẽ phụ thuộc vào khu vực (region) của bạn:
http://bucket-name.s3-website-aws-region.amazonaws.com
- HOẶC
http://bucket-name.s3-website.aws-region.amazonaws.com
- Nếu bạn nhận được lỗi 403 Forbidden, hãy kiểm tra lại chính sách bucket để đảm bảo rằng nó cho phép đọc công khai.
5. Versioning
- Bạn có thể bật tính năng phiên bản hóa (versioning) cho các tệp trong Amazon S3.
- Tính năng này được kích hoạt ở cấp độ bucket.
- Khi bạn ghi đè lên tệp có cùng key, phiên bản của nó sẽ thay đổi: 1, 2, 3…
- Thực hành tốt nhất: Bạn nên bật phiên bản hóa cho bucket để:
- Bảo vệ khỏi việc xóa nhầm (có khả năng khôi phục lại phiên bản trước đó).
- Dễ dàng quay lại phiên bản trước nếu cần.
- Lưu ý:
- Bất kỳ tệp nào không được phiên bản hóa trước khi bật tính năng này sẽ có phiên bản là “null”.
- Việc tạm ngưng phiên bản hóa sẽ không xóa các phiên bản trước đó.
6. Replication
- Bạn phải bật tính năng phiên bản hóa cho cả bucket nguồn và bucket đích.
- Sao chép chéo vùng (Cross-Region Replication - CRR):
- Sao chép dữ liệu giữa các vùng khác nhau.
- Sao chép cùng vùng (Same-Region Replication - SRR):
- Sao chép dữ liệu trong cùng một vùng.
- Các bucket có thể thuộc các tài khoản AWS khác nhau.
- Việc sao chép diễn ra không đồng bộ.
- Bạn cần cung cấp các quyền IAM thích hợp cho S3 để thực hiện sao chép.
- Các trường hợp sử dụng:
- CRR: Tuân thủ quy định, truy cập với độ trễ thấp hơn, sao chép giữa các tài khoản.
- SRR: Tập hợp log, sao chép trực tiếp giữa các tài khoản sản xuất và thử nghiệm.
- Sau khi bạn bật tính năng sao chép, chỉ các đối tượng mới được sao chép.
- Bạn có thể tùy chọn sao chép các đối tượng hiện có bằng cách sử dụng S3 Batch Replication:
- Sao chép các đối tượng hiện có và các đối tượng không thành công trong việc sao chép trước đó.
- Đối với các thao tác DELETE:
- Bạn có thể sao chép các marker xóa từ nguồn đến đích (tùy chọn).
- Việc xóa đối tượng với phiên bản ID sẽ không được sao chép (để tránh việc xóa ác ý).
- Không có sự “liên kết chuỗi” trong sao chép:
- Nếu bucket 1 sao chép vào bucket 2, và bucket 2 sao chép vào bucket 3,
- Thì các đối tượng được tạo trong bucket 1 sẽ không được sao chép sang bucket 3.
III. S3 Storage Classes
Amazon S3 cung cấp nhiều lớp lưu trữ (Storage Classes) khác nhau để phù hợp với các nhu cầu khác nhau về lưu trữ dữ liệu. Dưới đây là các lớp lưu trữ chính của Amazon S3:
1. Amazon S3 Standard - General Purpose
Lớp lưu trữ này được thiết kế cho các dữ liệu thường xuyên được truy cập và đòi hỏi độ trễ thấp, cùng với khả năng chịu lỗi cao. Đây là lớp lưu trữ mặc định và phù hợp cho các ứng dụng đòi hỏi truy cập nhanh và liên tục, như nội dung website, dữ liệu phân tích và các ứng dụng di động.
- Tính năng chính: Hiệu năng cao, có khả năng tự động sao chép dữ liệu qua nhiều vùng sẵn sàng (Availability Zones).
- Use Case: Lưu trữ dữ liệu cho các ứng dụng yêu cầu độ trễ thấp, ví dụ như hệ thống quản lý nội dung, lưu trữ dữ liệu người dùng cuối.
2. Amazon S3 Standard-Infrequent Access (IA)
Lớp này được thiết kế cho các dữ liệu không thường xuyên truy cập nhưng vẫn cần khả năng truy cập nhanh khi cần. Mặc dù chi phí lưu trữ thấp hơn so với S3 Standard, nhưng chi phí truy cập sẽ cao hơn.
- Tính năng chính: Chi phí lưu trữ thấp, nhưng phí truy cập dữ liệu cao hơn. Dữ liệu được sao chép qua nhiều vùng sẵn sàng.
- Use Case: Lưu trữ dữ liệu mà không cần truy cập thường xuyên, như sao lưu hoặc dữ liệu mà chỉ cần truy cập khi có yêu cầu đặc biệt.
3. Amazon S3 One Zone-Infrequent Access
Lớp lưu trữ này tương tự như S3 Standard-IA, nhưng dữ liệu chỉ được lưu trữ trong một vùng sẵn sàng duy nhất. Điều này giúp giảm chi phí lưu trữ hơn nữa nhưng đi kèm với rủi ro cao hơn, do không có khả năng chịu lỗi giữa các vùng.
- Tính năng chính: Chi phí lưu trữ thấp nhất trong các lớp lưu trữ IA, dữ liệu chỉ được lưu trữ trong một vùng sẵn sàng.
- Use Case: Lưu trữ dữ liệu không cần tính bền bỉ cao, như dữ liệu sao lưu phụ hoặc các bản sao dữ liệu tạm thời.
4. Amazon S3 Glacier Instant Retrieval
Lớp lưu trữ này được thiết kế cho dữ liệu lưu trữ lâu dài mà cần truy cập ngay lập tức khi có yêu cầu. Đây là lựa chọn lý tưởng cho các dữ liệu cần được lưu trữ với chi phí thấp nhưng vẫn cần truy xuất nhanh.
- Tính năng chính: Truy xuất dữ liệu ngay lập tức, chi phí lưu trữ thấp.
- Use Case: Lưu trữ các tài liệu pháp lý, y tế hoặc dữ liệu lưu trữ lâu dài khác mà cần khả năng truy xuất tức thời.
5. Amazon S3 Glacier Flexible Retrieval
Đây là một lựa chọn lưu trữ với chi phí cực thấp, thích hợp cho việc lưu trữ dữ liệu lâu dài mà không cần truy cập thường xuyên. Thời gian truy xuất dữ liệu có thể từ vài phút đến vài giờ.
- Tính năng chính: Lưu trữ chi phí rất thấp, có tùy chọn truy xuất dữ liệu từ vài phút đến vài giờ.
- Use Case: Lưu trữ dữ liệu lưu trữ dài hạn như bản ghi kiểm toán, dữ liệu tài liệu số, hoặc sao lưu dữ liệu.
6. Amazon S3 Glacier Deep Archive
Lớp lưu trữ này là lựa chọn rẻ nhất cho lưu trữ dữ liệu lâu dài, với thời gian truy xuất từ 12 đến 48 giờ. Thích hợp cho các dữ liệu mà bạn gần như không bao giờ cần truy cập, nhưng vẫn cần lưu trữ trong thời gian dài.
- Tính năng chính: Chi phí lưu trữ thấp nhất, thời gian truy xuất dữ liệu từ 12 đến 48 giờ.
- Use Case: Lưu trữ dữ liệu cần giữ lâu dài cho các mục đích tuân thủ hoặc lưu trữ dữ liệu mà gần như không bao giờ cần truy cập.
7. Amazon S3 Intelligent Tiering
Lớp lưu trữ này tự động chuyển dữ liệu giữa các lớp lưu trữ dựa trên mô hình truy cập, giúp tối ưu hóa chi phí mà không cần người dùng phải tự quản lý.
- Tính năng chính: Tự động chuyển dữ liệu giữa các lớp lưu trữ dựa trên tần suất truy cập, tối ưu hóa chi phí mà không cần can thiệp thủ công.
- Use Case: Lưu trữ dữ liệu với các mẫu truy cập không thể đoán trước, cần tối ưu hóa chi phí lưu trữ mà không cần quản lý thủ công.
IV. Kết bài
Yeah, vậy là chúng ta đã đi qua được các phần S3 cơ bản nhất. Mình sẽ hẹn các bạn ở các bài viết tiếp theo với nhiều kiến thức hữu ích khác với S3 Advanced nhé!
Bài Viết Liên Quan
[AWS] Chapter 8: AWS ELB, ASG Hands On
Trong bài blogs này, chúng ta sẽ thực hành với AWS Elastic Load Balancer (ELB) và Auto Scaling Group (ASG).
Đọc Thêm[AWS] Chapter 7: AWS ELB - Elastic Load Balancing & Auto Scaling Groups
Xin chào các bạn, hôm nay mình sẽ tiếp tục với series bài viết về AWS. Trong bài viết này, mình sẽ giới thiệu với các bạn về AWS ELB - Elastic Load Balancing.
Đọc Thêm[AWS] Chapter 6: AWS EC2 Storage Hands On
Xin chào các bạn, lại là mình đây. Trong chương này, chúng ta sẽ thực hành với các loại lưu trữ khác nhau trên EC2.
Đọc Thêm