Tạo S3 bucket policy với công cụ AWS Policy Generator
1. Giới thiệu
Bucket là đơn vị logic để lưu trữ dữ liệu của dịch vụ S3, mặc định các quyền truy cập các object trong bucket thì chỉ cho User chứa bucket đó được quyền truy cập, và Access list (quyền truy cập) với các User khác bị disabled.
Để các object được truy cập bởi các user khác với quyền tương ứng thì ta phải thực hiện gán quyền cho từng object nhưng như thế sẽ mất nhiều thời gian để thực hiện cho từng object. Nên viêc thực hiện tạo bucket policy để áp dụng cho Bucket nào đó để quy định quyền cho Folder hoặc object sẽ thuận tiện hơn.
2. Hướng dẫn
Hiện AWS cung cấp 1 công cụ hỗ trợ tạo policy bằng trình duyệt web thuận tiện, nhanh chóng, địa chỉ truy cập https://awspolicygen.s3.amazonaws.com/policygen.html

Step 1: chọn S3 Bucket policy
Step 2:
- Effect có 2 lựa chọn là Allow (cho phép) hoặc Deny (từ chối) thể hiện quyền thực thi
- Principal là định danh người dùng, giá trị “*” ứng với anonymous user cho phép tất cả user
- AWS Service : Amazon S3
- Actions: lựa chọn các quyền được sử dụng ví dụ như GetObject, ListBucket, …
- Amazon Resource Name (ARN) là tài nguyên sẽ được áp dụng
- arn:aws:s3:::<bucket-name> : resource là bucket thường đi kèm với các thao tác tác động tới Bucket như ListBucket, PutBucketAcl, PutBucketCORS …
- arn:aws:s3:::<bucket-name>/*: toàn bộ thành phần chứa trong bucket, ngoài ra có thể chỉ định prefix cụ thể như folder trong bucket arn:aws:s3:::<bucket>/<folder>/*.
Sau khi điền đủ thông tin thì nhấn Add Statement

Step 3: Generate Policy sẽ tạo ra thông tin policy dưới dạng JSON

Dùng thông tin trên apply vào bucket bằng trang quản lý dịch vụ hoặc các tools hỗ trợ như s3cmd, s3browser, aws-cli …
Một số ví dụ cụ thể
Ví dụ 1: cho phép tải toàn bộ object trong Bucket (Folder)
{
"Id": "Policy1698306933714",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1698305948104",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::s3zam/Images/*",
"Principal": "*"
}
]
}
Ví dụ 2: chỉ cho phép các domain trong danh sách được xem nội dụng trong Bucket (Folder)
{
"Id": "Policy1698307087710",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1698307082300",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::s3zam/videos/*",
"Condition": {
"StringLike": {
"aws:Referer": [
"https://longvan.net",
"https://s3-hcm-r1.longvan.net"
]
}
},
"Principal": "*"
}
]
}