AWS Cost
May 7, 2026 12 min read

S3 Egress: The Hidden $0.09/GB That Eats AI Companies Alive

S3 egress is the line item most engineering teams don't see until it's catastrophic. Here are the 6 patterns that cut S3 egress bills 70% — exact, audited, real.

L

Lakshmi Kiranmai Guduru

Founder, CARTIEAI

S3 egress audits we've run, blunt math, no fluff. Specific dollar figures are from real customer accounts; you should expect 50–80% of your egress to be eliminable on first pass.

Why S3 egress is the silent killer

Three things make S3 egress especially treacherous:

  1. Pricing tiers are bewildering. $0.09/GB to internet, free to same-region same-AWS-service, $0.02/GB cross-region, $0.01/GB cross-AZ — and that's just the first decimal point.
  2. The bill arrives 30 days late. By the time you see the spike on the invoice, you've been bleeding for a month.
  3. Engineers can trigger it accidentally. A single mis-configured VPC endpoint can re-route an entire data pipeline through public internet.

We've seen one single mis-routed Glue job balloon a customer's monthly egress bill by $40K in 11 days. The patterns below would have caught it on day 1.


Pattern 1: VPC Endpoints for S3 (highest ROI for app workloads)

Default behaviour: an EC2 instance in a private subnet talking to S3 routes through a NAT Gateway → through internet → back to S3. You pay:

  • NAT Gateway: $0.045/GB
  • Egress to internet: $0.09/GB
  • Total: $0.135/GB

With a VPC Gateway Endpoint (free!) for S3, traffic stays on AWS internal networking. Cost: $0.00/GB.

The audit move:

aws ec2 describe-vpc-endpoints \
  --filters Name=service-name,Values="com.amazonaws.<region>.s3" \
  --query 'VpcEndpoints[*].VpcId'

Cross-reference against your VPC list. Any VPC that talks to S3 and isn't in this list is bleeding money on every byte.

Real example. A data company ran ETL jobs in a private subnet pulling 8 TB/month from S3. Cost via NAT: ~$1,080/month. Cost with Gateway Endpoint: $0. Saved $13K/year, took 11 minutes to deploy.

Estimated savings: 90–100% on S3-from-VPC traffic.


Pattern 2: CloudFront for public assets (required, not optional)

Direct S3 to internet: $0.09/GB. CloudFront to internet: $0.085/GB and you get caching, which means your origin (S3) reads drop 60–95% on real workloads.

Net effect: a static site or media-asset bucket served via CloudFront usually costs 20–40% less than direct S3 — even ignoring the caching benefit. With caching, it's often 70–90% less.

The audit move: look for any S3 bucket with public-read policies and a HEAD/GET-heavy access pattern. If it's serving directly to the internet, you're paying double.

Bonus: CloudFront's Origin Shield (extra layer, ~$0.01/GB) further reduces origin reads when you have many edge locations. Worth it for high-traffic sites.

Estimated savings: 30–80% on public S3 egress.


Pattern 3: Intra-region routing — the unforgiving rule

S3 in us-east-1 to compute in us-east-2? $0.02/GB cross-region. Compute and S3 in the same region? $0.00/GB.

The audit:

aws s3api list-buckets --query 'Buckets[*].[Name,CreationDate]'
aws s3api get-bucket-location --bucket <name>

For each compute cluster, list the S3 buckets it talks to. Any cross-region pairing is a candidate for migration or replication. CRR (Cross-Region Replication) moves data once and lets your compute hit a same-region copy from then on.

Estimated savings: 100% on cross-region egress; pay back the CRR cost within 1–6 months on heavy workloads.


Pattern 4: Storage class is half the battle

Egress and storage interact in counter-intuitive ways:

  • Standard: $0.023/GB-month storage, $0.09/GB egress
  • Intelligent-Tiering: $0.023 → drops to $0.0025 for cold tier, same egress
  • Glacier Instant Retrieval: $0.004/GB-month, but $0.03/GB retrieval
  • Glacier Flexible Retrieval: $0.0036/GB-month, slow retrieval, much cheaper

Most teams default everything to Standard "to be safe". For data accessed less than monthly, Intelligent-Tiering's automatic transitions cut storage cost 80–90% with no operational overhead — and unlike Glacier classes, no retrieval fees to surprise you.

The audit move: S3 Storage Class Analytics → identify objects with last-access > 30 days → switch tier or apply a Lifecycle Rule.

Estimated savings: 40–80% on storage cost. Read patterns matter — model before switching.


Pattern 5: Block accidental data-out paths

The catastrophic-egress patterns we see:

  • Misconfigured replication (writing back to a bucket in another account/region in a loop)
  • Public buckets being scraped by bots or competitors
  • Application bugs retrieving the same large object repeatedly per request
  • Logging into S3 from many regions, then reading back from one

Mitigation:

  • Bucket Requester Pays for buckets you publish to others
  • Bucket policies denying s3:GetObject from outside expected principals
  • CloudWatch alarms on BytesDownloaded > 2× rolling-7-day baseline
  • AWS Cost Anomaly Detection with a per-service watchlist on S3

Estimated savings: Your sanity, primarily. Catastrophe-prevention math doesn't have a clean ROI but the worst case is 5- and 6-figure single-month bills.


Pattern 6: Compress at the source

Every audit finds at least one bucket of uncompressed JSON or CSV being shipped at full size to clients. gzip, zstd or brotli compresses log/JSON payloads 60–95%. CloudFront does this automatically for some content types when Compress Objects Automatically is on; check that it's enabled in your distributions.

Estimated savings: Linear with compression ratio. 60–80% on text/JSON-heavy egress.


The 30-minute S3 egress audit

Do these in order:

  1. aws ce get-cost-and-usage scoped to S3 + DataTransfer for the last 30 days, broken down by usage type.
  2. List all VPCs without S3 Gateway Endpoints (Pattern 1).
  3. List all public S3 buckets without CloudFront (Pattern 2).
  4. List all cross-region S3 ↔ compute pairs (Pattern 3).
  5. Set up a CloudWatch alarm on BytesDownloaded and BytesDownloadedExternal per bucket.

That's it. We've never run this audit on a real account and found <$500/month of egress savings.


How CARTIEAI helps

CARTIEAI's S3 egress analyzer connects read-only to your AWS account, models egress per bucket / per VPC / per region, and surfaces the 5 highest-ROI moves with their dollar impact. Typical first scan: $1K–$25K/month of quick wins.

Even without a tool, Patterns 1 and 2 alone find 50–80% savings on most accounts.

Now go run describe-vpc-endpoints. 🧭

FREE — NO SIGNUP — 60 SECONDS

Find your Snowflake waste right now.

Take the free 10-question Snowflake Cost Health Score. Get a grade, your monthly $-waste estimate, and the top 3 fixes — instantly.

THE FINOPS BRIEF

3 cost-saving tips, every Tuesday.

Built for finance & engineering teams who are tired of paying for cloud they don't use. No fluff. Just what works.

Unsubscribe anytime. We never sell your data.

Lakshmi Kiranmai Guduru

ABOUT THE AUTHOR

Lakshmi Kiranmai Guduru

Founder, CARTIEAI · Building in public

I'm building CARTIEAI to fix the cloud-cost problem I saw drain millions at companies I worked for — where engineering and finance kept talking past each other. If you liked this post, here's where I share unfiltered notes on building this in public:

Keep reading

We value your privacy. Cookies help us improve your experience. Learn more

Install CARTIEAI

Add to your home screen for quick access and offline support