Skip to content
Amazon S3
AWS track · Storage

Amazon S3

Object storage accessed via an HTTP API, not a filesystem — though key design, storage-class selection, and permission layering all behave like early, hard-to-reverse architecture decisions despite S3's reputation as the AWS service you do not have to think about. Eight pages, in the order the decisions actually depend on each other — start at one, not wherever looks interesting.

Decision drivers for this product
01
Primary access pattern (sequential scan, random lookup, analytics partition pruning) — the key/prefix scheme has to be designed around it before millions of objects exist, not after.
02
Whether content is served directly to end users (egress economics) versus accessed only by internal AWS services.
03
Expected object lifetime against each storage class's minimum storage duration, since a mismatch triggers early-deletion fees that erase the discount.
04
Whether access is same-account or cross-account, and which of IAM policies, bucket policies, or legacy ACLs actually governs a given bucket.
05
Whether the bucket has versioning enabled, since that changes what a plain DELETE actually does to the data.
Decision sequence
01
Core one-way-door
Designing Your Key and Prefix Scheme Before You Have a Million Objects
Free
02
Cost & billing mechanics
Understanding Request and Egress Economics Before Your Bill Surprises You

S3 pricing has independent dimensions that don't show up on the same line as "storage" — PUT/COPY/POST/LIST requests are billed roughly 12.5x higher per-request than GET requests, and data transferred out to the internet is billed separately from storage entirely, with the first 100 GB/month free (aggregated across AWS services) and real per-GB rates beyond that.

Free
03
Cost & billing mechanics
Choosing Storage Classes Without Triggering the Minimum-Duration Trap

Storage class selection is roughly a 23x cost range for the same bytes (S3 Standard at ~$0.023/GB down to Glacier Deep Archive at ~$0.00099/GB) — but the cheaper classes trade that discount for real constraints: minimum storage durations, minimum billable object sizes, and retrieval fees that don't exist on Standard.

Free
04
Security & identity
Choosing an Access Model Before Three Permission Systems Disagree — sign in to unlock

S3 access control isn't one system — it's up to three overlapping ones. IAM policies (identity-based, "what can this principal do"), bucket policies (resource-based, "who can access this bucket"), and legacy ACLs (object- or bucket-level grants) can all apply to the same request simultaneously, with Block Public Access acting as a separate account- or bucket-level override that can silently supersede all three. AWS has also moved the platform's own default since this matters most: since April 2023, every newly created bucket gets Block Public Access enabled and ACLs disabled automatically (the BucketOwnerEnforced object-ownership setting) — the three-way overlap described above is now mainly a concern for buckets created before that change, not a live default for new ones.

05
Scaling & capacity limits
Staying Under the Per-Prefix Request-Rate Ceiling Before Getting Throttled — sign in to unlock
06
Failure mode & consistency
Trusting Read-After-Write, and Knowing What "Delete" Actually Does — sign in to unlock

Since December 2020, S3 delivers strong read-after-write consistency for all operations, automatically, at no extra cost and no performance penalty — a write, overwrite, or delete is immediately visible to any subsequent read or list operation. This is a genuine, dated change from S3's original eventual-consistency model. What it doesn't give you is atomicity across concurrent overlapping writes to the same key — two simultaneous PUTs still resolve last-writer-wins, with no built-in compare-and-swap. S3 closed that specific gap with conditional writes (If-None-Match in 2024, If-Match at re:Invent 2024) rather than by changing the consistency model itself — the two are separate mechanisms solving separate problems.

07
Operational lifecycle
Managing Version Retention Before Noncurrent Versions Quietly Multiply Your Bill — sign in to unlock

S3 Versioning can be enabled and suspended, but never fully disabled once turned on — it's a one-directional switch at the bucket level, and every version of every object is billed at full storage rates for as long as it exists, current or not.

08
Wrong-tool / alternatives
Ruling Out S3: When You Actually Need a Filesystem or a Disk — sign in to unlock

S3 is object storage accessed via an HTTP API — not a filesystem, and that's still true of the core S3 API itself. But the service boundary around S3 isn't the clean binary it used to be: Mountpoint for Amazon S3 (GA 2023) mounts a bucket for high-throughput read/sequential-write workloads, and Amazon S3 Files (GA April 2026) goes further, exposing an NFS v4.1/4.2 mount backed by an S3 bucket. If application code expects open/read/write/close semantics, a mounted path, or POSIX behavior, the honest framing in 2026 is a three-way decision, not an S3-vs-EBS/EFS one.