S3 CORS - MFA Delete
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/app1và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.comvà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
- Các request sẽ bị chặn, trừ khi server đích cho phép truy cập thông qua header CORS. Ví dụ:
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.comhay 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.comgọ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?