S3 Standard buckets with under 1,000 requests a day and no lifecycle rule, suited to Standard-IA
What does ZopNight detect here?
ZopNight flags buckets whose largest storage class is S3 `STANDARD`, with no lifecycle policy and request metrics showing fewer than 1,000 requests a day. Moving that data to Standard-IA drops storage from $0.023 to $0.0125 per GB-month in us-east-1, and ZopNight prices the finding from the bucket's actual Standard bytes.
Signal and threshold
| Field | Value |
|---|---|
| Rule IDs | RC-070 |
| Category | rightsizing |
| Severity | low |
| Metric | AllRequests (S3 request metrics) |
| Threshold | dominant class STANDARD, < 1,000 requests/day, no lifecycle policy |
| Evaluation window | 30d |
| Source | ZopNight |
| Permissions used | s3:GetLifecycleConfiguration · s3:GetMetricsConfiguration · cloudwatch:GetMetricStatistics |
Where it applies
Standard-IA halves storage for data you rarely read
S3 Standard-IA is designed for long-lived data accessed about once a month, per the storage class comparison. AWS’s US East (N. Virginia) price list puts it at $0.0125 per GB-month against $0.023 for Standard. The conditions matter as much as the price: Standard-IA has a 30-day minimum storage duration, bills objects under 128 KB as 128 KB, and charges a per-GB retrieval fee. A bucket that is written once and read rarely gains; one that is read constantly loses.
Measuring size and access for a bucket
aws cloudwatch get-metric-statistics --namespace AWS/S3 --metric-name BucketSizeBytes \ --dimensions Name=BucketName,Value=my-bucket Name=StorageType,Value=StandardStorage \ --start-time 2026-09-22T00:00:00Z --end-time 2026-09-25T00:00:00Z \ --period 86400 --statistics Average
aws cloudwatch get-metric-statistics --namespace AWS/S3 --metric-name AllRequests \ --dimensions Name=BucketName,Value=my-bucket Name=FilterId,Value=EntireBucket \ --start-time 2026-08-26T00:00:00Z --end-time 2026-09-25T00:00:00Z \ --period 86400 --statistics SumAllRequests only exists after you add a request metrics configuration to the bucket.
When a bucket qualifies
- S3 Standard holds more of the bucket’s bytes than any other class.
- The bucket has no lifecycle policy managing transitions already.
- It has a known monthly cost.
- Request metrics exist and the average is below 1,000 requests a day. At or above that level, Standard-IA request and retrieval charges would eat the storage saving.
- The per-bucket Standard to Standard-IA saving that ZopNight computes from the bucket’s storage classes is positive.
Buckets that are skipped
No request metrics means no finding, because ZopNight will not call a bucket cold without measuring it. Buckets dominated by another class, buckets with a lifecycle policy, and buckets with no positive saving are also skipped. A bucket that suits automatic tiering better is covered by S3 Intelligent-Tiering Not Enabled, and one that has no lifecycle rule but no measured access data is not priced today; S3 Bucket Lifecycle Policy Missing is meant to cover it once ZopNight measures per-bucket cold data.
Standard bytes times the rate gap
saving = Standard GB x (Standard rate - Standard-IA rate)capped at the bucket's monthly costAt us-east-1 list prices, 10 TB in Standard saves about $107 a month once it sits in Standard-IA.
Moving cold data to Standard-IA
- Use Storage Lens or Storage Class Analysis to confirm which prefixes are cold.
- Add a transition after 30 days, the earliest point lifecycle allows for Standard-IA:
{"Rules":[{"ID":"standard-to-ia","Status":"Enabled","Filter":{"Prefix":"reports/"}, "Transitions":[{"Days":30,"StorageClass":"STANDARD_IA"}]}]}- Apply it with
aws s3api put-bucket-lifecycle-configuration, then watch retrieval charges on the next bill.