30 tháng 9, 2026 · 6 phút đọc
Cách công khai bucket Amazon S3
Bucket S3 mới chặn mọi truy cập công khai, và ACL bị tắt theo mặc định, nên nút “make public” cũ trên từng đối tượng không còn tác dụng. Quyền đọc công khai giờ đến từ bucket policy.
Bước 1: cho phép bucket policy công khai
- Mở bucket trong S3 console và vào tab Permissions.
- Trong Block public access (bucket settings), chọn Edit.
- Bỏ chọn hai thiết lập liên quan đến bucket and access point policies. Bạn có thể để nguyên hai thiết lập ACL, vì policy không dùng ACL.
- Lưu và xác nhận.
Nếu thiết lập này cũng được bật ở cấp tài khoản (Block Public Access settings for this account trong thanh bên S3), nó sẽ được ưu tiên hơn thiết lập của bucket và cũng phải cho phép policy.
Bước 2: thêm bucket policy đọc công khai
Vẫn ở Permissions, sửa Bucket policy và dán nội dung sau, với tên bucket của bạn:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicRead",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket/*"
}
]
}
Policy này cho phép đọc đối tượng, không cho phép liệt kê bucket. Để chỉ công khai một thư mục, hãy thu hẹp resource, ví dụ arn:aws:s3:::your-bucket/public/*.
Với AWS CLI, hai bước trên như sau:
aws s3api put-public-access-block --bucket your-bucket \
--public-access-block-configuration \
BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=false,RestrictPublicBuckets=false
aws s3api put-bucket-policy --bucket your-bucket --policy file://policy.jsonBước 3: tìm URL công khai
Giờ đối tượng có thể truy cập qua URL dạng virtual-hosted:
https://your-bucket.s3.eu-central-1.amazonaws.com/2026/09/report.pdf
Dùng vùng của bucket bạn. Nếu địa chỉ này trả về AccessDenied, thì thiết lập Block Public Access vẫn đang chặn policy, hoặc tên bucket trong policy bị gõ sai.
Phương án an toàn hơn: CloudFront với bucket riêng tư
Nếu không muốn mở chính bucket, hãy giữ Block Public Access bật và tạo một CloudFront distribution với bucket làm origin và Origin access control (OAC). CloudFront sẽ hiển thị bucket policy chỉ cho phép distribution đó đọc đối tượng. Bạn có HTTPS trên tên miền của riêng mình, bộ nhớ đệm, và bucket vẫn riêng tư. Xem tên miền riêng cho liên kết bucket.
Câu hỏi thường gặp
Vì sao “Make public using ACL” không còn hoạt động?
Từ tháng 4 năm 2023, bucket mới có Object Ownership đặt là Bucket owner enforced, tức là ACL bị tắt. Quyền truy cập công khai phải đến từ bucket policy hoặc CloudFront.
Bucket công khai có cho người khác liệt kê tệp của tôi không?
Không, với policy ở trên. Nó chỉ cho phép s3:GetObject. Muốn liệt kê thì cần s3:ListBucket trên chính bucket, và bạn không nên cấp quyền đó công khai.
Bucket công khai có làm tăng hóa đơn AWS không?
Bạn trả tiền cho số yêu cầu và lưu lượng dữ liệu ra khi mọi người tải tệp. Với những tệp được chia sẻ nhiều, CloudFront hoặc một nhà cung cấp không tính phí egress như Cloudflare R2 thường rẻ hơn.