Loading...


Updated 24 Sep 2026 • 5 mins read

Amazon S3 cost optimization means placing data in the right storage class, controlling requests and data transfer, and removing the waste that accumulates silently. This guide covers what each S3 storage class costs in 2026, the hidden charges that inflate bills, and eight practical levers, with a worked example.
Amazon S3 is the cheapest storage most companies own and one of the most wasteful lines on their bill, and both statements are true at once. The base rate is genuinely low: about two cents per gigabyte per month. The waste comes from everything around that rate. Data sits in the expensive tier years after anyone last read it. Old object versions pile up invisibly behind the current ones. Incomplete uploads occupy space nobody knows exists. And a single terabyte served to the internet costs four times what it costs to store.
None of that is a flaw in Amazon S3; it is the predictable result of a service designed to accept anything you put in it and keep it forever unless told otherwise. S3 cost optimization is the practice of telling it otherwise. This guide covers what each storage class actually costs in 2026, the charges that do not appear on the storage line, and eight levers that reliably cut the bill, most of which are a single lifecycle rule or configuration change.
The short answer: S3 cost optimization is the practice of reducing Amazon S3 spend by matching each object to the cheapest storage class its access pattern allows, controlling request and data-transfer charges, and removing accumulated waste such as old versions and incomplete uploads. The price gap is large: S3 Standard costs about $0.023 per GB-month while Glacier Deep Archive costs $0.00099, a 23x difference, so lifecycle policies that move cold data down the tiers are usually the largest saving. The most common hidden costs are internet data transfer at roughly $0.09 per GB, non-current object versions, incomplete multipart uploads, and NAT Gateway processing on traffic that could use a free VPC endpoint. Confirm current rates on the official S3 pricing page for your region.
S3 bills on four dimensions, and optimizing only the first is why most efforts stall. The full rate card is on the official Amazon S3 pricing page, and the four dimensions are storage (per GB-month, varying by storage class), requests (per thousand, with PUT, COPY, POST, and LIST costing about ten times more than GET), data transfer (free in, free within a region, billed out to the internet and between regions), and features such as replication, Storage Lens advanced metrics, and management tools. Storage is usually the largest line, but egress and requests are the ones that produce surprises, because they scale with how data is used rather than how much of it exists.
AWS describes each tier on its S3 storage classes page; the table below pulls the 2026 rates together for US East (N. Virginia). Prices vary by region, so verify yours before modeling a budget.
| Storage class | Storage / GB-month | Retrieval fee | Minimum duration | Best for |
|---|---|---|---|---|
| S3 Standard | $0.023 (first 50 TB) | None | None | Frequently accessed, active data |
| S3 Intelligent-Tiering | $0.023 to $0.00099 by tier | None | None | Unknown or changing access patterns |
| S3 Standard-IA | $0.0125 | $0.01 / GB | 30 days | Infrequent access, quick retrieval |
| S3 One Zone-IA | $0.01 | $0.01 / GB | 30 days | Re-creatable infrequent data |
| Glacier Instant Retrieval | $0.004 | $0.03 / GB | 90 days | Archive needing millisecond access |
| Glacier Flexible Retrieval | $0.0036 | Free (bulk) to $0.03 | 90 days | Archive, minutes to hours retrieval |
| Glacier Deep Archive | $0.00099 | $0.02 / GB (standard) | 180 days | Compliance and long-term retention |
| S3 Express One Zone | ~$0.11 to $0.16 | None | None | Single-digit millisecond latency |
Two details in that table decide whether a move saves money. Retrieval fees mean that data you read often should stay in Standard even though it is the most expensive per gigabyte; a terabyte read twice a month from Standard-IA costs more than leaving it in Standard. And minimum durations mean deleting an object early bills the full period, so lifecycle rules should transition data only once you are confident it will stay put.
Start with visibility, because optimizing blind moves data you need and leaves data you do not. S3 Storage Lens gives an organization-wide view of storage by class, bucket, and age, and its free metrics show which buckets hold data untouched for 90 days or more. That report is your target list for everything below.
Where you know how data ages, a lifecycle configuration transitions objects down the tiers on a schedule: logs to Standard-IA at 30 days and Glacier Instant at 90, compliance records straight to Deep Archive at 180, temporary exports expired at 7. This is usually the single largest saving available, and it is one rule per bucket.
Where access is unpredictable, S3 Intelligent-Tiering moves each object between tiers automatically based on its own access history, for a monitoring fee of $0.0025 per 1,000 objects, with no retrieval charges. Enable the optional Archive and Deep Archive access tiers for buckets that hold genuinely cold data. The one caution: objects under 128 KB never leave the frequent tier, and the per-object fee makes it a poor fit for buckets full of millions of tiny files.
If versioning is on, add a lifecycle rule that transitions non-current versions to a cheaper class after a short window and expires them after a defined retention period. Keep enough history to recover from mistakes, typically 30 to 90 days, and let the rest go. On long-lived versioned buckets this alone can halve the storage line.
Add a lifecycle rule to abort incomplete multipart uploads after seven days. It is a single setting, it recovers the 5 to 15 percent of spend those fragments typically consume, and there is no downside, since a genuinely in-progress upload finishes long before the window closes.
Put CloudFront in front of buckets that serve public assets, so the S3-to-CloudFront transfer is free and edge caching cuts origin requests. Replace NAT Gateway paths to S3 with a free gateway VPC endpoint. Keep compute and the buckets it reads in the same region, since cross-region transfer bills about $0.02 per GB and cross-region replication pays transfer, storage, and requests twice.
Batch small writes into larger objects where the application allows, avoid repeated LIST calls by tracking keys in a database or using S3 Inventory, and use S3 Select or Athena to read only the bytes you need rather than pulling whole objects. Request costs rarely dominate, but on high-object-count workloads they can rival storage.
The cheapest class per gigabyte is not the cheapest for every workload. Model retrieval fees and minimum durations against your real read frequency before moving anything. Frequently read data belongs in Standard; data read a few times a year belongs in Glacier Instant; data that must exist but will almost never be read belongs in Deep Archive. The wrong move in either direction costs money.
Consider 100 TB of log and compliance data that has been sitting in S3 Standard because that is where it landed. At the tiered Standard rate, that costs roughly $2,250 a month, about $27,000 a year.
Suppose Storage Lens shows that 20 TB is read regularly, 30 TB is read occasionally, and 50 TB has not been touched in a year and is kept for compliance. Leaving the 20 TB in Standard costs about $460. Moving the 30 TB to Glacier Instant Retrieval costs about $120. Moving the 50 TB to Deep Archive costs about $50. The new total is roughly $630 a month, a saving of about $1,600 a month or $19,000 a year, from two lifecycle rules. Add an incomplete-upload abort rule and version expiration and most estates find another 10 to 20 percent on top.
At larger scale the same logic compounds; our case study on petabyte-scale S3 cost optimization walks through the same levers at a thousand times the volume.
Three honest caveats keep S3 optimization from backfiring.
S3 cost optimization is unusually forgiving work: the levers are documented, most are a single rule, and the savings are large because the price gap between tiers is so wide. Find out what you have with Storage Lens, move known-pattern data with lifecycle rules and unknown-pattern data with Intelligent-Tiering, expire old versions, abort dead uploads, and stop paying for egress that a CDN or a VPC endpoint would make free. Then treat it as ongoing hygiene rather than a project, because new data lands in Standard every day. The same discipline applies across the AWS bill, which our guides to AWS cost optimization best practices and understanding AWS pricing across EC2, S3, EBS, and RDS cover in full.
In US East, S3 Standard costs about $0.023 per GB-month for the first 50 TB, dropping to $0.021 above 500 TB. Standard-IA is $0.0125, Glacier Instant Retrieval $0.004, Glacier Flexible Retrieval $0.0036, and Glacier Deep Archive $0.00099. Data transfer in is free; internet egress is about $0.09 per GB. Confirm current rates on the official S3 pricing page.
S3 Glacier Deep Archive at about $0.00099 per GB-month, roughly $1 per TB, is the cheapest. It has a 180-day minimum storage duration and retrieval takes up to 12 hours (standard) or 48 hours (bulk), so it suits compliance archives and long-term backups rather than data you expect to read.
Moving cold data out of S3 Standard into cheaper classes via lifecycle policies or Intelligent-Tiering. Because Standard costs 23 times Deep Archive per gigabyte, a bucket of untouched data can often be cut by 90 percent or more with one rule. After that, expiring non-current versions and aborting incomplete multipart uploads usually recover another 10 to 20 percent.
Usually, for data with unpredictable access. It moves each object between tiers based on its own history for $0.0025 per 1,000 objects monitored, with no retrieval fees, and the fee pays for itself when even a fraction of data shifts to a cheaper tier. It is a poor fit for buckets holding millions of objects under 128 KB, which never leave the frequent tier but still incur the monitoring charge.
Almost always because of charges outside the storage line: internet egress at about $0.09 per GB, non-current object versions from versioning, incomplete multipart uploads, NAT Gateway processing on traffic that could use a free VPC endpoint, and request volume from LIST-heavy code. Enable Storage Lens and check these five before touching storage classes.
Serve public assets through CloudFront, since S3-to-CloudFront transfer is free; replace NAT Gateway paths to S3 with a free gateway VPC endpoint; keep compute in the same region as the buckets it reads; and avoid cross-region replication unless compliance requires it, because it bills transfer, storage, and requests twice.
Standard-IA and One Zone-IA have a 30-day minimum, Glacier Instant and Flexible Retrieval 90 days, and Glacier Deep Archive 180 days. Deleting or transitioning an object before the minimum bills the remaining period, so lifecycle rules should only move data you are confident will stay put.