How to make all Objects in AWS S3 bucket public by default?
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
To make all objects in an AWS S3 bucket public by default, you need to adjust several settings pertaining to the bucket's policy, public access, and permissions. AWS S3 is designed with security in mind, and allowing public access to all objects should be done cautiously, being mindful of data sensitivity and compliance requirements. Below, we'll outline the steps involved, providing technical details and examples where relevant.
Understanding AWS S3 Public Access
Amazon S3 provides storage for the Internet, and any object uploaded to a bucket can potentially be made public. However, this isn't the default setting, emphasizing AWS's prioritization of security. To make objects public by default, you'll need to manipulate:
- Block Public Access Settings - AWS introduced this feature to prevent public access, which has to be overridden.
- Bucket Policies - JSON documents that define what actions are allowed or denied for certain principles.
- Access Control Lists (ACLs) - To provide "everyone" the necessary permissions.
Steps to Make Objects Public by Default
Step 1: Modify Block Public Access Settings
- Navigate to the S3 console: Log in to your AWS Management Console and open the S3 service.
- Select your bucket: Choose the bucket you want to configure.
- Edit Block Public Access settings: Under the "Permissions" tab, find "Block Public Access" settings. Click "Edit" and deselect all options under "BlockPublicAcls" to allow public access through ACLs or bucket policies.
Step 2: Set a Public Bucket Policy
To make all objects publicly accessible by default, you'll need to implement a specific bucket policy. Bucket policies are JSON-based, and the following is a template to allow public read access:
Principal: "*" to allow actions from any user.Action: "s3:GetObject" to allow the GetObject action.Resource: Refers to all objects within the bucket, using the syntaxarn:aws:s3:::your-bucket-name/*.
Step 3: Update Bucket ACL (if needed)
While AWS recommends using bucket policies for new use cases, Access Control Lists (ACLs) can still be used to grant public access:
- Under the "Permissions" tab, select "Access Control List."
- Allow public read access to the objects by checking the object access box for "Everyone":
Step 4: Verification
After making these changes, verify that objects are publicly accessible:
- Upload an object to the bucket.
- Copy its object URL.
- Paste the URL in a browser to check if you can view/download the object without any authentication.
Summary Table
| Step | Action | Description |
| 1 | Modify Block Public Access | Uncheck the Block Public Access settings to permit overrides by policies and ACLs. |
| 2 | Set a Public Bucket Policy | Implement a JSON policy allowing s3:GetObject for all users on all bucket objects. |
| 3 | Update Bucket ACL | (Optional) Ensure ACL is configured to allow public read access to all objects. |
| 4 | Verification | Check the public accessibility of objects by accessing their URL directly in a web browser. |
Considerations
- Security Risk: Making all objects publicly accessible can lead to unintended data exposure. Be sure to understand the implications and ensure compliant usage.
- Logging and Monitoring: Enable AWS CloudTrail and S3 server access logging for the bucket to keep track of access and changes.
- Version Control: For buckets supporting versioning, ensure that appropriate permissions are set for each object version.
Making AWS S3 bucket objects public by default should be done with caution and usually only in dev/testing environments or when hosting publicly accessible static content. Security best practices should always guide any decision to allow public access in AWS services.
Related reading
- how to make AWS api gateway accept http instead of https
- How to make CloudFront never cache index.html on S3 bucket
- How to make http cloud function only accessible from cloud endpoints
- How to make MSCK REPAIR TABLE execute automatically in AWS Athena
- How to make Terraform to read AWS Credentials file?
- How to make use of Kubernetes port names?
- How to making async calls to Amazon Bedrock
- How to manage pod scheduling in aws EKS?

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.