Amazon S3 — buckets and public objects

What you’ll learn
Amazon Simple Storage Service (S3) is object storage for files, images, logs, backups, and static site artifacts. In this guide you create a bucket, upload a test object, and attach a minimal bucket policy so the object’s URL loads anonymously in a browser—useful for learning how GetObject permissions work.
S3 complements compute: for example you might serve user uploads or marketing assets from S3 while your app runs on EC2 or behind an Application Load Balancer. Pairing S3 with CloudFront and private buckets is the usual production pattern; this page keeps the console flow from the original tutorial with clearer security framing.
Prerequisites
Before you begin, ensure you have the following:
- An AWS account with permission to create S3 buckets and edit bucket policies (for example
s3:CreateBucket,s3:PutBucketPolicy, and object write actions). - Comfort using the S3 console in a non-production account or sandbox, because you will briefly allow public read access.
Create an S3 bucket
Bucket names are globally unique and DNS-like; pick a name you control, for example my-company-assets-dev.
- Sign in to the AWS Management Console and open S3.
Choose Create bucket.

Amazon S3 Under General configuration, type a unique Bucket name and choose an AWS Region.

Amazon S3 Under Object Ownership, keep ACLs disabled (recommended) unless you have a legacy workflow that requires ACLs.

Amazon S3 To follow this tutorial’s public object URL test, clear Block all public access and acknowledge the warning. This exposes only what your bucket policy explicitly allows—still verify you are not uploading sensitive data.

Amazon S3 - Leave other defaults unless your organisation requires encryption or versioning from day one, then choose Create bucket.
Upload objects
- Open the bucket from the bucket list.
Choose Upload and add one or more files (for example a PNG or JPEG).

Amazon S3 Review permissions and properties, then choose Upload at the bottom of the wizard.

Amazon S3
Configure a public read bucket policy
- Stay in the bucket and open the Permissions tab.
- Scroll to Bucket policy and choose Edit.
Paste a policy that allows anonymous
s3:GetObjecton all objects in the bucket. Replaceyour-bucket-namewith your bucket name (the ARN must match exactly).Bucket policy (JSON){ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-bucket-name/*" } ] }- Save the policy. If the console reports errors, confirm the JSON is valid and the bucket name in the ARN matches.
Test the object URL
- Open the Objects list inside the bucket.
- Select an object you uploaded.
Under Object URL, copy the HTTPS link or open it in a new tab.

Amazon S3 When the policy is correct, the image or file loads without signing in. You can embed that URL in HTML
<img src="...">for static marketing pages, or migrate the same objects behind CloudFront later.
Browser
Explore more S3 capabilities
After you are comfortable with buckets and policies, experiment with features that matter for operations and cost:
- Versioning — retain multiple variants of an object and recover from accidental overwrites.
- Server access logging — record request metadata to another bucket for auditing.
- Static website hosting — serve
index.htmlerror documents from a website endpoint (often combined with CloudFront). - Lifecycle rules — transition objects to cheaper storage classes or expire them on a schedule.
Key takeaways
Buckets are regional containers; object keys form the logical path inside the bucket.
Block Public Access must allow your intent before any Principal: "*" policy can grant anonymous reads.
The Object URL is a quick smoke test; production stacks usually keep data private and use CloudFront or signed URLs.
Frequently asked questions
ListObjectsV2 and GetObject.Next: copy objects locally
Use the AWS CLI to download one file, a whole prefix, or filtered file types from the same bucket.
S3 is designed for eleven nines of durability for objects stored across multiple devices and Availability Zones in a Region. Your application still needs correct permissions, encryption choices, and lifecycle rules for compliance and cost control.
8 people found this page helpful
