Environment
- RustFS version: rustfs/rustfs:latest
- Client: AWS SDK for Go v2
Question
I'm trying to allow anonymous public access to specific objects in a bucket
while keeping others private, without using presigned URLs.
I've tried two approaches and neither works:
Approach 1 — Canned ACL
Setting ACL: types.ObjectCannedACLPublicRead during PutObject.
Upload succeeds but anonymous GET returns 403.
Approach 2 — Tag-based bucket policy
Setting input.Tagging = "public-read=true" during PutObject, with this policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"AWS": ""},
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::oblax/"],
"Condition": {
"StringEquals": {
"s3:ExistingObjectTag/public-read": "true"
}
}
}
]
}
Anonymous GET still returns 403 AccessDenied.
What does work
A bucket policy with no conditions allows anonymous access to everything —
but I need per-object control.
Questions
- Are object-level canned ACLs (
public-read) supported?
- Are tag-based policy conditions (
s3:ExistingObjectTag) supported?
Environment
Question
I'm trying to allow anonymous public access to specific objects in a bucket
while keeping others private, without using presigned URLs.
I've tried two approaches and neither works:
Approach 1 — Canned ACL
Setting
ACL: types.ObjectCannedACLPublicReadduringPutObject.Upload succeeds but anonymous GET returns 403.
Approach 2 — Tag-based bucket policy
Setting
input.Tagging = "public-read=true"duringPutObject, with this policy:{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"AWS": ""},
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::oblax/"],
"Condition": {
"StringEquals": {
"s3:ExistingObjectTag/public-read": "true"
}
}
}
]
}
Anonymous GET still returns 403 AccessDenied.
What does work
A bucket policy with no conditions allows anonymous access to everything —
but I need per-object control.
Questions
public-read) supported?s3:ExistingObjectTag) supported?