When S3 versioning is enabled but no lifecycle rules are defined for non-current objects, outdated versions accumulate indefinitely. These non-current versions are rarely accessed but continue to incur storage charges. Over time, this leads to significant hidden costs, particularly in buckets with frequent object updates or automated data pipelines. Proper lifecycle management is required to limit or expire obsolete versions.
S3 charges for all object versions retained in a bucket, including non-current versions. Each version consumes full storage capacity and accrues charges until explicitly deleted or transitioned by a lifecycle policy.