S3 CORS - MFA Delete

3 phút đọcSeries: NoteBook: AWS Certified Solutions Architect Associate SAA-C031 lượt xem

Tổng quan

  • Cross-Origin Resource Sharing (CORS) – Chia sẻ tài nguyên giữa các Origin khác nhau
  • Origin = scheme (giao thức) + host (domain) + port
    Ví dụ: https://www.example.com
    (Port mặc định: 443 cho HTTPS, 80 cho HTTP)
  • CORS là một cơ chế phía trình duyệt web, cho phép gửi request đến một origin khác so với origin ban đầu mà người dùng đang truy cập.
  • Same origin: http://example.com/app1 và http://example.com/app2
    👉 Cùng protocol, domain, port → được coi là cùng origin → không cần CORS
  • Different origins: http://www.example.com và http://other.example.com
    👉 Dù chỉ khác subdomain cũng bị coi là khác origin → cần CORS
    • Các request sẽ bị chặn, trừ khi server đích cho phép truy cập thông qua header CORS. Ví dụ: Access-Control-Allow-Origin

Luồng hoạt động chi tiết:

 

1. Browser gửi Preflight Request (OPTIONS)
  • Khi browser phát hiện request sắp gửi là cross-origin và có dùng các method đặc biệt như PUT, DELETE, hoặc dùng custom header (ví dụ Authorization, Content-Type: application/json), nó sẽ tự động gửi một request OPTIONS trước.
  • Request này không có dữ liệu, mục đích là để "hỏi" xem server kia có cho phép request từ https://www.example.com hay không.
OPTIONS /               <-- Không có body
Host: www.other.com     <-- Server đích
Origin: https://www.example.com
2. Server https://www.other.com trả về Preflight Response
  • Nếu server cho phép CORS, nó sẽ trả về header như:
Access-Control-Allow-Origin: https://www.example.com
Access-Control-Allow-Methods: GET, PUT, DELETE

→ Điều này có nghĩa:

  • Cho phép origin https://www.example.com gọi
  • Cho phép dùng các method GET, PUT, DELETE

Nếu server không trả về các header này, browser sẽ chặn luôn request chính, không gửi nữa.

3. Browser tiếp tục gửi actual request (GET, PUT...)
  • Sau khi nhận được Preflight Response hợp lệ, browser mới thực hiện actual request:
GET /
Host: www.other.com
Origin: https://www.example.com

→ Lúc này browser tin tưởng và thực hiện call như bình thường.

S3 - CORS

Luồng hoạt động:

1. Trình duyệt tải trang index.html từ my-bucket-html

GET /index.html
Host: http://my-bucket-html.s3-website.us-west-2.amazonaws.com

→ Thành công, vì gọi trực tiếp từ origin.

2. Trong file HTML có ảnh được load từ bucket khác (my-bucket-assets)

<img src="http://my-bucket-assets.s3-website.us-west-2.amazonaws.com/images/coffee.jpg" />

→ Đây là Cross-Origin Request vì:

  • Origin của index.html: http://my-bucket-html.s3-website.us-west-2.amazonaws.com
  • Origin của ảnh: http://my-bucket-assets.s3-website.us-west-2.amazonaws.com → khác host ⇒ CORS applies

3. Browser gửi request với Origin header

GET /images/coffee.jpg
Host: http://my-bucket-assets.s3-website.us-west-2.amazonaws.com
Origin: http://my-bucket-html.s3-website.us-west-2.amazonaws.com

→ Trình duyệt chờ header Access-Control-Allow-Origin từ server để xác nhận.

Lưu ý quan trọng:

  • CORS không được enable mặc định trên S3 → bạn cần thêm CORS config JSON cho bucket:
[
  {
    "AllowedOrigins": ["http://my-bucket-html.s3-website.us-west-2.amazonaws.com"],
    "AllowedMethods": ["GET"],
    "AllowedHeaders": ["*"]
  } ] 

Hoặc dùng "*" trong AllowedOrigins nếu muốn allow từ mọi nơi (không khuyến khích nếu có auth/token liên quan)

4. Server S3 (bucket my-bucket-assets) trả về ảnh + CORS header

Access-Control-Allow-Origin: http://my-bucket-html.s3-website.us-west-2.amazonaws.com

→ Trình duyệt thấy origin hợp lệ ⇒ Cho phép load ảnh về.

S3 - MFA Delete

  • MFA (Multi-Factor Authentication) – buộc người dùng phải tạo một mã trên thiết bị (thường là điện thoại di động hoặc thiết bị phần cứng) trước khi thực hiện các thao tác quan trọng trên S3.
  • MFA sẽ được yêu cầu đối với:
    • Xóa vĩnh viễn một object version
    • Tạm dừng tính năng Versioning trên bucket
  • MFA sẽ không được yêu cầu đối với:
    • Kích hoạt Versioning
    • Liệt kê các phiên bản đã bị xóa
  • Để sử dụng MFA Delete, Versioning phải được kích hoạt trên bucket.
  • Chỉ chủ sở hữu bucket (tài khoản root) mới có thể bật/tắt MFA Delete.
Bạn thấy bài này thế nào?