How to8 min readOctober 11, 2026

How to reduce Amazon S3 costs: the three settings that cut most bills

Most S3 bills for business files come down to three settings: old versions nobody needs, uploads that never finished, and cold data paying the hot rate. Here is how to check each one, change it safely, and what it saves.

JeVaughn Ferguson
Founder, developer
The short version

Most of an S3 bill for business files is old versions, abandoned uploads and cold data at the hot rate. Expire the versions you do not need, abort uploads older than a week, and put large buckets on Intelligent-Tiering with instant access, after reading Cost Explorer by usage type to see which bucket the money is in. Measure first: the BucketDesk S3 Savings tool runs that assessment free inside your account and charges only a share of savings that show up on the bill.

The Amazon S3 bill rarely matches the per-gigabyte number on the pricing page. For a bucket of business files, the gap is almost always the same three things: every overwritten or deleted file is still being stored as an old version, uploads that failed halfway are still holding their parts, and files nobody has opened in months are paying the same rate as the ones people use every day.

Each of these is a setting on the bucket, not a project. This guide shows how to check for each one, how to change it without losing anything people still need, and roughly what each change is worth. The prices quoted are AWS list prices for the US East (N. Virginia) Region as of October 2026; other Regions differ, and your own bill is the only number that matters.

Where the money goes on a bucket of business files

For files that people keep rather than process, storage is the big line. Requests and data transfer matter for applications that read and write constantly, but a bucket of contracts, drawings and exports mostly just sits there, and AWS charges for every gigabyte-month it sits.

That is why the three settings below work. They do not change how people use the files. They change what is stored and which rate it is stored at.

Setting 1: stop keeping every old version forever

When versioning is on, saving a new copy of a file keeps the old one, and deleting a file keeps it too, hidden behind a delete marker. That is what makes deleted files recoverable, and it is worth keeping on. The cost is that a bucket people edit every day slowly fills with copies nobody will ever open.

The fix is a lifecycle rule that expires old versions after a set number of days while keeping a few of the newest ones, and that removes delete markers once nothing is left behind them. Pick the number of days from how far back people actually ask to recover a file, and keep at least one older version so a bad save can still be undone.

Expiring versions is permanent. Before adding the rule, check whether any bucket has Object Lock or a legal reason to keep history, and leave those out. One more caution: putting a lifecycle configuration replaces the whole configuration on the bucket, so copy any rules that already exist into the new one.

aws s3api get-bucket-versioning --bucket your-bucket

aws s3api put-bucket-lifecycle-configuration --bucket your-bucket --lifecycle-configuration '{
  "Rules": [{
    "ID": "expire-old-versions",
    "Status": "Enabled",
    "Filter": {},
    "NoncurrentVersionExpiration": { "NoncurrentDays": 90, "NewerNoncurrentVersions": 1 },
    "Expiration": { "ExpiredObjectDeleteMarker": true }
  }]
}'

Setting 2: throw away uploads that never finished

Large files go into S3 in parts. If the upload is interrupted, the parts that arrived stay in the bucket, invisible in the console's file list but billed at the full storage rate until someone aborts the upload. On a bucket that receives big files over flaky connections, this can quietly add up to a meaningful share of the bill.

The check is one command, and the fix is a lifecycle rule that aborts any upload still unfinished after a few days. Seven days is a common choice: long enough for a slow upload to finish, short enough that abandoned parts never linger.

aws s3api list-multipart-uploads --bucket your-bucket

aws s3api put-bucket-lifecycle-configuration --bucket your-bucket --lifecycle-configuration '{
  "Rules": [{
    "ID": "abort-unfinished-uploads",
    "Status": "Enabled",
    "Filter": {},
    "AbortIncompleteMultipartUpload": { "DaysAfterInitiation": 7 }
  }]
}'

Setting 3: let cold files pay the cold rate

S3 Standard costs $0.023 per GB-month, whether a file was opened this morning or has not been touched since 2023. For most business buckets, the majority of bytes are in the second group. S3 Intelligent-Tiering moves each object down to cheaper tiers on its own as it goes unread: to Infrequent Access at $0.0125 after 30 days without a read, and to Archive Instant Access at $0.004 after 90. Every one of those tiers still opens the file instantly, there is no retrieval fee, and an object that gets read moves back up automatically. The only charge for the service is monitoring at $0.0025 per 1,000 objects a month.

Two details decide whether it is worth it for a given bucket. Objects under 128 KB are not monitored or moved, so a bucket of a million tiny files gains nothing, which is also why lifecycle transition rules skip objects under 128 KB by default. And moving existing objects into Intelligent-Tiering is a transition request at $0.01 per 1,000 objects, a one-time cost that a bucket of large files earns back in the first month.

If you can accept a wait before a file opens, Intelligent-Tiering can also use two archive tiers: Archive Access at $0.0036 after 90 days unread and Deep Archive Access at $0.00099 after 180. A file in those tiers has to be restored before anyone can open it, which takes hours, so turn them on bucket by bucket and only where people will not be surprised by the wait.

aws s3api put-bucket-lifecycle-configuration --bucket your-bucket --lifecycle-configuration '{
  "Rules": [{
    "ID": "tier-cold-files",
    "Status": "Enabled",
    "Filter": { "ObjectSizeGreaterThan": 131072 },
    "Transitions": [{ "Days": 0, "StorageClass": "INTELLIGENT_TIERING" }]
  }]
}'

What the three changes are worth

Take a bucket holding 10 TB of business files in S3 Standard, about a million objects, where half the data has not been read in the last month. At list prices it costs $235.52 a month for storage.

Move it to Intelligent-Tiering and the unread half drops to the Infrequent Access rate after 30 days: $117.76 for the half still in use, $64.00 for the cold half, plus $2.50 of monitoring, or $184.26 a month. After 90 days the cold half reaches Archive Instant Access, and the bill is $140.74, about 40% below where it started. Opt the same bucket into Deep Archive Access and the cold half costs $5.07 instead of $20.48, taking the total to about $125, a 47% cut, in exchange for a restore wait on files nobody has opened in six months.

Old versions and unfinished uploads come on top of that. They are pure waste, so every gigabyte the two lifecycle rules remove is a full $0.023 saved with nothing given up. How much that is depends entirely on the bucket, which is why the first step is to measure rather than guess.

  • The share of data that is truly cold is the one number that decides the saving. A bucket people read all day gains little from tiering.
  • Buckets of small files gain almost nothing from tiering and still pay monitoring on anything over 128 KB. Leave them in Standard.
  • The archive tiers roughly double the saving on cold data but add a restore wait. Default to instant access and opt in per bucket.

Check your own account before changing anything

Everything above can be read from the account without touching a file. Start with the bill, then look at the buckets that make up most of it.

  • In Cost Explorer, filter to Amazon S3 and group by usage type. TimedStorage lines are storage by class; the rest is requests, retrievals and transfer. This is the only reliable split of where the money goes.
  • In the S3 console, open each large bucket's Metrics tab for bytes by storage class and the object count, which is what the 128 KB rule and the monitoring fee depend on.
  • Check whether versioning is on, and whether any lifecycle rule already expires old versions. If versioning is on and no rule exists, old versions are accumulating.
  • Run list-multipart-uploads on buckets that receive large files. Any upload older than a week is waste.
  • Find out how much of the data is actually read. S3 server access logs or a CloudTrail trail that records GetObject can answer it for a bucket; without that, the bill's data transfer lines give an upper bound.
The solution

Let BucketDesk do all three for you

The S3 Savings tool runs this whole guide inside your own AWS account, and no file contents or file names ever leave it.

  1. Connect in one step

    Deploy one CloudFormation stack from the Tools page in BucketDesk. It reads your bucket settings, storage metrics and three months of your S3 bill. Nothing is changed.

  2. See the numbers before you decide

    A free, read-only assessment shows what you pay now, what you would pay after each change, what you save, and which figures are measured rather than assumed.

  3. Apply with one click

    BucketDesk expires old versions and unfinished uploads under retention rules you set, puts cold data on Intelligent-Tiering with instant access, and starts recording reads so next month's figures are exact. Deleting versions always asks first, and you can remove BucketDesk's rules from any bucket at any time.

Try it out now

No upfront price. Nothing is charged until the savings verified on your AWS bill pass $500 in total; after that BucketDesk bills a share of what you save, starting at 10%, for twelve months, on your BucketDesk invoice. A monthly email shows the verified savings and what is still waiting for approval.

Try it in BucketDesk

Minimum is free. Deploy a scoped role with CloudFormation, sign in, and browse, without handing anyone an access key.

Connect a bucket

Primary sources

Discussion

0 comments · open to guests · moderated
Comments appear after a quick review.

Liked this? Get the next article by email. No schedule, no filler, one click to leave.

Keep reading

All writing →