Egress is the only number that matters and almost nobody puts it on the front of the pricing page. Storage is a commodity: every provider here sits between USD 4 and USD 23 per terabyte per month, a spread of under twenty dollars on our scenario. Egress spans zero to ninety dollars per terabyte, so on a workload that serves five times what it stores — which is every image host, every media API, every model-weights mirror — egress decides the bill by an order of magnitude. AWS S3 costs 472.60 a month here and 441 of that is bandwidth.
For most teams the answer is Cloudflare R2 and it is not close. Zero egress, no minimum retention, no minimum billable object size, lifecycle rules, event notifications into Queues, and a Workers binding that skips the HTTP round trip entirely. There are three catches. The free egress is Cloudflare's network, so R2 is at its best when Cloudflare is already your edge. R2 tokens are bucket-and-verb scoped rather than a policy language, which will annoy anyone who has built real multi-tenant isolation on AWS IAM conditions. And R2 has no object versioning at all — Cloudflare's own S3 compatibility table lists GetBucketVersioning and PutBucketVersioning as unimplemented — so if you were relying on version IDs and delete markers to undo a bad write, that has to move into your application or your lifecycle policy.
Hetzner wins the raw number and deserves the attention it gets, but read the feature columns before you move. It is a Ceph deployment with a thin S3 face: no object lock, versioning that its own docs have never been clear about, partial lifecycle support, no event notifications, no APAC location, and roughly 300 ms of round trip from Australia. That is fine for backups and build caches and dreadful for a user-facing asset pipeline. The same reasoning applies to Bunny Storage from the opposite direction — superb edge delivery from Sydney, but it is not an S3 clone and treating it as one will break your SDK.
Three providers refuse the question. Wasabi's headline is 6.99/TB with no egress fee, but its acceptable-use policy caps monthly egress at roughly your stored volume; 5 TB out of 1 TB stored is five times over, so there is no honest price to quote and we have left the cell empty rather than invent one. Add the 90-day minimum retention and the 4 KB minimum billable object and Wasabi becomes a bad fit for anything churny. iDrive e2 sells the same shape of promise — zero egress up to a fair-use multiple of what you store — and does not publish either the multiple or what it charges above it, so it gets the same empty cell for the same reason. MinIO is the self-host baseline and its price is your hardware — but note that the community AGPL build lost its admin console in 2025, which changed the calculus for a lot of people who were running it precisely because it was free and complete.
For Australian workloads the field narrows hard. Wasabi, DigitalOcean Spaces, Bunny and AWS all have Sydney presence, and Tigris reaches it through Fly.io. Backblaze, Hetzner and Scaleway do not, and 200–300 ms of first-byte latency is not something a CDN in front of them fully hides on cache misses. R2's Oceania location hint is best-effort rather than a contractual region, which is usually good enough and occasionally isn't. If your users are in Australia and your objects are hot, price the Sydney-capable options in AUD and accept that you will pay more than the Hetzner headline.