Features

  • Hosting static website

  • Versioning

  • Encryption

  • Security

  • S3 Access Logs

  • Replication 

  • Pre-Signed URLs

  • Lifecycle Management

  • Multipart uploads & Byte-range fetches

  • S3 Transfer Acceleration

  • Delete Object

  • Data consistency

  • Prefix

  • Object Lock

  • Requester Pays

  • Notification

  • S3 Select

  • CORS

  • Accessing S3 from EC2

  1. Hosting static website

    • Upload 2 file index.html & error.html

    • Config Hosting Website:

  2. Versioning
    1. Allow uploading multiple versions of file, protect against unintended deletes

    2. Enabled at the bucket level

    3. Cannot disable

    4. Price: charged 2 files

  3. Encryption


    SSE-S3

     header: “x-amz-server-side-encryption": "AES256"

    SSE-KMS 

    header: “x-amz-server-side-encryption": ”aws:kms"

    SSE-C

    - Every request provided headers

    - S3 does not store the encryption key

    Client Side Encryption

    - Clients must encrypt data before sending to S3 

    - Clients must decrypt data when retrieving from S3

    1. Server-side encryption with Amazon S3 managed keys (SSE-S3):

      • Tính bảo mật: Mã hóa được quản lý hoàn toàn bởi Amazon S3, không yêu cầu bạn quản lý khóa.
      • Quản lý khóa: Không cần quản lý khóa, dễ triển khai.
      • Hiệu suất: Hiệu suất tốt vì quản lý bởi Amazon S3.
      • Chi phí: Không có phí cho việc quản lý khóa.
    2. Server-side encryption with AWS Key Management Service keys (SSE-KMS):

      • Tính bảo mật: Sử dụng AWS Key Management Service (KMS) để quản lý khóa, cung cấp tính bảo mật cao hơn.
      • Quản lý khóa: Đòi hỏi quản lý khóa, bao gồm quản lý quyền truy cập.
      • Hiệu suất: Hiệu suất tốt, nhưng có thể ảnh hưởng đến hiệu suất nhất định về mặt tài nguyên.
      • Chi phí: Chi phí phát sinh từ việc sử dụng AWS KMS.
    3. Dual-layer server-side encryption with AWS Key Management Service keys (DSSE-KMS):

      • Tính bảo mật: Kết hợp cả SSE-S3 và SSE-KMS để tăng cường bảo mật.
      • Quản lý khóa: Yêu cầu quản lý khóa như SSE-KMS.
      • Hiệu suất: Hiệu suất có thể bị ảnh hưởng do sử dụng hai lớp mã hóa.
      • Chi phí: Chi phí cao hơn so với SSE-S3 hoặc SSE-KMS vì việc sử dụng cả hai.
    4. Bucket Key (Không phải là encrytion)

      1. Bucket Key (Khóa Bucket) là một tính năng của Amazon S3, cho phép bạn quản lý việc mã hóa dữ liệu trên cấp độ bucket. Khi bạn kích hoạt Bucket Key, S3 sẽ sử dụng khóa mã hóa duy nhất được tạo ra cho bucket đó để mã hóa và giải mã các đối tượng trong bucket. Điều này có nghĩa là các đối tượng được lưu trữ trong bucket sẽ được mã hóa bằng cùng một khóa, giúp tăng cường bảo mật cho dữ liệu trong bucket.

      2. Khi bạn tắt Bucket Key, dữ liệu trong bucket sẽ không được mã hóa bằng khóa bucket nữa và sẽ quay trở lại sử dụng cách mã hóa mặc định của S3 (ví dụ: SSE-S3 hoặc SSE-KMS). Khi bạn bật Bucket Key, S3 sẽ sử dụng khóa bucket để mã hóa và giải mã dữ liệu trong bucket đó.
  4. Security 
    1. User based
      1. IAM policies
    2. Resource Based
      1. Bucket Policies

        1. Grant public access to the bucket

        2. Force objects to be encrypted at upload

        3. Grant access to another account (Cross Account)

        4. Block public access use for preventing company data leaks

      2. Bucket Access Control List (ACL) và Object Access Control List (ACL)

        1. Grant basic read/write permissions to other AWS accounts

  5. S3 Access Logs

    S3 Access Logs là một tính năng của Amazon S3 cho phép bạn ghi lại các hoạt động truy cập vào các đối tượng (objects) trong bucket của mình. Việc ghi log này cung cấp cho bạn thông tin chi tiết về cách mà người dùng hoặc ứng dụng của bạn tương tác với dữ liệu trong S3. Dưới đây là một số mục đích chính của việc sử dụng S3 Access Logs:

    1. Giám Sát và Theo Dõi: S3 Access Logs cung cấp thông tin về các hoạt động truy cập vào các đối tượng trong bucket của bạn. Bằng cách này, bạn có thể theo dõi ai đã truy cập vào dữ liệu của bạn, khi nào họ đã truy cập, và từ đâu họ đã truy cập.

    2. Phân Tích Bảo Mật: Bằng cách phân tích S3 Access Logs, bạn có thể phát hiện ra các hoạt động không bình thường hoặc có dấu hiệu của việc tấn công hoặc vi phạm bảo mật, giúp bạn đưa ra các biện pháp phòng ngừa và bảo vệ dữ liệu của mình.

    3. Tối Ưu Hóa Hiệu Suất: Phân tích S3 Access Logs cũng có thể giúp bạn hiểu rõ hơn về cách mà dữ liệu của bạn được truy cập, từ đó tối ưu hóa cấu trúc lưu trữ và hiệu suất của ứng dụng.

    4. Tuân Thủ Quy Định: Nhiều tổ chức yêu cầu phải duy trì log hoạt động để tuân thủ các quy định pháp lý hoặc chứng nhận bảo mật. Sử dụng S3 Access Logs có thể giúp bạn đáp ứng các yêu cầu này.

    Tóm lại, S3 Access Logs là một công cụ quan trọng giúp bạn giám sát, bảo vệ và tối ưu hóa việc sử dụng dữ liệu trong Amazon S3, cũng như đáp ứng các yêu cầu pháp lý và bảo mật.

    1. For audit purposes, you may want to log all access to S3 buckets

    2. That data can be analyzed using data analysis tools…

    3. Format: https://docs.aws.amazon.com/AmazonS3/latest/userguide/LogFormat.html

    4. Guide: https://www.youtube.com/watch?v=E6QXs3JaFsQ

  6. Replication

    1. Type:
      • Cross Region Replication (CRR):

        • Compliance: Bằng cách sao chép dữ liệu sang một bucket khác, bạn có thể đáp ứng các yêu cầu về tuân thủ, bảo mật và quy định của ngành công nghiệp.

        • Lower latency access: Bằng cách sao chép dữ liệu vào các khu vực gần người dùng hoặc hệ thống, bạn có thể giảm thiểu độ trễ khi truy cập dữ liệu, cung cấp trải nghiệm người dùng tốt hơn.

        • Replication across accounts: Bằng cách sao chép dữ liệu sang các tài khoản AWS khác nhau, bạn có thể chia sẻ dữ liệu với các đối tác hoặc bên thứ ba một cách an toàn và dễ dàng. Điều này có thể hữu ích cho việc chia sẻ dữ liệu giữa các tổ chức hoặc đối tác kinh doanh.

    2. Must enable versioning in source and destination

    3. After activating, only new objects are replicated (not retroactive)

    4. Guide: https://www.youtube.com/watch?v=_6admeBN-lI
      1. Tạo ra 2 bucket với 2 region khác nhau trước. 
      2.  
  7. Pre-Signed URLs

    1. Support SDK & CLI

    2. Tạo URL public access Object trong một khoảng thời gian nhất định

    3. Usecases: 

      • Cho phép chỉ những người dùng đã đăng nhập có thể tải xuống một video cao cấp từ bucket S3 của bạn: Bằng cách tạo pre-signed URLs chỉ dành cho người dùng đã đăng nhập, bạn có thể kiểm soát việc truy cập vào nội dung cao cấp và đảm bảo rằng chỉ có những người dùng đã xác thực mới có thể truy cập vào video đó.

      • Cho phép một danh sách người dùng thay đổi liên tục có thể tải xuống các tệp bằng cách tạo động URL: Bằng cách tạo pre-signed URLs động, bạn có thể cung cấp quyền truy cập tạm thời cho các người dùng cụ thể trong một khoảng thời gian nhất định mà không cần phải cấp quyền truy cập dài hạn.

      • Cho phép một người dùng tải lên một tệp vào một vị trí cụ thể trong bucket của bạn: Bằng cách tạo pre-signed URLs cho việc tải lên, bạn có thể tạo điều kiện cho việc tải lên dữ liệu từ một người dùng tới một vị trí cụ thể trong bucket của bạn, đồng thời giữ cho quyền truy cập này được kiểm soát và tạm thời.

    4. Tutorial: https://blog.ascendingdc.com/quick-tutorial-to-integrate-amazon-s3-presigned-url/
    5. Guide: https://www.youtube.com/watch?v=VBgA4YV32Dc
  8. Lifecycle Management
    1. You can transit objects between storage classes 

    2. Transition actions: It defines when objects are transitioned to another storage class

      • Move objects to Standard IA class 60 days after creation

      • Move to Glacier for archiving after 6 months

    3. Expiration actions: configure objects to expire (delete) after some time

      1. Access log files can be set to delete after a 365 days

      2. Can be used to delete old versions of files (if versioning is enabled)

    4. Guide: https://www.youtube.com/watch?v=53eHNSpaMJI
  9. Multipart uploads & Byte-range fetches
    1. Multipart uploads và Byte-range fetches là hai tính năng quan trọng của Amazon S3:

      1. Multipart uploads:

        • Ý nghĩa: Multipart uploads cho phép bạn tải lên các đối tượng lớn vào Amazon S3 bằng cách chia chúng thành các phần nhỏ hơn và tải lên đồng thời. Điều này giúp tăng tốc độ tải lên, giảm nguy cơ bị gián đoạn và cải thiện khả năng xử lý lỗi.
        • Ví dụ: Nếu bạn muốn tải lên một video có kích thước lớn lên Amazon S3, bạn có thể sử dụng multipart uploads để chia video thành các phần nhỏ hơn và tải lên song song. Điều này sẽ giúp giảm thời gian tải lên và giảm nguy cơ mất dữ liệu do sự cố mạng.
      2. Byte-range fetches:

        • Ý nghĩa: Byte-range fetches cho phép bạn lấy một phần cụ thể của một đối tượng lớn từ Amazon S3 thay vì phải tải về toàn bộ đối tượng. Điều này hữu ích khi bạn chỉ cần một phần nhỏ của một tệp hoặc khi bạn muốn tải về dữ liệu theo yêu cầu từ đối tượng lớn mà không cần phải tải xuống toàn bộ nội dung.
        • Ví dụ: Nếu bạn muốn phát trực tiếp một video từ Amazon S3, bạn có thể sử dụng byte-range fetches để chỉ tải về phần của video mà người dùng đang xem thay vì tải xuống toàn bộ video. Điều này giúp giảm băng thông mạng và tăng trải nghiệm người dùng.
    2. AWS SDK (for Application), REST API (for application not support SDK), AWS CLI allow upload single object up to 5 GB and can download multiple files at once

    3. AWS Console allow upload single object up to 160 GB and can download 1 single file at once

    4. If uploading more than 5GB, must use “multi-part upload” (Min: 5 MB, Max: 5 TB)

    5. Byte-range

    6. Best practices
      • If the file is larger than 100MB then use multipart file, byte-range fetches (1 part = 100 MB)

      • Must use for files > 5GB

      • Doc: Link
      • Guide: Trong video thực hành
  10. S3 Transfer Acceleration (S3TA)
    1. Amazon S3 Transfer Acceleration (S3TA) là một dịch vụ của Amazon S3 được thiết kế để tăng tốc độ truy cập và tải lên dữ liệu vào Amazon S3 bằng cách sử dụng một mạng lưới tối ưu hóa. Dịch vụ này sử dụng cơ sở hạ tầng của Amazon CloudFront để cung cấp tốc độ truy cập cao hơn bằng cách tận dụng các máy chủ gần người dùng và đường truyền mạng tối ưu
    2. Increase transfer speed by transfering file to an AWS edge location which will forward the data to the S3 bucket in the target region

    3. Support upload, download data when far away via Edge Loccation

    4. Guide
  11. Delete Object
    1. API allow delete object up to 1000 objects at once

    2. Only delete newest version => can restore object

    3. Setup MFA to delete Object (Not support Console)

      Guide: https://www.youtube.com/watch?v=dy-pPiIHTLA

    4. Set up Lifecycle Management for automatically removing the object
    5. Normal delete
  12. Data consistency
    1. Strong read-after-write consistency

      • After a successful write of a new object (new PUT) or an overwrite or delete of an existing object (overwrite PUT or DELETE) then User subsequent read request immediately receives the latest version of the object
  13. Prefix
    Việc tạo tiền tố (prefix) trong Amazon S3 có thể mang lại một số lợi ích trong việc tổ chức và quản lý dữ liệu của bạn một cách hiệu quả đặc biệt là hiệu suất sử dụng các tiền tố có thể giúp cải thiện hiệu suất khi tìm kiếm hoặc truy cập vào các đối tượng trong S3, đặc biệt khi bạn cần thực hiện các tác vụ phức tạp như đọc, ghi hoặc xóa nhiều đối tượng cùng một lúc.
    1. S3 automatically scales to high request rates, latency 100-200 ms

    2. Your application can achieve at least 3,500 PUT/COPY/POST/DELETE and 5,500 GET/HEAD requests per second per prefix in a bucket

    3. There are no limits to the number of prefixes in a bucket, no additional cost

    4. Example:

      • Prefix: /data/ => 3500/s for UPDATE & 5,500/s for GET

      • Prefix: /data/2021/08/14/ and /data/2021/08/15/ => 7000/s for UPDATE & 11000/s for GET

    5. Best practices

      • Create prefix as much as possible

      • Random prefix

  14. Object Lock
    1. Can't delete or edit uploaded files

    2. Use for "Write Once Read Many" (WORM) files

    3. Default: Disable, Auto enable Versioning

    4. 2 retention:

      • Retention Period: specifies a fixed period

      • Legal Hold: same protection, no expiry date

    5. 2 modes:

      1. Governance

        • users can't overwrite or delete an object version or alter its lock settings unless they have special permissions

      2. Compliance

        • a protected object version can't be overwritten or deleted by any user, including the root user in your AWS account
    6. Guide:

      • https://www.youtube.com/watch?v=XQVm0ebdz3E
  15. Requester Pays
    1. In general, bucket owners pay for all Amazon S3 storage and data transfer costs associated with their bucket

    2. With Requester Pays buckets, the requester instead of the bucket owner pays the cost of the request and the data download from the bucket

    3. Helpful when you want to share large datasets with other accounts

  16. Notification
    S3 Notifications trong AWS là một cách để theo dõi và phản ứng tự động khi có sự kiện xảy ra trong các tài nguyên S3 của bạn, chẳng hạn như khi một đối tượng mới được tải lên hoặc xóa đi. Bằng cách sử dụng S3 Notifications, bạn có thể kích hoạt các hành động như gửi thông báo qua email, kích hoạt một chức năng Lambda, hoặc ghi lại sự kiện vào SNS topic.
    1. Getting notification when upload, delete, … objects
    2. Guide:
      1. SQS: https://www.youtube.com/watch?v=U8e-bfY01Hw
      2. SNS: https://www.youtube.com/watch?v=ZdrgkRFVheU
  17. S3 Select

    S3 Select là một dịch vụ trong AWS cho phép bạn truy vấn dữ liệu trực tiếp từ các đối tượng lưu trữ trong Amazon S3 bằng cách sử dụng SQL. Thay vì tải xuống toàn bộ đối tượng và sau đó xử lý dữ liệu, bạn có thể chỉ trích xuất một phần hoặc tập hợp dữ liệu mà bạn cần trực tiếp từ đối tượng S3.

    Dưới đây là các bước cơ bản để sử dụng S3 Select:

    1. Tạo một Bucket S3 và tải lên các đối tượng dữ liệu của bạn: Đầu tiên, bạn cần có một bucket S3 và các đối tượng dữ liệu mà bạn muốn truy vấn.

    2. Xác định và thực thi truy vấn S3 Select: Bạn có thể thực thi truy vấn S3 Select thông qua AWS Command Line Interface (CLI), SDKs hoặc giao diện điều khiển AWS. Bạn sẽ cung cấp truy vấn SQL SELECT như bạn làm với một cơ sở dữ liệu.

    3. Xử lý kết quả trả về: Kết quả từ truy vấn S3 Select có thể được trả về dưới dạng CSV hoặc JSON, tùy thuộc vào yêu cầu của bạn. Bạn có thể tiếp tục xử lý kết quả như bạn muốn.

    Sử dụng S3 Select có thể giảm thiểu việc truyền dữ liệu và tiết kiệm thời gian và chi phí so với việc tải toàn bộ đối tượng và xử lý nó ở phía client. Điều này đặc biệt hữu ích khi bạn chỉ quan tâm đến một phần nhỏ của dữ liệu trong một đối tượng lớn.

    1. Works on objects stored in CSV, JSON, Apache Parquet format

    2. Also works with objects that are compressed with GZIP or BZIP2, server-side encrypted objects

    3. Using SQL Statement

    4. The maximum length of a record in the input or result is 1 MB

    5. Guide: https://www.youtube.com/watch?v=jy3mel5Pzn4
  18. Hosting static website
    1. S3 can host static websites and have them accessible on the internet

    2. Auto scaling

    3. Name bucket is same of website domain

    4. The website URL will be: <bucket-name>.s3-website-<AWS-region>.amazonaws.com

  19. CORS

    Cross-Origin Resource Sharing (CORS) là một cơ chế trong các trình duyệt web để cho phép một trang web tại một nguồn (origin) nào đó yêu cầu tài nguyên từ một nguồn (origin) khác mà không bị chặn bởi Same-Origin Policy.

    Trong ngữ cảnh của Amazon S3, bạn có thể cấu hình CORS để cho phép các truy cập từ các trang web hoặc tên miền khác yêu cầu tài nguyên từ các bucket S3 của bạn. Điều này hữu ích khi bạn muốn phục vụ các tài nguyên như hình ảnh, video hoặc các tài liệu từ S3 trực tiếp trên các trang web của mình mà không gặp vấn đề về lỗi CORS trong trình duyệt.

    Để cấu hình CORS trên một bucket S3, bạn cần thêm một cấu hình CORS vào bucket đó. Cấu hình này thường được thực hiện thông qua JSON và xác định các nguồn nào được phép truy cập tài nguyên từ bucket, phương thức HTTP nào được phép (GET, POST, PUT, DELETE,...) và các tiêu đề tùy chỉnh.

    mặc định, khi không có cấu hình CORS nào được áp dụng trong bucket S3, các request từ các trang web khác sẽ bị chặn bởi lỗi CORS.

    Dưới đây là một ví dụ cơ bản về một cấu hình CORS:

    [
        {
            "AllowedHeaders": ["*"],
            "AllowedMethods": ["GET", "POST", "PUT"],
            "AllowedOrigins": ["http://example.com", "https://example.com"],
            "ExposeHeaders": []
        }
    ]
    

    Trong ví dụ này, CORS cho phép truy cập từ các nguồn http://example.com và https://example.com, và cho phép các phương thức GET, POST, và PUT. Tiêu đề tùy chỉnh không được expose cho phép.

    Lưu ý rằng việc cấu hình CORS chỉ cần thiết khi bạn muốn phục vụ tài nguyên từ bucket S3 cho các trang web hoặc ứng dụng web khác. Nếu chỉ sử dụng S3 để lưu trữ và tải xuống các tài nguyên từ máy chủ hoặc ứng dụng khác, việc này không cần thiết.
    - Hướng dẫnhttps://www.youtube.com/watch?v=kQDirIEV5PE
    - Trang để test: https://resttesttest.com/

  20. Accessing S3 from EC2

    Using IAM Role instead of storing access key in application (avoid hacker scan access key)

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Learning English Everyday