S3 - Simple Storage Service

Concept

  • Là dịch vụ lưu trữ dạng Object cung cấp khả năng mở rộng, availability, performance
  • Có thể sử dụng S3 để lưu trữ và bảo vệ nhiều loại data cho các usecase như: data lake, website, mobile, backup & restore, archive, enterprise application, IoT device, Big Data & Analytic
  • Cung cấp nhiều managed feature giúp tối ưu, tổ chức và cấu hình access tới data đáp ứng nhu cầu về business, organization & complicance

Characteristic

  • Là một managed service. User không cần quan tâm tới hạ tầng ở bên dưới.
  • Cho phép lưu file dưới dạng object với size từ 0-5TB. Dạng Object khác với dạng Block là ta không thể chỉnh sửa dữ liệu được, nếu muốn phải download về máy, chỉnh sửa và up lên lại.
  • Hight Durability (11 9s), Scalability, High Availability (99,99%), High performance.
  • Usecase đa dạng (mọi bài toán về lưu trữ lớn tới nhỏ đều có thể sử dụng S3)
  • Cung cấp nhiều class lưu trữ để tiết kiệm chi phí cho tứng loại data.
  • Cung cấp khả năng phân quyền và giới hạn truy cập một cách chi tiết.
  • Dễ sử dụng, có thể kết hợp với nhiều service khác cho bài toán automation và data processing.

Feature

S3 cung cấp các tính năng cơ bản sau:

  • Storage classes: cung cấp nhiều hình thức luu trữ phù hợp cho nhiều loại data khác nhau về nhu cầu access, yêu cầu về durability, thời gian lưu trữ khác nhau giúp KH tùy chọn được class lưu trữ phù hợp từ đó tối ưu chi phí.
  • Storage management: Cung cấp nhiều tính năng liên quan đến quản lý như: Life Cycle, Object Lock, Replication, Bactch Operation
  • Access Management: quản lí truy cập đến bucket và các thư mục thông qua cơ chế resource permission & access list. Block public access, control access via IAM, bucket policy, S3 access point, Access Control List, Ownership, Access Analyzer.
  • Data processing: kết hợp với lambda, SNS, SQS để hỗ trợ xử lý data 1 cách nhanh chóng
  • Auto Logging and Monitoring: cung cấp công cụ monitor S3 bucket và truy vết sử dụng CloudTrail
  • Manual Monitoring Tool: Log lại từng record thực hiện trên bucket
  • Analytic and insight: phân tích storage để optimize
  • Strong consistency: Provide strong read-after-write consistency for PUT and DELETE object (sau khi put hay delete thì request tiếp theo sẽ không truy xuất được nội dung cũ trước khi put hay delete)

Combination

  • Dùng làm nơi lưu trữ file cho các ứng dụng chạy trên EC2, Container, Lambda. Các file có thể đa dạng về loại & kích thước (Image, Video, Document,...)
  • Dùng làm nơi chứa archive log cho hầu hết các dịch vụ khác của AWS (VPC, ALB, APIGateway,...)
  • Dùng làm data source cho các bài toán big data & data warehouse
  • Nơi lưu trữ dữ liệu gửi lên từ các thiết bị IoT
  • Vùng lưu trữ tạm thời cho bài toàn ETL (Extract - Transform - Load) khi kết hợp với lambda
  • Host 1 website tĩnh (html, css, js) khi kết hợp với CloudFont

Bucket policy - Access Control List

  • Access Control List: Quy định quyền access của một AWS Account hoặc nhóm user (group) đến bucket hoặc resource bên trong
  • Thường dùng trong trường hợp muốn cấp access cho một resource cụ thể bên trong bucket mà không muốn thay đổi bucket policy
  • Tuy nhiên gần đây AWS khuyến nghị người đùng khôn nên xài ACL trừ khi có yêu cầu đặc biệt nào đó, thay vào đó hãy sử dụng bucket policy, iam policy & pre-sign URL là đủ để cover hầu hết các usecase

Versioning

  • Sử dụng khi có nhu cầu lưu trữ nhiều version của cùng 1 object
  • tránh đưuojc việc mất mát khi thao tác xóa nhầm hoặc ghi đè (có thể lấy lại version trước đó)
  • Chi phí theo đó sẽ tăng lên so với khi không bật versioning
  • Sau khi bật versioning, nếu tắt versioning thì những object trước khi tắt vẫn sẽ có nhiều version, những object sinh ra sau khi tắt sẽ không có version

Alt text

Nếu tắt tính năng versioning đi, thì object cùng tên tiếp theo được ghi vào sẽ ghi đè vào version có id = null. Nếu hiện vẫn chưa có version nào mà id=null => nó sẽ tạo ra version mới với id là null mà k ghi đè lên các version có id khác mặc dù đã tắt tính năng versioning

Presign URL

  • Khi muốn cấp access tạm thời cho người dùng public tới một object trên S3, AWS cung cấp cơ chế Presign URL
  • User có thể dùng Presign URL để download/upload object trên S3 trong thời gian quy định (được set lúc phát hành URl)
  • Usecase:
    • Muốn cấp access public cho 1 object không muốn thay đổi ACL hoặc thay đổi bucket policy
    • Cần authen người dùng hoặc yêu cầu họ làm gì đó trước khi được download file (vd xenm quảng cáo)
    • Ngăn chặn resource để public vô thời hạn khiến cho tài nguyên bị khai thác bởi bên khác

presign url operating model

Configure CLI Presign URL

Trên CLI cần xác định đã login vào:

aws sts get-caller-identity

aws configure #nếu chưa configure

Tiếp theo tiến hành pháp hành Presigned URL: aws s3 presign + options...

➜ Asus ⚡                                                           20:53:31
▶ aws s3 presign s3://hjn4-bucket/hq720.jpg --expires-in 60
https://hjn4-bucket.s3.ap-southeast-1.amazonaws.com/hq720.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAZ5IVHEEYHXLJRG5P%2F20240123%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20240123T135719Z&X-Amz-Expires=60&X-Amz-SignedHeaders=host&X-Amz-Signature=c5e26cc6133c8597c2b448983c88080ef4b985b8fc5a3328b50d2eaf4146d209

docs ở đây có hướng dẫn cả trên Console và CLI

Storage Classes

S3 cung cấp nhiều storage class khác nhau nhằm giúp người dùng linh động trong việc lựa chọn class phù hợp với nhu cầu, tiết kiệm chi phí:

  • Việc lựa chọn class phụ thuộc và các yếu tổ như :

    • Durability, high availability
    • Thời gian lưu trữ (1 tháng, 1 năm, 5 năm,...)
    • Tần suất truy cập, thời gian cần có file khi yêu cầu
    • Mục đích sử dụng: document, image, log file, backup file, archive
  • Các storage class:

    • S3 standard
    • S3 intelligent Tỉeing
    • S3 standard infrequently access (standard IA)
    • S3 One-zone infrequently access (One zone IA)
    • S3 Glacier:
      • Glacier Instant Retrieval
      • Glacier Flexible Retrieval (Normal Glacier) cái này mình cần request đợi mới download được tùy usecase mà dùng
      • S3 Glacier Deep Archive tối đa 12 tiếng
    • S3 on Outposts

Alt text

Alt text

For more in slide PDF on my local OR here

Life Cycle

  • Tính năng cho phép tự động move object xuống các class lưu trữ thấp hơn hoặc xóa luôn sau một khoảng thời gian nhắm tiết kiệm chi phí
  • Khác với Intelligent Tiering, người dùng sẽ tự quyết định life cycle cho objects (hoặc 1 thư mục), vd sau 90 ngày thì cho xuống Glacier, sau 270 ngày thì xóa hoàn toàn.
  • Phù hợp cho các bài toán lưu trữ Log đã biết trước thời gian thường xuyên access và thời gian có thể xóa

Static website hosting

S3 hỗ trợ host 1 website tĩnh (HTML, CSS, JS)

  • Upload folder static web vào bucket, ở gốc lun. Tức là bucket rồi vào là gặp các file trong folder static web
  • Vào Properties enable cái Static website hosting
  • Sang permission tắt cái Block all public access
  • Edit Bucket policy :
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::hjn4-bucket/*",
            "Condition": {
                "DateGreaterThan": {
                    "aws:CurrentTime": "2024-01-23T15:02:00Z"
                },
                "DateLessThan": {
                    "aws:CurrentTime": "2024-01-23T15:05:00Z"
                }
            }
        }
    ]
}

cái expired time kia là theo chuẩn UTC, Theo giờ VN tức là UTC+7 => do đó convert từ giờ Việt Nam sang UTC ta phải trừ đi 7 hours

Event trigger

  • S3 cung cấp cơ chế trigger 1 event sang dịch vụ khác khi có thay đổi đối với object (upload, delete)
  • Target của trigger có thể là Lambda Function, SNS, SQS.
  • Sample usecase:
    • Resize image khi có người upload image lên s3 bucket, lưu vào các thư mục size khác nhau
    • Giải nén 1 file zip khi có người upload.
    • Extract csv file, xử lý data rồi lưu vào database
    • Notification tới Operator khi có ai xoá 1 file
    • ....

Best practice

  • Chọn region của S3 cùng region với application (EC2, ECS) để tối ưu performance.
  • Sử dụng bucket policy cho những data quan trọng. Cấp quyền vừa đủ cho user/role, hạn chế cấp S3FullAccess.
  • Bật versioning để bảo vệ data tránh bị mất, xoá nhầm.
  • Mã hoá data nhạy cảm (client side or server side).
  • Enforce TLS để yêu cầu sd HTTPS khi truyền nhận file (chống hack).
  • Sử dụng VPC endpoint để tăng tốc truy cập từ application (sẽ học ở bài VPC).
  • Khi host static web, nên kết hợp với CloudFront để tối ưu chi phí và tăng trải nghiệm người dùng.