S3 offers a ladder of storage classes priced for different access patterns: S3 Standard for hot data, Standard Infrequent Access and One Zone Infrequent Access for data read a few times a month, Glacier Instant Retrieval for archives you still need in milliseconds, and Glacier Flexible Retrieval and Glacier Deep Archive for cold data you can wait minutes or hours to restore. The list storage rate falls steeply as you move down the ladder, with Deep Archive priced at a small fraction of Standard, but the cost moves from storage to retrieval and to minimum duration charges, so the right class depends entirely on how often you actually read each object. The lever that turns this into money is the lifecycle policy: a rule on a bucket or prefix that transitions objects to a colder class after a set number of days and expires them when they are no longer needed. Set those rules from your real access logs rather than a guess, and the savings accrue every month without an engineer touching the code.
Here is how each class is priced, where the hidden charges sit, and how to write lifecycle rules that hold up in production.
Which S3 storage class fits which access pattern?
Pick the class from how often the object is read, not from how important it feels. S3 Standard suits data read daily or weekly and carries no retrieval fee. Standard Infrequent Access cuts the storage rate for data read a few times a month but adds a per gigabyte retrieval charge and a 30 day minimum duration, so it only pays when reads are genuinely rare. One Zone Infrequent Access is cheaper still because it drops to a single Availability Zone, which is fine for reproducible data but wrong for anything you cannot regenerate. Glacier Instant Retrieval keeps millisecond access at a low storage rate for archives touched a few times a year. Glacier Flexible Retrieval and Glacier Deep Archive are for true cold data where a restore wait of minutes or hours is acceptable, and Deep Archive carries the lowest storage rate of all.
When does S3 Intelligent Tiering earn its keep?
Intelligent Tiering moves objects between access tiers automatically based on observed access and charges a small per object monitoring fee instead of retrieval fees. It is the right default when access patterns are unknown or genuinely unpredictable, because it removes the risk of putting hot data in a cold class. It is the wrong default for very large numbers of tiny objects, where the monitoring fee per object can outweigh the storage saving, and for data with a known cold date, where a plain lifecycle transition is cheaper. The decision is a simple one: predictable pattern, use a lifecycle rule to a fixed class; unpredictable pattern with reasonably sized objects, let Intelligent Tiering decide. For more on the break even, read the sibling analysis linked below on when Intelligent Tiering pays off.
How do lifecycle policies actually cut the bill?
A lifecycle policy is a set of rules scoped to a bucket or prefix that does two things: transition objects to a colder class after a number of days, and expire objects that have outlived their retention. A common pattern moves logs to Standard Infrequent Access after 30 days, to Glacier Flexible Retrieval after 90 days, and expires them after the compliance window, all without an engineer in the loop. Two details decide whether the policy saves or costs money. First, respect the minimum duration charges: moving an object to Infrequent Access and deleting it a week later still bills the 30 day minimum, so do not transition data that churns. Second, remember that each transition is a request that carries a small per object fee, which matters when you move millions of small objects at once.
What hidden charges undo a tiering plan?
Three charges quietly erode the saving if you ignore them. Retrieval fees on the Infrequent Access and Glacier classes mean a cold class read often becomes expensive, so a dataset that turns out to be read weekly belongs in Standard. Minimum duration charges bill the full 30, 90, or 180 days even if you delete early, which punishes premature transitions. Per request transition costs add up when a single lifecycle rule moves tens of millions of objects in one pass. Model all three against your access logs before you commit. The right tier for a prefix is the one with the lowest total of storage plus expected retrieval plus request cost over the object lifetime, not simply the lowest storage rate.
How do you set this from evidence rather than a guess?
Turn on S3 Storage Lens and the storage class analysis, or read access patterns from server access logs, and let the data name the cold prefixes. Storage class analysis watches a bucket and reports the age at which objects stop being read, which gives you a defensible transition day rather than a round number someone liked. Tag buckets and prefixes by owner and workload so the saving has an accountable home and the policy is reviewed when the workload changes. Then write narrow lifecycle rules per prefix rather than one blunt rule across a bucket, because a single rule across mixed data either leaves hot objects in cold classes or strands cold objects in Standard.
A worked example
A Fortune 500 retailer held roughly two petabytes in S3 Standard, most of it event logs and image derivatives that were untouched after the first fortnight. Storage class analysis showed reads collapsed after 14 days, so a lifecycle policy moved objects to Standard Infrequent Access at 30 days and to Glacier Flexible Retrieval at 90 days, with expiry at the retention limit. Modelling the retrieval and minimum duration charges first kept a small set of frequently restored prefixes in Standard. The storage line fell sharply within two billing cycles with no code change and no measurable impact on the rare restores. Figures are verified against billing data and anonymised.
Frequently asked questions
What is the cheapest S3 storage class?
Do S3 lifecycle policies cost anything to run?
Should I use Intelligent Tiering or lifecycle rules?
Put your S3 estate on the right tiers
We help AWS teams read their storage access patterns, model retrieval and minimum duration charges, and write lifecycle policies that cut the storage line without slowing a single restore, across AWS, Azure, GCP, and OCI. We take zero provider commissions and answer only to you, on a Fixed Fee or a no risk Gainshare basis, with a plain guarantee: we reduce your cloud spend or we reimburse our service fee. Download the storage playbook to start, and read the full method below.
Put a defensible number on your cloud spend.
No provider in the room, no published price list. Tell us your footprint and we will scope the savings against your billing data — we reduce your cloud spend or we reimburse our service fee.
The Cloud Spend Navigator: what changed in cloud pricing, commitments, and FinOps — no vendor spin.