Amazon Simple Storage Service (Amazon S3) stores objects in buckets and bills them by the gigabyte-month, but the gigabytes are rarely the whole S3 bill. AWS's pricing page lists six cost components: "storage pricing, request and data retrieval pricing, data transfer and transfer acceleration pricing, data management and insights feature pricing, replication pricing, and transform and query feature pricing". This article explains how S3 stores data, how S3 pricing works class by class, and the ways AWS documents to reduce S3 costs, priced with the list prices of the Paris Region (eu-west-3). Four architectures show what the levers do to whole monthly bills, and the cost section opens with an index of the levers, in the order to work through them.
Prices in this article are AWS list prices for the EU (Paris) Region, in USD before tax, from the AWS Price List, with two exceptions: CloudFront, a global service, is priced at its Europe edge locations, and Frankfurt (eu-central-1) prices the replica of the fourth architecture pattern and one Region comparison in the pricing section. Each card and table that uses them says so. The offer files and their publication dates are listed in the Sources section, and each table repeats the dates of its own prices. S3 counts a GB as 230 bytes and a TB as 1,024 GB. Monthly amounts (730 hours), totals, percentages and break-evens are computed from these prices.
What Amazon S3 is
In AWS's words, Amazon S3 "is an object storage service that offers industry-leading scalability, data availability, security, and performance". "An object is a file and any metadata that describes the file. A bucket is a container for objects", and each object has a key, "the unique identifier for the object within the bucket". Buckets and objects are private until you grant access, and Block Public Access is on by default.
You choose the Region of a bucket when you create it, and "you cannot change the name of the bucket or its Region" afterwards. The bill follows that choice: "Billing prices are based on the location of your S3 bucket". AWS sums up the pay model in one line: "Amazon S3 charges you only for what you actually use, with no hidden fees and no overage charges". The free tier is left out here. S3 has four bucket types, and this article is about the first:
The four bucket types of Amazon S3
| Bucket type | What AWS recommends it for |
|---|---|
| General purpose buckets | "Most use cases and access patterns": the original S3 bucket type |
| Directory buckets | Low-latency and data-residency use cases; they hold S3 Express One Zone |
| Table buckets | Tabular data in the Apache Iceberg format |
| Vector buckets | Storing and querying vectors |
How S3 works under the hood
AWS documents S3's design at the level of zones, devices, checksums, consistency, prefixes and archives, and three of them show up on the bill: zones in One Zone-IA's price, prefixes in the request rates, archives in the restores. The storage fleet's internals are described in AWS talks and blog posts, not in its documentation, and are left out.
A flat namespace of keys
"Amazon S3 general purpose buckets have a flat structure instead of a hierarchy like you would see in a file system"; the console shows folders only "for the sake of organizational simplicity". A key prefix is "a string of characters at the beginning of the object key name", up to the key's 1,024 bytes, and "prefixes are not directories". AWS's own summary: S3 is "a basic data map between 'bucket + key + version' and the object itself". An object can reach 48.8 TiB, uploaded in parts (5 MiB to 5 GiB each, up to 10,000), and AWS suggests a multipart upload from about 100 MB. Each of those calls is a billed request, which the pricing section comes back to.
Where the copies live: zones, durability and availability
The Regional storage classes "redundantly store objects on multiple devices across a minimum of three Availability Zones in an AWS Region" (Data protection in Amazon S3), zones that are "many kilometers" apart, "although all are within 100 km (60 miles) of each other". S3 checks every upload end to end and "verifies that all data is correctly and redundantly stored across multiple storage devices before it considers your upload to be successful", then keeps checking the data at rest (Amazon S3 FAQs):
- The application writes an object (PUT). The AWS SDKs send a checksum with the upload, and S3 checks it before it accepts the object.
- Before it confirms the write, S3 stores the object redundantly on multiple devices across at least three Availability Zones (S3 Standard and the other Regional storage classes).
- Strong read-after-write consistency: a GET or LIST that starts after the confirmation returns the new object, in every Region.
- At rest, S3 checks the data with checksums and repairs any lost redundancy from the redundant data.
S3 Standard is "designed to provide 99.999999999% durability and 99.99% availability of objects over a given year". Every class in this article shares that designed durability; what differs is availability, and whether the data survives the loss of a whole zone (storage classes):
Where each storage class keeps its data, and its designed availability
| Class | Availability Zones | Designed availability |
|---|---|---|
| S3 Standard | 3 or more | 99.99% |
| S3 Intelligent-Tiering | 3 or more | 99.9% |
| S3 Standard-IA | 3 or more | 99.9% |
| S3 One Zone-IA | 1 | 99.5% |
| S3 Express One Zone | 1 | 99.95% |
| S3 Glacier Instant Retrieval | 3 or more | 99.9% |
| S3 Glacier Flexible Retrieval and Deep Archive | 3 or more | 99.99%, after a restore |
All of them "except for S3 One Zone-IA (ONEZONE_IA) and S3 Express One Zone (EXPRESS_ONEZONE) are designed to be resilient to the physical loss of an Availability Zone resulting from disasters". That trade is priced: One Zone-IA stores data "at 20% less cost than geographically redundant S3 Standard-IA storage", in AWS's words; in Paris, 20.0% less per GB-month, computed. Durability is also not a backup:
Amazon S3's durability system does not protect against accidental or malicious deletes.
Versioning, replication and Object Lock add that protection. Versions and replicas are billed as stored objects (see Versioning, delete markers and unfinished uploads); Object Lock has no price of its own in the Price List, but a locked object version cannot be deleted or overwritten until its retention period ends, so it stays billed until then.
Strong consistency, and where it stops
"Amazon S3 provides strong read-after-write consistency for PUT and DELETE requests of objects in your Amazon S3 bucket in all AWS Regions": a read that starts after a successful PUT returns the new object, and a deleted object no longer appears in a listing. It has limits: S3 does not lock an object for concurrent writers ("the request with the latest timestamp wins"), "there is no way to make atomic updates across keys", and bucket configurations are eventually consistent: AWS recommends waiting 15 minutes after enabling versioning before writing to the bucket.
Request rates per prefix, and 503 Slow Down
S3 scales to "at least 3,500 PUT/COPY/POST/DELETE or 5,500 GET/HEAD requests per second per partitioned Amazon S3 prefix", with "no limits to the number of prefixes in a bucket". The scaling is gradual: while it happens, a client can receive 503 (Slow Down) errors, and AWS suggests spreading requests across prefixes. Those errors cost the bucket owner nothing: "Bucket owners aren't billed for HTTP 5XX server error responses". The same page sets out which responses are billed, and lists the error codes that are not:
Which responses S3 bills to the bucket owner
| Response | Billed to the bucket owner |
|---|---|
| HTTP 200 OK, a successful request | Yes |
| HTTP 3XX redirects the page lists (301 PermanentRedirect, 307 TemporaryRedirect) | No |
| HTTP 4XX, a client error | Yes, except the 4XX error codes the page lists (for example 400 InvalidSignature or ExpiredToken, 403 SignatureDoesNotMatch, 404 NoSuchUpload, 405 MethodNotAllowed) |
| HTTP 403 AccessDenied, for a request from outside the owner's account or organization | No: a separate rule |
| HTTP 5XX, a server error such as 503 Slow Down | No |
Archived objects are restored before they are read
Objects in S3 Glacier Flexible Retrieval and S3 Glacier Deep Archive are "not available for real-time access": "before you can access an archived object, you must first restore a temporary copy of it", kept for the days you ask for. A restore bills twice, the archive and the temporary copy "(S3 Standard storage rate)". Each archived object also carries 40 KB of metadata, 8 KB of it billed at the S3 Standard rate "so that you can get a real-time list of your archived objects", which is why AWS suggests "aggregating many small objects into a smaller number of large objects". How long a restore takes depends on its tier (archive retrieval options):
How long an archived object takes to come back, by retrieval tier
| Class | Expedited | Standard | Bulk |
|---|---|---|---|
| S3 Glacier Flexible Retrieval | 1–5 minutes | 3–5 hours | 5–12 hours |
| S3 Glacier Deep Archive | Not available | Within 12 hours | Within 48 hours |
S3 Glacier Instant Retrieval is the archive class that needs no restore: its data is "available for real-time access", in milliseconds.
What S3 is used for
AWS points each kind of data to a storage class across its documentation: the storage classes guide, the Amazon S3 FAQs, the Intelligent-Tiering guide and the lifecycle guide:
Workloads and the storage classes, or features, AWS points them to
| Workload | Class or feature |
|---|---|
| Data read more than once a month: data lakes, cloud-native applications, dynamic websites, content distribution, analytics, machine learning models | S3 Standard |
| Data with unknown, changing or unpredictable access: data lakes, data analytics, new applications | S3 Intelligent-Tiering |
| Backups, long-term storage and disaster recovery data, read rarely but in milliseconds | S3 Standard-IA |
| Data you can re-create if a zone fails, such as replicas of a Cross-Region Replication | S3 One Zone-IA |
| Archives that need immediate access: medical images, news media assets, genomics data | S3 Glacier Instant Retrieval |
| Backup and disaster recovery archives, large sets of data retrieved at no cost with Bulk retrievals | S3 Glacier Flexible Retrieval |
| Long-lived archives: compliance archives, digital media preservation | S3 Glacier Deep Archive |
| The most latency-sensitive applications | S3 Express One Zone |
| Logs needed for a week or a month, records kept for a retention period | Lifecycle rules |
| Datasets shared without paying for others' downloads | Requester Pays buckets |
The FAQ goes further for data whose access you cannot predict: "that is why S3 Intelligent-Tiering should be the default storage class to automatically save on storage costs". The Requester Pays line is about who pays: the requester pays for the requests and the downloads, the owner for the storage.
S3, EBS and EFS: three ways to be billed
S3 is object storage. Amazon Elastic Block Store (Amazon EBS) is block storage attached to one instance, and Amazon Elastic File System (Amazon EFS) a file system shared by many. AWS's decision guide sets them apart by workload: object storage for "read-heavy workloads such as content distribution, web hosting, big data analytics, and ML workflows", block storage for low-latency storage "attached to single Amazon EC2 instances or containers, such as databases", file storage for "shared read and write access across multiple Amazon EC2 instances or containers". They also live in different places, and bill on different bases:
- An EBS volume lives in one Availability Zone and attaches to an instance there. It is billed on its provisioned size, used or not: $0.0928 per GB-month for gp3.
- An EFS file system is shared over NFS by instances in several zones. It is billed on the data stored, $0.33 per GB-month in EFS Standard, plus $0.03 per GB read and $0.07 per GB written with Elastic Throughput.
- A gateway endpoint gives the VPC a route to S3 in the same Region, at no additional charge.
- An S3 bucket belongs to the Region and is reached with HTTPS requests. It is billed on the data stored, $0.024 per GB-month in S3 Standard, and on its requests: $0.0053 per 1,000 PUT requests.
With EBS, "you pay only for what you provision", and a volume lives in one Availability Zone. An EFS Regional file system stores data "across multiple geographically separated Availability Zones" (What is Amazon EFS?), and you "pay only for the primary and backup storage you use and for your metadata and data read, write, and tiering activity". S3 bills the data stored and each request. Per GB-month in Paris, gp3 costs 3.87 times the price of S3 Standard and EFS Standard 13.75 times, computed: for 1 TB a month, $24.58 in S3 Standard, $95.03 of provisioned gp3, $337.92 in EFS Standard before its access charges. That is not a ranking: each figure leaves out what its service bills besides (requests for S3, unused provisioned space for EBS, reads and writes for EFS). The EC2 article's storage section compares EBS with instance store.
How S3 pricing works
What an S3 bill is made of
Storage is billed by the GB-month: "the volume of storage billed in a month is based on average storage used throughout the month", at the rate of each object's class (Amazon S3 FAQs). Requests are billed by type and count, and in some classes reading data back is billed per GB. "LIST requests for any storage class are charged at the same rate as S3 Standard PUT, COPY, and POST requests. DELETE and CANCEL requests are free", and browsing the console bills the GET and LIST requests it makes (Amazon S3 pricing). Data transfer, management features and replication complete the bill. The bucket owner pays all of it, unless the bucket is a Requester Pays bucket.
Storage, by class, in Paris
In S3 Standard, a terabyte stored for a month costs:
S3 Standard in Paris
$24.58 a TB-monthfor 1 TB (1,024 GB) stored a whole month, at the first tier: the first 50 TB of the month.
Computed from the AWS Price List · eu-west-3 · Oct 14, 2026
From S3 Standard down to Deep Archive, each class trades a lower storage price for minimums and retrieval charges, and the archive classes for a restore:
- Lifecycle rules move objects one way, toward colder classes, and each move is a billed transition request. The arrows show some of the moves AWS lists; One Zone-IA cannot move to Glacier Instant Retrieval, and Glacier Flexible Retrieval only to Deep Archive.
- The infrequent access classes bill at least 30 days of storage and at least 128 KB per object, and charge a fee per GB read.
- Glacier Instant Retrieval still reads in milliseconds; it bills at least 90 days and 128 KB, and a fee per GB read.
- Glacier Flexible Retrieval and Deep Archive restore a temporary copy first, in minutes to hours; they bill at least 90 and 180 days, and 40 KB of metadata per object.
- Intelligent-Tiering has no minimum duration and no retrieval fee for its Frequent, Infrequent and Archive Instant Access tiers: it charges a monitoring fee per object and moves objects of 128 KB and more between its tiers as their access changes.
In Paris, their storage list prices per GB-month, and what a terabyte stored a whole month costs in each, computed:
Against S3 Standard, Standard-IA costs 45.4% less per GB-month in Paris, Glacier Instant Retrieval 79.2% less and Deep Archive 92.5% less, computed. S3 Standard gets cheaper with volume, $0.023 per GB-month for the next 450 TB and $0.022 per GB-month beyond 500 TB. Glacier Deep Archive has an offer file of its own, and "S3 Glacier Deep Archive usage and cost will show up as an independent service line item on your monthly AWS bill". Prices also differ by Region: S3 Standard costs 2.1% more in Frankfurt than in Paris. AWS's FAQ quotes its savings in percentages of US prices; this article prices Paris, so its percentages are its own, computed.
Minimum durations, minimum sizes and archive metadata
Four rules sit behind the table, and they decide whether a cheaper class really costs less (storage classes, Amazon S3 pricing):
The rules that bill more than the bytes stored
| Rule | Classes | What it bills |
|---|---|---|
| Minimum storage duration | Standard-IA and One Zone-IA: 30 days. Glacier Instant and Flexible Retrieval: 90 days. Deep Archive: 180 days | An object deleted, overwritten or moved earlier is billed for the remaining days |
| Minimum billable size | Standard-IA, One Zone-IA, Glacier Instant Retrieval | An object under 128 KB is billed as 128 KB |
| Archive metadata | Glacier Flexible Retrieval, Deep Archive, and the archive tiers of Intelligent-Tiering | 40 KB per object: 32 KB at the class's rate, 8 KB at the S3 Standard rate |
| Retrieval fee | Standard-IA, One Zone-IA, Glacier Instant Retrieval; restores of the archive classes | A price per GB read back |
The 40 KB are metadata added to each archived object, not a minimum size: AWS's own example bills 100,000 archived objects of 1 GB as "100,003.2 gigabytes of S3 Glacier storage". Computed from the Paris prices, storage alone, an object under 69.9 KB costs more in Standard-IA than in S3 Standard even if nobody reads it (55.9 KB for One Zone-IA, 26.7 KB for Glacier Instant Retrieval), and an object under 16.1 KB costs more archived in Glacier Flexible Retrieval than kept in S3 Standard (11.2 KB for Deep Archive). On the bill, these rules have names of their own, such as EarlyDelete-SIA and TimedStorage-SIA-SmObjects (usage reports).
Requests and retrieval
S3 bills each request, and the colder the class, the dearer the write:
On the bill, Requests-Tier1 counts "PUT, COPY, or POST requests for S3 Standard, RRS, and tags, plus LIST requests for all buckets and objects", and Requests-Tier2 "GET and all other non-Tier1 requests". A multipart upload is billed for "all storage, bandwidth, and requests" of its parts, so every call counts: in AWS's replication example, a 100 GB object uploaded in 800 parts is replicated with 802 requests, 800 UploadPart plus one to start and one to complete (Amazon S3 FAQs). Reading data back is where the infrequent and archive classes charge most:
Reading data back in Paris: GET requests, retrievals and restores
| Item | List price | Unit |
|---|---|---|
| S3 Standard | ||
| GET and all other requests | $0.00042 | per 1,000 requests |
| S3 Standard-IA | ||
| GET and all other requests | $0.001 | per 1,000 requests |
| Retrieval | $0.01 | per GB |
| S3 One Zone-IA | ||
| GET and all other requests | $0.001 | per 1,000 requests |
| Retrieval | $0.01 | per GB |
| S3 Glacier Instant Retrieval | ||
| GET and all other requests | $0.01 | per 1,000 requests |
| Retrieval | $0.03 | per GB |
| S3 Glacier Flexible Retrieval | ||
| Restore request, Expedited | $0.0105 | per request |
| Restore requests, Standard | $0.053 | per 1,000 requests |
| Restore requests, Bulk | $0.00 | per 1,000 requests |
| Retrieval, Expedited | $0.0315 | per GB |
| Retrieval, Standard | $0.0105 | per GB |
| Retrieval, Bulk | $0.00 | per GB |
| S3 Glacier Deep Archive | ||
| Restore requests, Standard | $0.106 | per 1,000 requests |
| Restore requests, Bulk | $0.02625 | per 1,000 requests |
| Retrieval, Standard | $0.021 | per GB |
| Retrieval, Bulk | $0.005 | per GB |
USD, before tax. AWS Price List, eu-west-3, offer files published September 11, 2026 and October 14, 2026, fetched October 15, 2026.
Bulk retrievals from Glacier Flexible Retrieval are free, data and requests alike, and Intelligent-Tiering charges no retrieval fee, except for Expedited restores from its optional Archive Access tier, billed at the Expedited request and retrieval rates (Amazon S3 pricing). A restored copy is billed at the S3 Standard rate for as long as you keep it.
Lifecycle transitions
A lifecycle rule moves objects to colder classes, or deletes them, on their age. "There is no additional cost to set up and apply Lifecycle policies. A transition request is charged per object", and transitions have no retrieval charge. In Paris, a transition into Standard-IA costs $0.01 per 1,000 requests, into Glacier Flexible Retrieval $0.0318 per 1,000 requests and into Deep Archive $0.06 per 1,000 requests: the price of a PUT into the class. Moves follow "a waterfall model", toward colder classes only, and "the transition of objects to the S3 Glacier Deep Archive storage class can go only one way".
Two details change what a rule costs. "Starting September 2024, the default behavior prevents objects smaller than 128 KB from being transitioned to any storage class", because "for smaller objects, the transition costs can outweigh the storage savings"; rules created before keep the old behavior until they are edited. And a new rule acts on the whole bucket at once: "the configuration rules apply to both existing objects and objects that you add later", so its first month can bill a burst of transitions. Objects no longer have to wait 30 days in S3 Standard before moving to Standard-IA or One Zone-IA (decision guide).
Intelligent-Tiering: a monitoring fee instead of retrieval fees
S3 Intelligent-Tiering moves each object by its own access (How S3 Intelligent-Tiering works): to the Infrequent Access tier after 30 consecutive days without access, to the Archive Instant Access tier after 90, and back to the Frequent Access tier when it is read. Two archive tiers are optional, from 90 and 180 days, and need a restore. Each tier is priced at the matching class:
In exchange, the class charges $0.0025 per 1,000 objects a month for monitoring and automation, on each object of 128 KB or more. "No additional tiering charges apply when objects are moved between access tiers", and "there are no retrieval fees for S3 Intelligent-Tiering"; the pricing page makes one exception, the Expedited restores of the optional Archive Access tier. Smaller objects "are not eligible for auto-tiering": they stay in the Frequent Access tier, and are not charged the fee (Amazon S3 FAQs). The class has no minimum storage duration. AWS gives its savings as "up to" percentages of US prices; in Paris, the Infrequent Access tier costs 45.4% less per GB-month than the Frequent Access tier, and the Archive Instant Access tier 79.2% less, computed.
Data transfer
"You pay for all bandwidth into and out of Amazon S3", except data in from the internet, data between buckets of one Region, data from S3 to any AWS service in the same Region (another account's included), data out to Amazon CloudFront, and the first 100 GB a month out to the internet, counted across all AWS services and Regions except China and GovCloud. Between S3 and Amazon EC2, the FAQ puts it plainly: same Region, no transfer charge; across Regions, charged.
Data transfer from S3 in Paris, and the two billed ways to reach it from a private subnet (a gateway endpoint has no additional charge)
| Item | List price | Unit |
|---|---|---|
| Out of S3 | ||
| To the internetFirst 10 TB a month | $0.09 | per GB |
| To the internetNext 40 TB | $0.085 | per GB |
| To the internetNext 100 TB | $0.07 | per GB |
| To the internetOver 150 TB | $0.05 | per GB |
| To CloudFront | $0.00 | per GB |
| To Frankfurt (eu-central-1) | $0.02 | per GB |
| In from the internet | $0.00 | per GB |
| NAT gateway | ||
| NAT gateway | $0.05 | per hour |
| Data processed | $0.05 | per GB |
| Interface endpoint | ||
| Interface endpointPer endpoint | $0.011 | per hour |
| Data processedFirst petabyte | $0.01 | per GB |
USD, before tax. AWS Price List, eu-west-3, offer files published September 16, 2026, September 17, 2026 and October 12, 2026, fetched October 15, 2026.
From a private subnet, traffic to S3 that goes through a NAT gateway pays the gateway's hourly charge and "each gigabyte of data that it processes" (NAT gateway pricing). A gateway endpoint reaches S3 "without requiring an internet gateway or NAT device for your VPC, and with no additional cost"; an interface endpoint, needed from on-premises networks, peered VPCs in other Regions or a transit gateway, is billed per hour and per GB. The EC2 article lists the other charges around an instance. For European customers, AWS adds: "EU customers may request reduced data transfer rates for eligible use cases under the European Data Act".
Versioning, delete markers and unfinished uploads
Three kinds of storage do not show in a normal listing of a bucket, and all three are billed:
What stays billed, and until when
| What you do | What stays billed, and until when |
|---|---|
| Overwrite an object in a versioned bucket | The old object, as a noncurrent version at its class's rate, until a lifecycle rule expires it |
| Delete an object in a versioned bucket, without a version ID | Every version, plus a delete marker in S3 Standard the size of its key name, until the versions expire and the rule removes the marker |
| Start a multipart upload and never complete it | Every uploaded part, "all storage, bandwidth, and requests for this multipart upload", until the upload is completed or stopped |
"If you have three versions of an object stored, you are charged for three objects", and a bucket "can never return to an unversioned state" once versioning is on; it can only be suspended.
Each version of an object is the entire object; it is not just a diff from the previous version.
A DELETE request leaves every version in place under its marker. The parts of an unfinished upload stay "in an unusable state" and are listed by the ListMultipartUploads API, not by a listing of objects (multipart upload). An expiration rule does not remove them, and "there are no early delete charges for deleting incomplete multipart uploads regardless of storage class specified". Pattern 2 prices a year of them.
Replication
S3 Replication copies objects automatically and asynchronously to another bucket, in another Region (Cross-Region Replication) or the same one; objects that were in the bucket before the rule need S3 Batch Replication. "Both source and destination buckets must have versioning enabled", so a replicated bucket is a versioned bucket on both sides. Each charge has its Region (Amazon S3 pricing):
What replication bills, and at which Region's prices
| Charge | Priced in |
|---|---|
| Replica storage, in the class the rule chooses | The destination Region |
| Replication PUT requests | The destination Region |
| Retrieval charges, when the source is in an infrequent access class | Its class's retrieval fee |
| Data transfer between Regions (Cross-Region Replication only) | The source Region |
| S3 Replication Time Control data transfer, and its metrics as CloudWatch custom metrics | The same in all Regions; metrics at CloudWatch's rate |
| S3 Batch Replication of existing objects | S3 Batch Operations, plus a charge per object for a manifest AWS generates |
A multipart object is replicated in as many parts, each a billed request (Amazon S3 FAQs). By default the replica takes the class of its source, but "you can specify any storage class that Amazon S3 supports". Objects in Glacier Flexible Retrieval, Deep Archive or the Intelligent-Tiering archive tiers are not replicated until they are restored and copied, and neither are lifecycle rules: each bucket needs its own. S3 Replication Time Control "replicates most objects that you upload to Amazon S3 in seconds", with a service-level agreement at 15 minutes.
Encryption
"Amazon S3 automatically applies server-side encryption with Amazon S3 managed keys (SSE-S3) as a base layer of encryption to all new objects added to S3, at no additional cost". With SSE-KMS, the keys of AWS Key Management Service (AWS KMS), "you pay AWS KMS charges to generate or retrieve the data key", and without an S3 Bucket Key "Amazon S3 makes a call to AWS KMS every time a request is made against a KMS-encrypted object":
100 million AWS KMS requests
$300.00 a monthat the Paris list price, the 20,000 free requests of the month not deducted.
Computed from the AWS Price List · eu-west-3 · Sep 11, 2026
Reading the S3 lines of a bill
S3's usage types carry the Region's code: in Paris they start with EUW3-, while "for the US East (N. Virginia) Region, the region prefix is omitted". Among them:
S3 usage types on a bill in Paris
| Usage type | What it counts |
|---|---|
EUW3-TimedStorage-ByteHrs |
"The number of GB-months that data was stored in S3 Standard storage" |
EUW3-TimedStorage-SIA-ByteHrs, -ZIA-, -GIR-, -GlacierByteHrs, -GDA-, -INT-FA-… |
The same for each class and access tier |
EUW3-Requests-Tier1, EUW3-Requests-Tier2 |
PUT, COPY, POST and LIST requests; GET and every other request |
EUW3-Retrieval-SIA |
Data read back from Standard-IA |
EUW3-EarlyDelete-SIA |
Storage billed for objects removed from Standard-IA before 30 days |
EUW3-Monitoring-Automation-INT |
Objects monitored by Intelligent-Tiering |
EUW3-DataTransfer-Out-Bytes, EUW3-CloudFront-Out-Bytes, EUW3-EUC1-AWS-Out-Bytes |
Data out to the internet, to CloudFront, to Frankfurt |
Cost Explorer groups them, in usage type groups such as "S3: Storage - Standard", "S3: API Requests - Standard", "S3: Data Transfer - Internet (Out)" and "S3: Data Transfer - Region to Region (Out)". For a cost per bucket, AWS's answer is tags: "label your Amazon S3 buckets using cost allocation tags"; they label buckets only, and appear in the bill once activated in the Billing and Cost Management console.
Other S3 storage
- S3 Express One Zone, in directory buckets, is "purpose-built to deliver consistent, single-digit millisecond data access" in one zone; Paris has one,
euw3-az1(directory bucket endpoints). In Paris its PUT requests cost 77.4% less than S3 Standard's, computed, but its storage 4.79 times as much, plus a fee per GB uploaded and retrieved: a latency product first. - S3 Files is a shared file system over data in S3, "built using Amazon EFS": you pay for the active data on its high-performance storage, $0.33 per GB-month in Paris, and per GB read and written (Working with Amazon S3 Files).
- S3 Tables and S3 Vectors have their own prices, outside this article.
- S3 Select "is no longer available to new customers": it is not a way to save for a new workload.
Choosing a storage class
AWS's FAQ gives the rule of thumb: S3 Standard is "the best choice if you access data more than once a month", Standard-IA "ideal for data retained for at least a month and accessed once every month or two". The questions below put Paris numbers behind it, computed from list prices, storage and retrieval only.
Standard or Standard-IA?
Standard-IA stays cheaper than S3 Standard as long as less than 1.09 times the data it stores is read back each month (One Zone-IA: 1.35 times; Glacier Instant Retrieval: 0.63 times), for objects of 128 KB or more kept at least the class's minimum duration (30 days; 90 for Glacier Instant Retrieval). Below 128 KB the minimum billable size lowers that threshold, down to zero at 69.9 KB (55.9 KB for One Zone-IA, 26.7 KB for Glacier Instant Retrieval). For one terabyte of objects of 128 KB or more, read back half-way each month:
1 TB in S3 Standard Illustrative
| Line | A month |
|---|---|
| Storage | |
| S3 Standard storage1,024 GB × $0.024 /GB-mo | $24.58 |
| A month, computed | $24.58 |
1 TB in S3 Standard-IA Illustrative
| Line | A month |
|---|---|
| Storage | |
| S3 Standard-IA storage1,024 GB × $0.0131 /GB-mo | $13.41 |
| Other | |
| Standard-IA retrieval512 GB × $0.01 /GB | $5.12 |
| A month, computed | $18.53 |
S3 Standard-IA costs $6.05 a month less than S3 Standard (24.6% less), computed.
USD before tax, 730 h a month. AWS Price List, eu-west-3, offer file published October 14, 2026, fetched October 15, 2026. Illustrative configuration, not a client case.
Requests are left out of both: in Standard-IA a GET costs more than twice an S3 Standard GET, which matters for many small reads.
Is Intelligent-Tiering worth it?
For data whose access you cannot predict, AWS recommends it "independent of object size or retention period" (Intelligent-Tiering). The monitoring fee sets the limit, computed in Paris: an object that only reaches the Infrequent Access tier pays its fee back from 240.5 KB, and one that reaches the Archive Instant Access tier from 138.0 KB. Between 128 KB and those sizes, the fee costs more than the tier saves; data that stays hot pays the fee on top of the S3 Standard price. Pattern 3 draws the crossing by object size.
Which Glacier class?
Archive classes trade the price per GB-month against the time to get data back and its retrieval fee (archive retrieval options). In Paris, Glacier Flexible Retrieval costs 19.0% less per GB-month than Glacier Instant Retrieval, and Deep Archive 55.6% less than Glacier Flexible Retrieval, computed; reading back costs $0.03 per GB from Glacier Instant Retrieval, $0.0105 per GB from Glacier Flexible Retrieval with a Standard retrieval (Bulk is free), and $0.021 per GB from Deep Archive. The comparison table of the storage classes guide reads them by access: about once a quarter for Glacier Instant Retrieval, once a year for Glacier Flexible Retrieval, less than once a year for Deep Archive.
One Zone-IA
"Use if you can re-create the data if the Availability Zone fails", including replicas in another Region; for the "primary or only copy of data that can't be re-created", AWS points to Standard-IA. It shares Standard-IA's minimums and retrieval fee.
In short: A colder class costs less only for objects large enough, kept long enough and read rarely enough: in Paris, Standard-IA costs more than S3 Standard below 69.9 KB an object, or when more than 1.09 times the data it stores is read back a month, computed.
Architecture patterns around S3 and what they cost
Four illustrative configurations, each priced before and after the levers of the next section, line by line from the AWS Price List: a backup archive that moves down the classes with a lifecycle rule, a versioned bucket that keeps what nobody lists, a data lake on Intelligent-Tiering, and a Cross-Region Replication copy. None is a client case; every amount is computed, and each card lists its assumptions and what it leaves out. The EC2 patterns price the compute side the same way.
Pattern 1 of 4 · Illustrative configuration
Backup and log archive, moved down the classes as it ages
Backup jobs write 2 TB a month to one bucket in Paris, kept a year; a lifecycle rule moves each object to colder storage classes as it ages, then deletes it.
- Every backup object is written with one PUT request: $0.0053 per 1,000. Data transferred in is not billed, from the internet or from AWS services in the same Region.
- After 30 days the rule moves each object to S3 Standard-IA, one transition request each: $0.01 per 1,000. Storage drops to $0.0131 per GB-month; reading it back costs $0.01 per GB.
- After 90 days, to S3 Glacier Flexible Retrieval: $0.0318 per 1,000 transitions, $0.00405 per GB-month, plus 40 KB of metadata per object. An object is restored before it is read: $0.0105 per GB with a Standard retrieval, free with a Bulk retrieval.
- At 365 days the rule deletes the object. Deletions are free, and an object kept past its class's minimum duration has no early-deletion charge.
Without the deletion at day 365, the S3 Standard bucket would grow by 2,048 GB, $49.15, every month.
With the levers: $408.72 a month less (69.3% less), computed.
The bills line by line, the assumptions and the sources
Backup and log archive, moved down the classes as it ages, before: Everything in S3 Standard, deleted after a year Illustrative
A year of backups in S3 Standard; an expiration rule deletes each object after 365 days.
| Line | A month |
|---|---|
| Storage | |
| S3 Standard, 12 months of backups24,576 GB × $0.024 /GB-mo | $589.82 |
| Other | $0.17 |
| PUT requests, one per backup object32,768 requests × $0.0053 /1K req | $0.17 |
| GET requests on data 30 to 90 days old800 requests × $0.00042 /1K req | $0.00 |
| A month, computed | $589.99 |
Backup and log archive, moved down the classes as it ages, with the levers: Standard-IA at 30 days, Glacier Flexible Retrieval at 90, deleted at 365 Illustrative
One lifecycle rule: S3 Standard-IA after 30 days, S3 Glacier Flexible Retrieval after 90, expiration after 365.
| Line | A month |
|---|---|
| Storage | $178.10 |
| S3 Standard, the first 30 days2,048 GB × $0.024 /GB-mo | $49.15 |
| S3 Standard-IA, days 30 to 904,096 GB × $0.0131 /GB-mo | $53.66 |
| S3 Glacier Flexible Retrieval, days 90 to 36518,432 GB × $0.00405 /GB-mo | $74.65 |
| Archive metadata, 32 KB per object at the Glacier Flexible Retrieval rate9 GB × $0.00405 /GB-mo | $0.04 |
| Archive metadata, 8 KB per object at the S3 Standard rate2.25 GB × $0.024 /GB-mo | $0.05 |
| Restored copies, kept 7 days at the S3 Standard rate100 GB × 168 h / 730 h × $0.024 /GB-mo | $0.55 |
| Other | $3.17 |
| PUT requests, one per backup object32,768 requests × $0.0053 /1K req | $0.17 |
| Lifecycle transitions into Standard-IA32,768 requests × $0.01 /1K req | $0.33 |
| Lifecycle transitions into S3 Glacier Flexible Retrieval32,768 requests × $0.0318 /1K req | $1.04 |
| GET requests on Standard-IA objects800 requests × $0.001 /1K req | $0.00 |
| Standard-IA retrieval50 GB × $0.01 /GB | $0.50 |
| Restore requests, Standard tier1,600 requests × $0.053 /1K req | $0.08 |
| Glacier Flexible Retrieval retrieval, Standard tier100 GB × $0.0105 /GB | $1.05 |
| A month, computed | $181.27 |
Deep Archive at 90 days instead: $141.85 a month, 76.0% less than before, computed.
Assumptions
- Illustrative configuration in Paris (eu-west-3), not a client case.
- Backup jobs write 2,048 GB a month as 64 MiB objects: 32,768 objects a month, one PUT request each. Every object is kept 365 days, then deleted.
- The bill is the steady month, once the bucket holds a full year: the lifecycle rule's 30, 90 and 365 days are counted as 1, 3 and 12 months, so S3 Standard holds one month of data, Standard-IA two and the archive class nine.
- Reads: 50 GB a month of data 30 to 90 days old (800 objects). One audit a month restores 100 GB of data older than 90 days (1,600 objects) with Standard retrievals, and keeps the restored copies 7 days.
- Each archived object adds 40 KB of metadata: 32 KB at the archive class's rate and 8 KB at the S3 Standard rate (294,912 archived objects).
- No object is deleted before its class's minimum storage duration: objects stay 60 days in Standard-IA (minimum 30) and 275 days in the archive class (minimum 90, or 180 for Deep Archive).
- The bucket is the account's only storage in these classes in Paris, so S3 Standard bills at its first tier (up to 50 TB).
Not counted
- The backup jobs themselves, and data transfer in (not billed).
- The GET requests of the monthly audit (1,600 a month), left out of every variant alike.
- Encryption with AWS KMS (SSE-S3, the default, has no additional cost) and S3 Storage Lens advanced metrics.
Sources
- Managing the lifecycle of objects
- Transitioning objects using Amazon S3 Lifecycle
- Understanding and managing Amazon S3 storage classes
- Understanding archive retrieval options
- Amazon S3 pricing
- COST04-BP05 Enforce data retention policies
USD before tax, 730 h a month. AWS Price List, eu-west-3, offer files published September 11, 2026 and October 14, 2026, fetched October 15, 2026. Illustrative configuration, not a client case.
Pattern 2 of 4 · Illustrative configuration
A versioned bucket: the storage nobody lists
An application keeps 5 TB of current data in a versioned S3 Standard bucket, overwrites part of it every month and leaves some multipart uploads unfinished; the bill is read after a year.
- With versioning on, writing to an existing key keeps the old object as a noncurrent version. Every version is a whole object, billed like one: $0.024 per GB-month in S3 Standard.
- The parts of a multipart upload that is never completed stay in the bucket, unusable and billed, until the upload is completed or stopped.
- A DELETE without a version ID only adds a delete marker: the versions under it stay, and stay billed.
- S3 Storage Lens shows noncurrent version bytes, delete markers and incomplete multipart upload bytes in its free metrics.
- One lifecycle rule: expire noncurrent versions 30 days after they become noncurrent, stop incomplete multipart uploads 7 days after they start, and remove expired delete markers.
Without the rule, the bill grows by 562 GB, $13.49, every month, as the chart below shows over two years; with it, it stays flat.
With the levers: $149.46 a month less (52.5% less), computed.
The bills line by line, the assumptions and the sources
A versioned bucket: the storage nobody lists, before: Versioning on, no lifecycle rule Illustrative
Versioning enabled and no lifecycle rule: every noncurrent version and every unfinished upload of the year is still stored.
| Line | A month |
|---|---|
| Storage | $284.74 |
| Current versions5,120 GB × $0.024 /GB-mo | $122.88 |
| Noncurrent versions, 12 months of overwrites6,144 GB × $0.024 /GB-mo | $147.46 |
| Parts of unfinished multipart uploads, 12 months600 GB × $0.024 /GB-mo | $14.40 |
| A month, computed | $284.74 |
A versioned bucket: the storage nobody lists, with the levers: Noncurrent versions expire after 30 days, unfinished uploads stopped after 7 Illustrative
One lifecycle rule: NoncurrentVersionExpiration after 30 days, AbortIncompleteMultipartUpload after 7 days, and ExpiredObjectDeleteMarker.
| Line | A month |
|---|---|
| Storage | $135.28 |
| Current versions5,120 GB × $0.024 /GB-mo | $122.88 |
| Noncurrent versions, each kept 30 days512 GB × 720 h / 730 h × $0.024 /GB-mo | $12.12 |
| Parts of unfinished multipart uploads, each kept 7 days50 GB × 168 h / 730 h × $0.024 /GB-mo | $0.28 |
| A month, computed | $135.28 |
Assumptions
- Illustrative configuration in Paris (eu-west-3), not a client case.
- 5,120 GB of current versions in S3 Standard, versioning enabled. Each month the application overwrites 512 GB of objects: each overwrite keeps the old object as a noncurrent version, a whole object billed like one.
- Each month 50 GB of parts belong to multipart uploads that are never completed: they stay in the bucket, billed, until the upload is completed or stopped.
- The bill is read after 12 months, at a steady rate of overwrites and failed uploads.
- With the rule, each noncurrent version is kept 30 days (720 hours) and each unfinished upload is stopped 7 days (168 hours) after it starts; 30 days is the recovery window the application's owner accepts, a choice, not an AWS figure.
- Requests are the same in both variants and are not counted.
Not counted
- Delete markers (AWS: a minimal charge, the size of their key name).
- Requests, which are the same in both variants.
Sources
- Retaining multiple versions of objects with S3 Versioning
- Working with delete markers
- Uploading and copying objects using multipart upload in Amazon S3
- Lifecycle configuration elements
- Examples of S3 Lifecycle configurations
- Using Amazon S3 Storage Lens to optimize your storage costs
USD before tax, 730 h a month. AWS Price List, eu-west-3, offer file published October 14, 2026, fetched October 15, 2026. Illustrative configuration, not a client case.
Pattern 3 of 4 · Illustrative configuration
A data lake whose access nobody can predict
100 TB of analytics data in one bucket, read by queries whose access pattern nobody can predict: S3 Standard against S3 Intelligent-Tiering, which moves each object by its own access.
- Objects are written straight into S3 Intelligent-Tiering, with no transition request. Its requests are priced as S3 Standard's: $0.0053 per 1,000 PUT requests, $0.00042 per 1,000 GET requests.
- An object not accessed for 30 consecutive days moves to the Infrequent Access tier: $0.0131 per GB-month instead of $0.024.
- After 90 consecutive days without access, to the Archive Instant Access tier: $0.005 per GB-month, still read in milliseconds.
- When an object in either tier is read, it moves back to the Frequent Access tier. There is no retrieval fee, and no charge for moving between tiers.
- The class charges $0.0025 per 1,000 objects a month for monitoring and automation, on objects of 128 KB and more; smaller objects stay in the Frequent Access tier, unmonitored and not charged the fee.
Moving the existing objects into Intelligent-Tiering with a lifecycle rule costs $104.86 once, computed; new objects can be written straight into the class, with no transition. The chart under the bills shows why object size matters.
With the levers: $1,035.68 a month less (43.0% less), computed.
The bills line by line, the assumptions and the sources
A data lake whose access nobody can predict, before: S3 Standard Illustrative
All 100 TB in S3 Standard.
| Line | A month |
|---|---|
| Storage | $2,406.40 |
| S3 Standard, first 50 TB51,200 GB × $0.024 /GB-mo | $1,228.80 |
| S3 Standard, next 450 TB tier51,200 GB × $0.023 /GB-mo | $1,177.60 |
| A month, computed | $2,406.40 |
A data lake whose access nobody can predict, with the levers: S3 Intelligent-Tiering, archive tiers off Illustrative
The same objects in S3 Intelligent-Tiering, which moves each one to the Infrequent Access tier after 30 days without access and to the Archive Instant Access tier after 90.
| Line | A month |
|---|---|
| Storage | $1,344.51 |
| Frequent Access tier, 30% of the bytes30,720 GB × $0.024 /GB-mo | $737.28 |
| Infrequent Access tier, 30% of the bytes30,720 GB × $0.0131 /GB-mo | $402.43 |
| Archive Instant Access tier, 40% of the bytes40,960 GB × $0.005 /GB-mo | $204.80 |
| Other | |
| Monitoring and automation10,485,760 objects × $0.0025 /1K obj-mo | $26.21 |
| A month, computed | $1,370.72 |
Assumptions
- Illustrative configuration in Paris (eu-west-3), not a client case.
- 102,400 GB (100 TB) as 10 MiB objects: 10,485,760 objects, all of 128 KB or more, so all monitored by Intelligent-Tiering.
- In the month, 30% of the bytes were read in the last 30 days, 30% have not been read for 30 to 90 days, and 40% not for more than 90 days: an assumed mix, steady from month to month (S3 Storage Lens or S3 Inventory measure the real one).
- Queries need their data at once, so the optional Archive Access and Deep Archive Access tiers stay off: no object needs a restore.
- Requests are priced the same in S3 Intelligent-Tiering as in S3 Standard in Paris, and are the same in both variants: they are not counted.
- The bucket is the account's only S3 Standard storage in Paris: its first 50 TB bill at the first tier, the next 50 TB at the second.
Not counted
- Requests, the same in both variants.
- The analytics engine and the data transfer of its queries (none within the Region).
Sources
- How S3 Intelligent-Tiering works
- Managing storage costs with Amazon S3 Intelligent-Tiering
- Amazon S3 pricing
- Amazon S3 FAQs
USD before tax, 730 h a month. AWS Price List, eu-west-3, offer file published October 14, 2026, fetched October 15, 2026. Illustrative configuration, not a client case.
Pattern 4 of 4 · Illustrative configuration
A disaster-recovery copy in Frankfurt
A versioned bucket in Paris copies each new object to a bucket in Frankfurt with S3 Cross-Region Replication: the replica's storage class and S3 Replication Time Control make most of the difference.
- Replication needs versioning on both buckets. Live replication copies objects written after the rule is set; existing objects need S3 Batch Replication.
- Each GB copied out of Paris to Frankfurt is billed as inter-Region data transfer: $0.02 per GB. The replica is stored, and its PUT requests are billed, at Frankfurt prices.
- S3 Replication Time Control adds $0.015 per GB replicated and replication metrics billed as CloudWatch custom metrics, for most objects replicated in seconds and an SLA at 15 minutes. It is optional.
- The replica's storage class is a setting of the rule; by default it is the source's. Here S3 Glacier Instant Retrieval, for a copy read only in a recovery, still in milliseconds: $0.005 per GB-month in Frankfurt, and $0.03 per GB read back.
A replica is paid for when it is read too: reading the whole replica back in a recovery bills $614.40 of retrieval from Glacier Instant Retrieval, $204.80 from One Zone-IA, and none from S3 Standard. A One Zone-IA replica costs $117.47 a month more and $409.60 less to read back once: it is the cheaper copy only if the whole replica is read back more often than once every 3.5 months, computed. Copying the 20 TB already in the bucket into Glacier Instant Retrieval with S3 Batch Replication costs $464.94 once, computed.
With the levers: $412.81 a month less (40.1% less), computed.
The bills line by line, the assumptions and the sources
A disaster-recovery copy in Frankfurt, before: Replica in S3 Standard, with S3 RTC Illustrative
The replication defaults (the replica takes the source's class, S3 Standard) and S3 Replication Time Control.
| Line | A month |
|---|---|
| Storage | $993.28 |
| Source bucket in Paris, S3 Standard20,480 GB × $0.024 /GB-mo | $491.52 |
| Replica storage in Frankfurt, S3 Standard20,480 GB × $0.0245 /GB-mo | $501.76 |
| Network | $35.84 |
| Data transfer from Paris to Frankfurt1,024 GB × $0.02 /GB | $20.48 |
| S3 Replication Time Control data transfer1,024 GB × $0.015 /GB | $15.36 |
| Other | $1.40 |
| PUT requests in Paris131,072 requests × $0.0053 /1K req | $0.69 |
| Replication PUT requests in Frankfurt, S3 Standard131,072 requests × $0.0054 /1K req | $0.71 |
| A month, computed | $1,030.52 |
A disaster-recovery copy in Frankfurt, with the levers: Replica in S3 Glacier Instant Retrieval, without S3 RTC Illustrative
The rule stores the replicas in S3 Glacier Instant Retrieval, for a copy read less than once a quarter and still read in milliseconds, and leaves S3 RTC off.
| Line | A month |
|---|---|
| Storage | $593.92 |
| Source bucket in Paris, S3 Standard20,480 GB × $0.024 /GB-mo | $491.52 |
| Replica storage in Frankfurt, S3 Glacier Instant Retrieval20,480 GB × $0.005 /GB-mo | $102.40 |
| Network | |
| Data transfer from Paris to Frankfurt1,024 GB × $0.02 /GB | $20.48 |
| Other | $3.31 |
| PUT requests in Paris131,072 requests × $0.0053 /1K req | $0.69 |
| Replication PUT requests in Frankfurt, S3 Glacier Instant Retrieval131,072 requests × $0.02 /1K req | $2.62 |
| A month, computed | $617.71 |
Replica in S3 One Zone-IA, without S3 RTC: $735.18 a month, 28.7% less than before, computed.
Assumptions
- Illustrative configuration in Paris (eu-west-3) with its replica in Frankfurt (eu-central-1), not a client case.
- 20,480 GB (20 TB) of production data in a versioned S3 Standard bucket in Paris, and 1,024 GB of new objects a month as 8 MiB objects (131,072 a month). New objects only: nothing is overwritten.
- A copy must exist in another Region. Frankfurt (eu-central-1) is the illustration: the replica's storage and its replication PUT requests are billed at Frankfurt's list prices, the data transfer out of Paris and S3 Replication Time Control at Paris's.
- The replica bucket holds the same 20 TB as the source, and is read only in a recovery.
- Without S3 RTC: the recovery point does not need most objects copied within 15 minutes (an assumption to check against the business's own target).
- The replica bucket's lifecycle expires noncurrent replicas no earlier than the replica class's minimum storage duration (90 days for Glacier Instant Retrieval, 30 for One Zone-IA).
- Each bucket is its account's only S3 storage in its Region: both bill at the first tier.
Not counted
- S3 Replication metrics, billed as Amazon CloudWatch custom metrics when S3 RTC is on.
- Encryption with AWS KMS (SSE-S3 has no additional cost).
- The requests and the transfer back to Paris of a recovery.
Sources
- Replicating objects within and across Regions
- What does Amazon S3 replicate?
- Requirements and considerations for replication
- Meeting compliance requirements with S3 Replication Time Control
- Replication configuration file elements
- Replicating existing objects with Batch Replication
- Understanding and managing Amazon S3 storage classes
- Amazon S3 pricing
USD before tax, 730 h a month. AWS Price List, eu-west-3 and eu-central-1, offer files published September 16, 2026 and October 14, 2026, fetched October 15, 2026. Illustrative configuration, not a client case.
Want the same levers on your own bill?
Get a free auditHow to reduce S3 costs
Each lever below comes from AWS documentation; their order is this article's. S3 storage has no commitment discount in the AWS Price List, so the order is shorter than EC2's: see the bill first, then delete what nothing needs, then move what stays to the class that fits it, then route its traffic, and review on a cadence, because a rule added later acts on everything already in the bucket. The levers, in that order:
- Lever 01,SeeSee where the S3 bill comes fromAlways, and first
- Lever 02,TrimExpire what nobody needsData with a known end of life
- Lever 03,TrimClean up old versions, delete markers and unfinished uploadsEvery versioned bucket, every multipart upload
- Lever 04,TrimTurn on S3 Bucket Keys for SSE-KMSBuckets encrypted with SSE-KMS
- Lever 05,ReshapeMove data down the classes as it coolsAccess that falls with age
- Lever 06,ReshapeLet Intelligent-Tiering move data whose access you cannot predictUnknown or changing access
- Lever 07,ReshapeChoose the archive class by how fast you need the data backData read once a quarter or less
- Lever 08,ReshapeUse One Zone-IA for data you can re-createData you can re-create, replicas
- Lever 09,ReshapeStore fewer, larger objectsBuckets of many small objects
- Lever 10,ReshapeReplicate only what needs a copy, into the right classEvery replication rule
- Lever 11,RouteKeep S3 traffic off the NAT gateway with a gateway endpointPrivate subnets that reach S3 through NAT
- Lever 12,RouteServe public reads through CloudFront, after doing the sumsPublic content read many times
- Lever 13,RouteMake requesters pay for shared datasetsDatasets shared with other accounts
- Lever 14,ReviewReview on a cadenceEvery bucket
Lever 01 · See
See where the S3 bill comes from
Split the bill by usage type in Cost Explorer, and by bucket with cost allocation tags. Then look for the storage nobody lists: S3 Storage Lens can "identify cost optimization opportunities", and its free metrics include "Noncurrent version bytes", "Delete marker bytes" and "Incomplete multipart upload bytes" (metrics glossary). The free metrics come with 14 days of history; the advanced metrics add activity metrics, prefixes and 15 months, at $0.20 per million objects a month in Paris. AWS's cost guide for Storage Lens lists what to look for, and each finding has its lever below:
What Storage Lens points to, and the lever for each
| Look for (AWS's words) | Lever |
|---|---|
| "Buckets with incomplete multipart uploads older than 7 days" | Lever 03: clean up |
| "Buckets that are accumulating numerous noncurrent versions" | Lever 03: clean up |
| "Buckets that don't have lifecycle rules to abort incomplete multipart uploads" | Lever 03: clean up |
| "Buckets that don't have lifecycle rules to expire noncurrent versions objects" | Lever 03: clean up |
| "Buckets that don't have lifecycle rules to transition objects to a different storage class" | Lever 05: move down |
Storage Class Analysis watches a set of objects for 30 days or more, at $0.10 per million objects a month, but "only provides recommendations for Standard to Standard IA classes".
Lever 02 · Trim
Expire what nobody needs
The Well-Architected Framework asks you to "define data retention policies on supported resources to handle object deletion per your organizations' requirements"; in S3, that is a lifecycle expiration, and "Amazon S3 deletes expired objects on your behalf". Deletions are free, but an expiration acts differently in a versioned bucket (lifecycle configuration elements):
- Expiration
- Deletes the object
- Deleting it for good
- Done: nothing more to add
- Unfinished uploads
- Not removed: they need their own action
- Expiration
- Adds a delete marker; the versions stay, billed
- Deleting it for good
- Add a noncurrent version expiration
- Unfinished uploads
- Not removed: they need their own action
What differs: in a versioned bucket, the expiration only hides the object until its noncurrent versions expire too.
Watch the minimum durations: "If you create a Lifecycle expiration rule that causes objects that have been in S3 Glacier Flexible Retrieval storage for less than 90 days to expire, you are charged for 90 days", and expired objects "can't be recovered".
Lever 03 · Trim
Clean up old versions, delete markers and unfinished uploads
One lifecycle rule holds the three actions: NoncurrentVersionExpiration, with a number of days and optionally NewerNoncurrentVersions (between 1 and 100 versions kept), ExpiredObjectDeleteMarker and AbortIncompleteMultipartUpload (lifecycle configuration elements). For unfinished uploads, AWS recommends "7 days as a good starting point" and a rule to delete them.
Keep the noncurrent versions as long as a recovery needs them: they are what versioning was turned on for. With both settings, "both the NoncurrentDays and the NewerNoncurrentVersions values must be exceeded" before a version goes. On a replicated bucket, set the rule on both sides. The versioned bucket above prices a year without the rule.
Lever 04 · Trim
Turn on S3 Bucket Keys for SSE-KMS
Without a Bucket Key, S3 calls AWS KMS for each request on a KMS-encrypted object, at $0.03 per 10,000 requests in Paris (Encryption prices 100 million of them). A bucket-level key cuts that traffic (Reducing the cost of SSE-KMS with Amazon S3 Bucket Keys):
AWS says
Up to 99% lesson AWS KMS request costs, by decreasing the request traffic from Amazon S3 to AWS KMS.
AWS · Reducing the cost of SSE-KMS with Amazon S3 Bucket Keys
Objects already in the bucket keep their own data keys until a CopyObject rewrites them, Bucket Keys do not apply to DSSE-KMS, and AWS notes that "AWS KMS request savings reflect the number of requesters, request patterns, and relative age of the objects requested": the "up to" is AWS's, not a figure computed here.
Lever 05 · Reshape
Move data down the classes as it cools
"As you move the objects from one storage class to another, you save on storage costs" (lifecycle), but "consider the ingest or transition cost before moving objects into any storage class" (Amazon S3 pricing). A transition is paid once per object, the saving every month, so object size decides how fast it pays back:
Months of storage saving needed to pay back one transition request, by object size, in Paris (computed)
| Object size | Into Standard-IA | Into Glacier Flexible Retrieval | Into Deep Archive |
|---|---|---|---|
| 128 KB | 7.52 | 14.94 | 24.27 |
| 512 KB | 1.88 | 3.37 | 5.66 |
| 1 MB | 0.94 | 1.66 | 2.80 |
| 10 MB | 0.09 | 0.16 | 0.28 |
| 64 MB | 0.01 | 0.03 | 0.04 |
Computed from the AWS Price List, eu-west-3, offer files published September 11, 2026 and October 14, 2026, fetched October 15, 2026.
Storage alone, from S3 Standard; the archive classes include the 40 KB of metadata per object. The rest of the rules apply too: minimum durations, the 128 KB minimum size, retrieval fees, and restores before reading. Storage Class Analysis shows when S3 Standard data cools. The backup archive above prices a full lifecycle.
Lever 06 · Reshape
Let Intelligent-Tiering move data whose access you cannot predict
"S3 Intelligent-Tiering is the recommended storage class for data with unknown, changing, or unpredictable access patterns, independent of object size or retention period". New objects can be written straight into it, by naming INTELLIGENT_TIERING as their storage class (How S3 Intelligent-Tiering works); existing objects move with a lifecycle transition, at $0.01 per 1,000 requests. Turn on the archive tiers only for data that can wait for a restore. S3 Inventory reports the access tier of each object. The data lake above prices it, with the crossing by object size of Is Intelligent-Tiering worth it?.
Lever 07 · Reshape
Choose the archive class by how fast you need the data back
Glacier Instant Retrieval reads in milliseconds; the two other archive classes restore first (Which Glacier class?), and differ on price and on time:
- Storage
- $0.00405 per GB-month
- Minimum duration
- 90 days
- Standard restore
- 3–5 hours, $0.0105 per GB
- Bulk restore
- 5–12 hours, free
- Storage
- $0.0018 per GB-month
- Minimum duration
- 180 days
- Standard restore
- Within 12 hours, $0.021 per GB
- Bulk restore
- Within 48 hours, $0.005 per GB
What differs: a lower price per GB-month against a longer wait, and a Bulk restore that is no longer free. Restore requests are billed on top, per 1,000.
Restores of "tens of millions of objects or hundreds of terabytes" take longer, and AWS points to S3 Batch Operations to restore many objects (archive retrieval options). In the backup archive, Deep Archive instead of Glacier Flexible Retrieval brings the month to $141.85, for restores within 12 hours instead of 3 to 5.
Lever 08 · Reshape
Use One Zone-IA for data you can re-create
One Zone-IA keeps data in a single zone, so it is "not resilient to the physical loss of the Availability Zone" (storage classes); AWS recommends it for data you can re-create, and for the replicas of a Cross-Region Replication:
One Zone-IA against Standard-IA
20.0% lessper GB-month in Paris, computed; AWS writes 20% less.
Computed from the AWS Price List · eu-west-3 · Oct 14, 2026
Its minimums and its retrieval fee are Standard-IA's. The copy in Frankfurt prices a One Zone-IA replica against a Glacier Instant Retrieval one: for a copy read only in a recovery, the second costs $117.47 a month less, computed.
Lever 09 · Reshape
Store fewer, larger objects
Every request is billed, and several charges count objects rather than bytes:
S3 charges counted per object, in Paris
| Item | List price | Unit |
|---|---|---|
| Lifecycle transition into Standard-IA | $0.01 | per 1,000 requests |
| PUT or transition into Glacier Deep Archive | $0.06 | per 1,000 requests |
| Intelligent-Tiering monitoringObjects of 128 KB or more | $0.0025 | per 1,000 objects a month |
| S3 Batch OperationsObjects processed | $1.00 | per million objects |
USD, before tax. AWS Price List, eu-west-3, offer files published September 11, 2026 and October 14, 2026, fetched October 15, 2026.
Each object archived in Glacier Flexible Retrieval or Deep Archive also carries 40 KB of metadata, 8 KB of it at the S3 Standard rate. AWS's advice for archives holds for the rest: "consider aggregating many small objects into a smaller number of large objects to reduce overhead costs". Storage Lens shows each bucket's object count and average object size. Below 16.1 KB, an object costs more archived than kept in S3 Standard, computed; the transition table above shows how size sets the payback.
Lever 10 · Reshape
Replicate only what needs a copy, into the right class
A replication rule can filter by prefix or tag and choose the replica's class (replication configuration); turn on S3 Replication Time Control only when the recovery point needs objects copied within 15 minutes. Set a lifecycle rule on the destination too, no shorter than the replica class's minimum duration, and count the retrieval fee a recovery would pay. The copy in Frankfurt prices three replica classes.
Lever 11 · Route
Keep S3 traffic off the NAT gateway with a gateway endpoint
"If most traffic through your NAT gateway is to AWS services that support interface endpoints or gateway endpoints, consider creating an interface endpoint or gateway endpoint for these services" (NAT gateway pricing); the Well-Architected Framework says the same of VPC endpoints. For S3 in the same Region, a gateway endpoint does it for nothing:
- Data processing
- $0.05 per GB
- The gateway
- $0.05 per hour
- Reaches
- S3 and the internet
- Data processing
- No additional charge
- The gateway
- No additional charge
- Reaches
- S3 in its own Region, from its own VPC
What differs: a price per GB on S3 traffic. The NAT gateway's hourly charge stays if other traffic still needs it.
At 10 TB a month from S3 to the instances, the NAT gateway's data processing alone comes to:
NAT gateway data processing, Paris
$512.00 a monthfor 10 TB (10,240 GB) a month of S3 traffic, computed; through a gateway endpoint, no additional charge.
Computed from the AWS Price List · eu-west-3 · Oct 12, 2026
A gateway endpoint does not serve on-premises networks, peered VPCs in other Regions or a transit gateway; those need an interface endpoint, billed per hour and per GB. Endpoint policies can limit the buckets it reaches.
Lever 12 · Route
Serve public reads through CloudFront, after doing the sums
Data from S3 to CloudFront is not billed, and AWS's case for a cache is that "applications that use caching also send fewer direct requests to Amazon S3, which can help reduce request costs" (performance design patterns). The list prices cut both ways: CloudFront's data out from Europe costs 5.6% less per GB than S3's, but an HTTPS request through CloudFront costs 2.86 times an S3 GET, computed. With 1 MB objects and 90% of requests served from the cache:
Served from S3 Illustrative
| Line | A month |
|---|---|
| Network | |
| Data out to the internet10,240 GB × $0.09 /GB | $921.60 |
| Other | |
| GET requests10,485,760 requests × $0.00042 /1K req | $4.40 |
| A month, computed | $926.00 |
Served through CloudFront Illustrative
| Line | A month |
|---|---|
| Network | $870.40 |
| CloudFront data out, Europe10,240 GB × $0.085 /GB | $870.40 |
| S3 to CloudFront1,024 GB × $0.00 /GB | $0.00 |
| Other | $13.02 |
| CloudFront HTTPS requests10,485,760 requests × $0.012 /10K req | $12.58 |
| S3 GET requests, cache misses1,048,576 requests × $0.00042 /1K req | $0.44 |
| A month, computed | $883.42 |
Through CloudFront costs $42.58 a month less than straight from S3 (4.6% less), computed.
USD before tax, 730 h a month. AWS Price List, eu-west-3 and Europe edge locations, offer files published September 16, 2026, October 3, 2026 and October 14, 2026, fetched October 15, 2026. Illustrative configuration, not a client case.
With 100 KB objects, the same 10 TB cost $966.70 straight from S3 and $1,003.76 through CloudFront: at a 90% hit ratio, CloudFront costs less from about 172 KB per object, computed. The hit ratio is an assumption, the CloudFront free tier (1 TB and 10 million requests a month, one per organization) is not deducted, and CloudFront's flat-rate plans, a monthly price per distribution, are left out of these sums.
Lever 13 · Route
Make requesters pay for shared datasets
"With Requester Pays buckets, the requester instead of the bucket owner pays the cost of the request and the data download from the bucket. The bucket owner always pays the cost of storing data". It suits datasets shared with other accounts, such as reference or geospatial data. A Requester Pays bucket allows no anonymous access, and each requester accepts the charge in its requests.
Lever 14 · Review
Review on a cadence
"The review effort should reflect potential benefit", in AWS's words (COST10-BP01):
How often AWS suggests reviewing a workload, its buckets included
| Workload | Reviewed |
|---|---|
| Core workloads, or workloads over ten percent of the bill | Quarterly or every six months |
| Workloads below ten percent of the bill | Annually |
Storage Lens keeps 14 days of history in its free metrics, 15 months in the advanced ones. A review that adds a lifecycle rule acts on the whole bucket at once, so price the first month's transitions before turning it on.
In short: See the bill per bucket, expire and clean what nothing needs, then move what stays to the class its size and reads justify: deleting is free past the minimum durations, but each object a rule moves is a billed transition request.
FAQ
How is S3 billed?
By the GB-month of storage, averaged over the month, at each object's class rate, plus requests, retrievals, data transfer, management features and replication; the bucket owner pays, unless the bucket is a Requester Pays bucket (What an S3 bill is made of).
Does S3 versioning cost money?
Every version is a whole object, billed at its class's rate, and a delete in a versioned bucket keeps the versions under a delete marker (Versioning, delete markers and unfinished uploads).
Is data transfer between S3 and EC2 free?
Within the same Region, yes; across Regions, it is charged. From a private subnet, a gateway endpoint avoids the NAT gateway's charge per GB (Data transfer).
Does CloudFront reduce S3 costs?
Not always: data from S3 to CloudFront is free and CloudFront's data out costs less per GB, but its requests cost more than S3's, so small objects can cost more through it (Serve public reads through CloudFront, after doing the sums).
What happens if I delete, overwrite or move an object before its minimum storage duration?
You are billed for the days left to the minimum: the minimum is 30 days for Standard-IA and One Zone-IA, 90 for Glacier Instant and Flexible Retrieval, 180 for Deep Archive; S3 Standard and Intelligent-Tiering have none (Minimum durations, minimum sizes and archive metadata).