All cheat sheets
Storagecheat sheet

S3 Storage Lens

Free, org-wide S3 analytics that expose the three classic money leaks — incomplete multipart uploads, non-current version bloat, and cold data in hot storage classes — in a dashboard you just switch on.

Last reviewed: July 11, 2026

TL;DR: Storage Lens is free X-ray vision for your S3 estate: one dashboard across all buckets, accounts, and regions. First-time users almost always find the same three leaks — incomplete multipart uploads (billable bytes invisible in object listings), non-current version bloat (every overwrite hoarded forever), and cold data parked in Standard. Turn it on, look at your top three buckets, write one or two lifecycle rules. The first pass usually captures most of the savings you'll ever get.

The numbers

  • Free tier: 28 metrics, daily refresh, 14-day history — enough to find the big wins
  • Advanced tier (paid): 60+ metrics, 15-month history, prefix-level detail, CloudWatch export — worth it at petabyte scale, overkill below
  • Real first-pass finds from the field: 4 TB of orphaned multipart chunks (~$1,200/year of literal garbage); 12 TB of CloudTrail logs in Standard that belonged in Glacier ($2,300/month); 40 TB of non-current versions as an enterprise's single biggest storage line

Do this

  1. Enable the free dashboard (S3 console → Storage Lens → default dashboard is often already collecting; at org level, aggregate all accounts).

  2. Sort buckets by size, open the top three, and check in order:

    • Incomplete multipart upload bytes → fix forever with an abort rule:

      aws s3api put-bucket-lifecycle-configuration --bucket YOUR-BUCKET \
        --lifecycle-configuration '{"Rules":[{"ID":"abort-mpu","Status":"Enabled",
        "Filter":{},"AbortIncompleteMultipartUpload":{"DaysAfterInitiation":7}}]}'
      
    • Non-current version bytes → versioned buckets need a NoncurrentVersionExpiration (or transition) rule, e.g. expire non-current versions after 90 days.

    • Storage-class distribution → high storage + low request count = misclassified data; hand those buckets to lifecycle policies or Intelligent-Tiering.

  3. Make it recurring: a 15-minute monthly review beats the universal "enabled it, glanced once, forgot" pattern. Storage Lens won't notify you — you have to come back.

  4. At FinOps maturity, export to S3 + Athena/QuickSight for per-team trends and week-over-week growth alerts.

Gotchas

  • It's visibility, not action. Storage Lens tells you what's wrong; you still write the lifecycle rules. The tool saves nothing by itself.
  • Not real-time — daily refresh on free tier; don't expect instant feedback on changes.
  • Incomplete MPUs are invisible elsewhere. They don't appear in bucket listings and aren't itemized in Cost Explorer — this dashboard is where they show up.
  • Versioning without expiration rules is the silent whale on long-lived, frequently-overwritten buckets.

Skip this if

Honestly, almost never — it's free and takes minutes. The only low-value cases: a tiny S3 footprint (a few GB), or an estate already governed by tight, recently-reviewed lifecycle rules. Even then, a one-time pass to prove everything's classified right is cheap insurance. For per-bucket access-pattern evidence before writing rules, pair it with Storage Class Analysis.

Run this audit with your AI assistant

Paste this into Claude, ChatGPT, or any agent that can run the AWS CLI with read-only credentials. It audits your account for exactly the waste this sheet describes — and changes nothing.

You are auditing an AWS account's S3 footprint the way S3 Storage Lens
would, plus checking whether Storage Lens itself is set up. Use the AWS
CLI with READ-ONLY credentials. Do not create, modify, or delete
anything — report findings and recommended (unapplied) fixes only.

1. Check Storage Lens configs: aws s3control list-storage-lens-configs
   --account-id <acct>. Note free vs advanced tier and whether a
   dashboard actually exists.
2. Hunt the three classic leaks per bucket (top 15 by size):
   a. Incomplete multipart uploads: aws s3api list-multipart-uploads
      per bucket; sum parts if feasible. These bytes are invisible to
      normal object listings but bill monthly.
   b. Non-current version bloat: aws s3api get-bucket-versioning; if
      enabled, check lifecycle for NoncurrentVersionExpiration /
      NoncurrentVersionTransition rules — versioned buckets WITHOUT
      those rules are the finding.
   c. Cold data in hot classes: buckets with large StandardStorage
      (CloudWatch BucketSizeBytes) and low request activity (request
      metrics if enabled; otherwise flag by archive/backup-ish naming).
3. For each finding estimate $/month at $0.023/GB (Standard).

Report: findings grouped by leak type with estimated monthly waste and
the fix for each (abort-incomplete-MPU rule / noncurrent-version
expiration / storage-class transition), plus whether to enable a free
Storage Lens dashboard for ongoing visibility. Output example lifecycle
JSON — but do NOT apply anything.
Works with any assistant that can run shell commands.

Want the guided version?

The S3 Storage Lens walkthrough covers this topic interactively — it asks about your setup, branches to what’s relevant, and quizzes you on the tricky parts. Free and anonymous.

Start the walkthrough