[AWS] Chapter 11: AWS S3 Advanced (Phần 2)

  • Kai
  • August 26, 2024

Xin chào tất cả các bạn, lại là mình đây. Trong bài blogs này, chúng ta sẽ tiếp tục tìm hiểu về những tính năng nâng cao của AWS S3. Let’s go!

I. S3 Encryption

Amazon S3 hiện áp dụng mã hóa phía máy chủ với khóa được quản lý của Amazon S3 (SSE-S3) làm mức mã hóa cơ sở cho mọi thùng trong Amazon S3. Bắt đầu từ ngày 5 tháng 1 năm 2023, tất cả các đối tượng mới tải lên Amazon S3 đều được tự động mã hóa mà không mất thêm chi phí và không ảnh hưởng đến hiệu suất. Trạng thái mã hóa tự động cho cấu hình mã hóa mặc định của thùng S3 và đối với các đối tượng mới tải lên có sẵn trong nhật ký AWS CloudTrail, S3 Inventory, S3 Storage Lens, bảng điều khiển Amazon S3 và dưới dạng tiêu đề phản hồi API Amazon S3 bổ sung trong Giao diện dòng lệnh AWS và AWS SDK.

1. Overview

Bạn có thể mã hoá objects trong S3 bằng cách sử dụng các phương pháp sau:

  • Server-side encryption: Amazon S3 mã hoá objects của bạn trước khi lưu chúng vào AWS data centers, và sau đó sẽ decrypts objects khi bạn download chúng.
    • SSE-S3: Được bật mặt định. Sử dụng các khóa được xử lý, quản lý, và sở hữu bởi AWS để mã hóa các đối tượng S3. Đọc thêm tại đây .
    • SSE-KMS: Sử dụng Dịch vụ Quản lý Khóa của AWS (AWS KMS) để quản lý các khóa mã hóa, cung cấp thêm một lớp bảo mật bằng cách kiểm soát quyền truy cập và quản lý khóa. Đọc thêm tại đây .
    • SSE-C: Dành cho trường hợp bạn muốn tự quản lý các khóa mã hóa của riêng mình. AWS chỉ thực hiện việc mã hóa và giải mã, còn bạn phải chịu trách nhiệm quản lý và bảo mật khóa mã hóa. Đọc thêm tại đây .
    • DSSE-KMS: Tương tự như SSE-KMS, nhưng với DSSE-KMS (Dịch vụ Quản lý Khóa của AWS với Mã hóa Dữ liệu), bạn có thể mã hóa dữ liệu của mình bằng cách sử dụng các khóa mã hóa được quản lý bởi AWS KMS. DSSE-KMS cung cấp thêm một lớp bảo mật bằng cách kiểm soát quyền truy cập và quản lý khóa, đồng thời cho phép bạn mã hóa dữ liệu ở phía máy khách trước khi tải lên S3 và giải mã dữ liệu khi tải xuống từ S3. Đọc thêm tại đây .
  • Client-side encryption: Bạn mã hoá objects của bạn trước khi tải chúng lên Amazon S3. Trong trường hợp này, bạn phải quản lý quy trình mã hoá, khoá mã hoá và các công cụ liên quan.

2. SSE-S3

  • Mã hóa sử dụng các khóa do AWS xử lý, quản lý và sở hữu.
  • Đối tượng được mã hóa ở phía máy chủ.
  • Loại mã hóa: AES-256.
  • Cần thiết phải đặt header "x-amz-server-side-encryption": "AES256".
  • Được bật mặc định cho các bucket mới và các đối tượng mới.

3. SSE-KMS

  • Mã hóa sử dụng các khóa do AWS KMS (Dịch vụ Quản lý Khóa) xử lý và quản lý.
  • Ưu điểm của KMS: người dùng kiểm soát + kiểm tra việc sử dụng khóa qua CloudTrail.
  • Đối tượng được mã hóa ở phía máy chủ.
  • Cần thiết phải đặt header "x-amz-server-side-encryption": "aws:kms".
  • Khi sử dụng SSE-KMS, bạn có thể bị ảnh hưởng bởi các giới hạn KMS.
  • Khi tải lên, nó gọi API GenerateDataKey của KMS.
  • Khi tải xuống, nó gọi API Decrypt của KMS.
  • Các yêu cầu này tính vào hạn ngạch KMS mỗi giây (5500, 10000, 30000 yêu cầu/giây tùy theo vùng).
  • Bạn có thể yêu cầu tăng hạn ngạch qua Console Quota Dịch vụ.

4. SSE-C

  • Mã hóa phía máy chủ sử dụng các khóa hoàn toàn do khách hàng quản lý bên ngoài AWS.
  • Amazon S3 KHÔNG lưu trữ khóa mã hóa mà bạn cung cấp.
  • HTTPS phải được sử dụng.
  • Khóa mã hóa phải được cung cấp trong các header HTTP, cho mỗi yêu cầu HTTP thực hiện.

5. DSSE-KMS

  • Mã hóa sử dụng hai lớp mã hóa.
  • KMS quản lý khóa chính, trong khi khóa phụ do khách hàng cung cấp.
  • Cung cấp mức bảo mật bổ sung bằng cách yêu cầu hai lớp mã hóa cho các đối tượng.
  • Khi sử dụng DSSE-KMS với một Bucket trong S3 thì các khoá KMS phỉa nằm trong cùng 1 Region với Bucket.

6. Client-side Encryption

  • Sử dụng các thư viện khách hàng như Amazon S3 Client-Side Encryption Library.
  • Khách hàng phải mã hóa dữ liệu trước khi gửi đến Amazon S3.
  • Khách hàng phải giải mã dữ liệu khi truy xuất từ Amazon S3.
  • Khách hàng hoàn toàn quản lý các khóa và chu kỳ mã hóa.

7. Encryption in Transit

  • Mã hóa trong quá trình truyền còn gọi là SSL/TLS.
  • Amazon S3 cung cấp hai điểm kết nối:
    • Điểm kết nối HTTP – không mã hóa.
    • Điểm kết nối HTTPS – mã hóa trong quá trình truyền.
  • HTTPS được khuyến nghị và bắt buộc đối với SSE-C.
  • Hầu hết các khách hàng sẽ sử dụng điểm kết nối HTTPS theo mặc định.

II. S3 CORS

1. CORS là gì?

  • Cross-Origin Resource Sharing (CORS) là một cơ chế cho phép các tài nguyên web từ một domain khác có thể truy cập vào tài nguyên của domain hiện tại.
  • Origin = protocol + domain + port. Example http://www.example.com:80.

2. Cách hoạt động của CORS

  • Khi một trình duyệt thực hiện một yêu cầu từ một domain khác, nó sẽ gửi một yêu cầu HTTP OPTIONS trước để kiểm tra xem server có cho phép CORS hay không. Cơ chế này được gọi là preflight request.
  • Preflight request: Trình duyệt gửi một yêu cầu HTTP OPTIONS để kiểm tra xem server có cho phép CORS hay không. Yêu cầu này bao gồm các thông tin về phương thức HTTP và các header sẽ được sử dụng trong yêu cầu chính.- Server sẽ trả về các header CORS để xác định các domain, phương thức HTTP và các header được phép.
  • Server sẽ trả về các header CORS để xác định các domain, phương thức HTTP và các header được phép.
  • Nếu các điều kiện này được đáp ứng, trình duyệt sẽ tiếp tục gửi yêu cầu chính.

3. Cách Amazon S3 đánh giá cấu hình CORS trên một bucket

Khi Amazon S3 nhận được một yêu cầu preflight từ trình duyệt, nó sẽ đánh giá cấu hình CORS của bucket và sử dụng quy tắc CORSRule đầu tiên phù hợp với yêu cầu từ trình duyệt để cho phép yêu cầu giữa các nguồn gốc. Để một quy tắc phù hợp, các điều kiện sau đây phải được thỏa mãn:

  • Origin Header: Header Origin trong yêu cầu CORS đến bucket của bạn phải khớp với các nguồn gốc trong phần tử AllowedOrigins trong cấu hình CORS của bạn.
  • HTTP Methods: Các phương thức HTTP được chỉ định trong Access-Control-Request-Method trong yêu cầu CORS đến bucket của bạn phải khớp với phương thức hoặc các phương thức được liệt kê trong phần tử AllowedMethods trong cấu hình CORS của bạn.
  • Request Headers: Các header được liệt kê trong header Access-Control-Request-Headers trong một yêu cầu preflight phải khớp với các header trong phần tử AllowedHeaders trong cấu hình CORS của bạn. Các quy tắc CORS phải được định nghĩa chính xác trong cấu hình của bạn để đảm bảo rằng yêu cầu từ các nguồn gốc khác được xử lý đúng cách và bảo mật.

III. S3 MFA Delete

  • Multi-Factor Authentication (MFA) là một phương pháp xác thực hai yếu tố. Nó yêu cầu người dùng cung cấp hai yếu tố xác thực để truy cập vào tài khoản của họ. Ở đây là thực hiện các thao tác trên S3 MFA required:
  • Xoá vĩnh viễn một object từ một bucket.
  • Tạm dừng Versioning trên bucket. MFA không required:
  • Enable Versioning.
  • Liệt kê các phiên bản đã xoá.

Để có thể sử dụng MFA Delete, Versioning phải được bật trên bucket. Chỉ chủ sở hữu bucket mới có thể bật/ tắt MFA Delete.

IV. S3 Access Logs

  • Mục đích: Để kiểm toán, bạn có thể muốn ghi lại tất cả các truy cập đến các bucket S3.
  • Hoạt động:
    • Mọi yêu cầu gửi đến S3, từ bất kỳ tài khoản nào, dù được phép hay bị từ chối, sẽ được ghi vào một bucket S3 khác.
    • Dữ liệu này có thể được phân tích bằng các công cụ phân tích dữ liệu.
    • Bucket ghi log mục tiêu phải nằm trong cùng một vùng AWS. Cảnh báo: Không đặt bucket ghi log là monitored bucket. Điều này sẽ tạo ra một vòng lặp ghi log, làm cho bucket của bạn phát triển theo cấp số nhân.

V. Pre-Signed URLs

  • Tạo Pre-Signed URLs: Sử dụng S3 Console, AWS CLI hoặc SDK.
  • Thời gian hết hạn URL:
    • S3 Console: Từ 1 phút đến 720 phút (12 giờ).
    • AWS CLI: Cấu hình thời gian hết hạn bằng tham số --expires-in tính bằng giây (mặc định 3600 giây, tối đa 604800 giây ~ 168 giờ).
  • Quyền hạn: Người dùng được cung cấp URL đã ký sẽ kế thừa quyền hạn của người tạo URL cho GET / PUT.
  • Ví dụ:
    • Cho phép chỉ những người dùng đã đăng nhập tải xuống video cao

VI. S3 Glacier Vault Lock

  • Mô hình WORM (Write Once Read Many):
    • Tạo chính sách Vault Lock.
    • Khóa chính sách để ngăn việc chỉnh sửa trong tương lai (không thể thay đổi hoặc xóa).
    • Hữu ích cho việc tuân thủ và lưu trữ dữ liệu.

VII. S3 Object Lock (Cần kích hoạt Versioning)

  • Mô hình WORM (Write Once Read Many):
    • Ngăn chặn việc xóa phiên bản đối tượng trong một khoảng thời gian cụ thể.
  • Chế độ Retention:
    • Compliance:
      • Các phiên bản đối tượng không thể bị ghi đè hoặc xóa bởi bất kỳ người dùng nào, bao gồm người dùng root.
      • Chế độ retention không thể thay đổi và thời gian retention không thể rút ngắn.
    • Governance:
      • Hầu hết người dùng không thể ghi đè hoặc xóa một phiên bản đối tượng hoặc thay đổi cài đặt khóa của nó.
      • Một số người dùng có quyền đặc biệt để thay đổi retention hoặc xóa đối tượng.
  • Thời gian Retention:
    • Bảo vệ đối tượng trong một khoảng thời gian cố định, có thể kéo dài.
  • Legal Hold:
    • Bảo vệ đối tượng vô thời hạn, độc lập với thời gian retention.
    • Có thể được đặt và gỡ bỏ một cách tự do bằng quyền IAM s3:PutObjectLegalHold.

VIII. Access Points

  • Đơn giản hóa quản lý bảo mật cho các Bucket S3:
  • Mỗi Access Point có:
    • Tên DNS riêng (Internet Origin hoặc VPC Origin).
    • Chính sách access point (tương tự như chính sách bucket) – quản lý bảo mật theo quy mô lớn.

Access Points – VPC Origin

  • Định nghĩa Access Point:
    • Có thể định nghĩa access point chỉ có thể truy cập từ trong VPC.
    • Bạn phải tạo một VPC Endpoint để truy cập vào Access Point (Gateway hoặc Interface Endpoint).
    • Chính sách VPC Endpoint phải cho phép truy cập vào bucket mục tiêu và Access Point.

IX. S3 Object Lambda

  • Sử dụng AWS Lambda Functions để:
    • Thay đổi đối tượng trước khi nó được truy xuất bởi ứng dụng gọi.
    • Chỉ cần một bucket S3, trên đó chúng ta tạo các Access Points và S3 Object Lambda Access Points.
  • Trường hợp sử dụng:
    • Xóa thông tin nhận diện cá nhân cho phân tích hoặc môi trường không phải sản xuất.
    • Chuyển đổi giữa các định dạng dữ liệu, chẳng hạn như chuyển đổi XML sang JSON.
    • Thay đổi kích thước và thêm watermark cho hình ảnh theo yêu cầu, chẳng hạn như người dùng yêu cầu đối tượng.

X. Kết bài

Vậy là chúng ta đã tìm hiểu các kiến thức về AWS S3 mà mình có thể biết. Từ đó mà có thể áp dụng vào các kiến trúc của bạn. Hy vọng rằng bài viết này sẽ giúp ích cho bạn. Hẹn gặp lại ở các bài viết tiếp theo. Cảm ơn các bạn đã đọc bài viết này nhó.

Bài Viết Liên Quan

[AWS] Chapter 10: AWS S3 Advanced

  • Kai
  • August 26, 2024

Xin chào các bạn, trong bài blogs này, chúng ta sẽ tìm hiểu về những tính năng nâng cao của AWS S3.

Đọc Thêm

[AWS] Chapter 9: AWS S3

  • Kai
  • August 25, 2024

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.

Đọc Thêm

[AWS] Chapter 8: AWS ELB, ASG Hands On

  • Kai
  • August 25, 2024

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