Bucket Policy
Bucket Policy là tập quy tắc kiểm soát truy cập dạng JSON, cho phép bạn định nghĩa ai có thể thực hiện hành động gì trên tài nguyên nào trong bucket. Đây là cơ chế bảo mật mạnh mẽ hơn so với chỉ dùng chế độ Private/Public đơn giản.
Truy cập Bucket Policy
Bước 1: Vào Simple Storage → Buckets, chọn vào tên bucket cần cấu hình.
Bước 2: Chọn tab Bucket Policy trong phần quản lý bucket.

Bước 3: Trang hiển thị editor JSON để nhập/chỉnh sửa policy. Chọn Áp dụng templates để xem các mẫu policy có sẵn.

Cấu trúc Policy JSON
Một Bucket Policy theo chuẩn S3 có cấu trúc:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Tên định danh câu lệnh (tuỳ chọn)",
"Effect": "Allow | Deny",
"Principal": "*",
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::ten-bucket/*"]
}
]
}
Các trường chính:
| Trường | Mô tả |
|---|---|
Version | Phiên bản chính sách — luôn dùng "2012-10-17" |
Statement | Mảng các câu lệnh chính sách |
Sid | Tên định danh câu lệnh (tùy chọn, để dễ quản lý) |
Effect | Allow (cho phép) hoặc Deny (từ chối) |
Principal | Đối tượng áp dụng: "*" = mọi người, hoặc chỉ định user/account cụ thể |
Action | Danh sách hành động S3 được phép/từ chối |
Resource | ARN của bucket hoặc object áp dụng |
Các Action S3 phổ biến
| Action | Mô tả |
|---|---|
s3:GetObject | Đọc/tải về object |
s3:PutObject | Upload object mới |
s3:DeleteObject | Xóa object |
s3:ListBucket | Liệt kê object trong bucket |
s3:GetBucketPolicy | Đọc policy của bucket |
s3:PutBucketPolicy | Ghi policy mới cho bucket |
s3:GetBucketCors | Đọc cấu hình CORS |
s3:* | Tất cả các hành động S3 |
Ví dụ Policy thường dùng
1. Cho phép đọc công khai (Static Website / CDN)
Cho phép mọi người đọc tất cả object trong bucket:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::ten-bucket/*"
}
]
}
2. Chỉ cho phép đọc thư mục cụ thể
Cho phép đọc công khai chỉ với các file trong thư mục public/:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadPublicFolder",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::ten-bucket/public/*"
}
]
}
3. Từ chối xóa object (bảo vệ dữ liệu)
Ngăn mọi người (kể cả owner) xóa object trong bucket:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyDeleteObject",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:DeleteObject",
"Resource": "arn:aws:s3:::ten-bucket/*"
}
]
}
4. Cho phép một IP cụ thể upload
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUploadFromIP",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::ten-bucket/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "203.0.113.10/32"
}
}
}
]
}
Áp dụng Policy
Bước 1: Nhập hoặc chỉnh sửa JSON policy trong editor.
Bước 2: Chọn Save hoặc Apply để lưu và áp dụng policy.
Bước 3: Hệ thống xác thực cú pháp JSON và áp dụng ngay lập tức.
Nếu JSON có lỗi cú pháp, portal hiển thị thông báo lỗi và không lưu policy.
Xóa Policy
Để xóa toàn bộ policy và đưa bucket về trạng thái mặc định, xóa sạch nội dung trong editor và chọn Save. Bucket trở về cấu hình Access Policy (Private/Public) đã đặt khi tạo.
Policy với "Effect": "Deny" luôn được ưu tiên hơn "Effect": "Allow", kể cả khi bucket đang ở chế độ Public. Hãy kiểm tra kỹ trước khi áp dụng Deny policy để tránh khóa chính mình ra ngoài.