SolStack All articles
SaaS & Cloud

Your AWS Bill Is Lying to You: A Practical Audit for Finding Hidden Cloud Waste

SolStack

Cloud infrastructure bills are uniquely deceptive. Unlike a SaaS subscription or a vendor contract, an AWS bill does not arrive as a single line item. It arrives as hundreds or thousands of line items, each individually small enough to seem reasonable, collectively adding up to a number that finance teams increasingly struggle to justify.

For companies that have been running on AWS for more than 18 months without a dedicated FinOps function or a structured cost review process, the accumulated waste is rarely trivial. Engineering teams provision resources for experiments that never get decommissioned. Autoscaling configurations set conservatively during a traffic event never get dialed back. Reserved Instance purchases made two years ago no longer reflect the current architecture. Data transfer costs accumulate silently in the background of every API call.

The practical question is not whether waste exists in your AWS account. It almost certainly does. The question is where it lives and how to find it systematically.

Start With the Cost Explorer Before You Touch Anything Else

AWS Cost Explorer is the most underutilized tool in most organizations' cloud management toolkit. It is free, it is built into every AWS account, and it contains enough data to identify the majority of significant waste categories without any additional tooling.

The first analysis to run is a month-over-month cost comparison broken down by service. You are looking for two things: services whose costs have grown significantly without a corresponding growth in usage or business metrics, and services whose costs have remained flat despite significant changes in the underlying workload. Both patterns indicate potential waste.

The second analysis is a breakdown by resource tag—or, more precisely, by the absence of tags. Resources that have not been tagged are almost always orphaned or under-managed. In accounts that have been running for several years, untagged resources frequently represent 15 to 25 percent of total spend. They are the digital equivalent of a forgotten subscription: still billing, no longer serving a purpose.

The Five Waste Categories That Account for Most of the Damage

1. Idle and Oversized EC2 Instances

EC2 compute typically represents the largest single cost category for most AWS accounts. It is also where the most straightforward waste lives. AWS Compute Optimizer, another free tool built into the platform, analyzes CloudWatch utilization metrics and identifies instances that are running at consistently low CPU and memory utilization.

A common finding in accounts without regular right-sizing reviews: instances provisioned at the m5.2xlarge level for a workload that consistently uses less than 10 percent of available CPU. Downsizing to an m5.large or m5.xlarge can reduce per-instance costs by 50 to 75 percent with no impact on application performance.

Instances that have been stopped but not terminated are another common source of waste. A stopped EC2 instance does not incur compute charges, but it does continue to generate charges for attached EBS volumes. In accounts with a history of experimental workloads or departed team members, stopped instances with attached storage can accumulate significant monthly costs.

2. Unattached and Oversized EBS Volumes

EBS volumes become orphaned when the EC2 instances they were attached to are terminated without the volume being explicitly deleted. This is a default behavior that AWS does not automatically correct. In accounts without lifecycle policies governing volume cleanup, orphaned EBS volumes can accumulate over months and years.

The remediation is straightforward: filter your EBS volumes by state and identify all volumes in the "available" state (meaning unattached). Review each against your tagging and naming conventions to confirm they are genuinely orphaned before deletion. For most organizations running this audit for the first time, the savings from this single category range from $500 to $5,000 per month depending on account age and size.

Oversized volumes are a separate issue. EBS volumes are frequently provisioned with generous headroom that never gets utilized. A volume provisioned at 500GB for an application whose data footprint has never exceeded 80GB is paying for 420GB of unused storage every month. AWS does not automatically resize volumes, and engineers rarely revisit storage allocations after initial provisioning.

3. Forgotten Load Balancers and NAT Gateways

Load balancers and NAT Gateways carry fixed hourly charges regardless of whether they are serving traffic. An Application Load Balancer with no registered targets or a NAT Gateway in a VPC that no longer hosts active workloads continues to generate charges indefinitely.

Filter your load balancers by the number of active targets and your NAT Gateways by traffic volume in Cost Explorer. Zero-target load balancers and near-zero-traffic NAT Gateways are strong candidates for decommissioning. In accounts with a history of environment spin-ups for demos, staging environments, or discontinued product lines, this category alone can surface $1,000 to $10,000 in monthly waste.

4. S3 Storage Class Misalignment

S3 is one of the most common sources of silent, compounding cloud waste. Data added to S3 stays in S3 indefinitely unless explicit lifecycle policies are configured. Without those policies, data that was accessed frequently in 2021 remains in the S3 Standard storage class in 2025, billed at the same rate as actively accessed data despite being functionally archival.

AWS S3 Intelligent-Tiering can automate storage class transitions for objects whose access patterns are unpredictable. For data with known access patterns—application logs, database backups, historical exports—explicit lifecycle policies that transition objects to S3 Standard-IA after 30 days and S3 Glacier after 90 days can reduce storage costs by 60 to 80 percent on eligible data.

5. Data Transfer Costs You Have Never Examined

Data transfer charges are the line items most likely to be overlooked because they appear small individually and are distributed across dozens of services. Cumulatively, they can represent 10 to 20 percent of total AWS spend for accounts with significant inter-service or cross-region traffic.

The most common avoidable data transfer cost is cross-AZ traffic between services that could be co-located. Applications that communicate across Availability Zones within the same region incur per-GB transfer charges that do not apply to intra-AZ traffic. For high-throughput services, restructuring deployment topology to minimize cross-AZ communication can produce meaningful savings without any architectural changes.

Recommended Tooling Beyond the Native Console

For organizations that want more granular analysis than AWS-native tools provide, several third-party platforms offer significant additional visibility. Infracost integrates directly with infrastructure-as-code workflows and surfaces cost implications before resources are provisioned. CloudHealth by VMware provides multi-account governance and anomaly detection at a level of granularity that Cost Explorer does not match. Spot by NetApp specializes in compute optimization, particularly for workloads that can tolerate interruption and benefit from Spot Instance pricing.

For teams managing Terraform or CloudFormation, tagging enforcement via policy-as-code tools such as Open Policy Agent ensures that new resources cannot be provisioned without the tags required for cost attribution—preventing the next generation of orphaned resources before they are created.

Negotiating Credits Once You Have the Documentation

Once you have completed a thorough audit and can quantify the waste in your account, you are in a position to approach AWS with a documented case for credits or rate adjustments. AWS Enterprise Support customers have access to Technical Account Managers who can facilitate conversations about Reserved Instance exchanges, Savings Plans restructuring, and in some cases, service credits for documented billing anomalies.

The documentation matters. A spreadsheet showing specific resource IDs, their costs over the past 12 months, and the dates they became inactive is a substantially stronger basis for a credit conversation than a general complaint about billing. AWS account teams respond to specificity.

For organizations spending more than $100,000 per month on AWS, a formal cost optimization engagement—either through AWS Professional Services or an independent FinOps consultant—typically pays for itself within the first billing cycle. The waste is there. The question is only whether you find it before it compounds further.

All Articles

Related Articles

Open Source Is Not Free: The Supply Chain Risks Your Engineering Team Is Ignoring

Open Source Is Not Free: The Supply Chain Risks Your Engineering Team Is Ignoring

Inside the Winning Stack: Tools and Platforms Powering High-Growth US Startups in 2025

Inside the Winning Stack: Tools and Platforms Powering High-Growth US Startups in 2025

Why AI Coding Tools Are Making Your Engineering Team Slower, Not Faster

Why AI Coding Tools Are Making Your Engineering Team Slower, Not Faster