Amazon S3 Error: AccessControlListNotSupported 🚫
Amazon S3 Error: AccessControlListNotSupported 🚫
You may encounter an error similar to:
An error occurred (AccessControlListNotSupported) when calling the PutObject operation:
The bucket does not allow ACLs
At first glance, this looks like a permissions problem.
Usually it isn't.
In most cases, AWS is telling you that the bucket has been configured to
disable
ACLs
entirely.
📌 Key Term
ACLAccess Control List. An older S3 permission mechanism that can grant access to individual objects and buckets.
What AWS Is Telling You
Modern S3 buckets often use:
-
IAM Policies -
Bucket Policies -
Object Ownership
instead of ACLs.
When a bucket has ACLs disabled, S3 rejects requests that attempt to set them.
AWS is essentially saying:
"This bucket no longer uses ACLs."
Why This Happens
Many older applications automatically include ACL settings during uploads.
For example:
aws s3 cp file.txt s3://my-bucket/ --acl public-read
Years ago this was common.
Today many organizations disable ACLs completely.
When that happens, the upload fails.
📌 Common Mistake
Adding:
--acl public-readwhen the bucket is configured with ACLs disabled.
Check Object Ownership
Open the S3 console and review:
Bucket
↓
Permissions
↓
Object Ownership
If you see:
Bucket owner enforced
ACLs are disabled.
This is now AWS's recommended configuration.
📌 Key Term
Bucket owner enforcedAn Object Ownership setting that disables ACLs and makes policy-based permissions the source of truth.
The Fastest Fix
Remove ACL-related parameters from your upload process.
Instead of:
aws s3 cp file.txt s3://my-bucket/ --acl public-read
Use:
aws s3 cp file.txt s3://my-bucket/
Then manage access through:
-
IAM Policies -
Bucket Policies
instead of ACLs.
Check Your SDK or Application
Many applications quietly set ACLs behind the scenes.
Examples include:
- Older deployment tools
- Legacy scripts
- Third-party backup software
- Older SDK examples
If the error persists, inspect the application configuration for ACL settings.
📌 Remember
This error is usually not about missing permissions.
It's about using a permission mechanism that the bucket no longer supports.
The Big Idea
AWS has been moving customers away from ACLs and toward policy-based access control.
When you see
AccessControlListNotSupported, the bucket is often working exactly as designed.
The solution is usually simple:
- Remove ACL settings
- Use bucket policies or IAM policies
-
Confirm Object Ownership is set to
Bucket owner enforced
Once you make that change, uploads typically succeed without further modification.
Happy troubleshooting! ☁️
Aaron Rose is a software engineer and technology writer at tech-reader.blog.
Catch up on the latest explainer videos, podcasts, and industry discussions below.

