If you've ever opened your AWS bill and felt a wave of confusion, you're not alone. AWS billing is one of the most common pain points we hear about from clients — and it's not because people aren't smart enough to understand it. It's because AWS billing is genuinely complicated. Hundreds of services, multiple pricing dimensions, region-specific rates, partial-hour charges, blended and unblended costs, and line items that seem designed to resist interpretation.
This guide is the resource we wish existed when we started helping companies optimize their cloud spend. We're going to walk through every layer of your AWS bill, explain what each section means, show you where the hidden costs live, and give you a framework for making sense of it all — whether you're a startup founder looking at your first real bill or a finance team trying to allocate costs across business units.
The AWS Billing Dashboard: Your Starting Point
The Billing Dashboard is the first place most people go, and it's actually a decent overview — if you know what you're looking at.
When you log in to the AWS Management Console and navigate to Billing and Cost Management, you'll see a summary of your month-to-date charges. This top-level view shows your total spend broken down by service. It looks simple, but there are a few things to understand right away.
Month-to-Date vs. Forecasted Costs — AWS shows you what you've spent so far this month and provides a forecast for your end-of-month total. The forecast is based on your usage patterns over the current billing period. It's directionally useful but can be wildly wrong if your workloads are bursty or if you just launched something new. Don't treat the forecast as gospel — treat it as a sanity check.
Credits and Refunds — If you have AWS credits (from programs like AWS Activate, enterprise agreements, or promotional offers), they show up as negative line items. Credits are applied automatically in a specific order: first to the services they're designated for, then to general usage. If you're relying on credits to keep costs down, track their expiration dates carefully — a surprise credit expiration can cause your bill to jump overnight.
Tax — AWS charges sales tax in certain states and countries. This shows up as a separate line item. If your organization is tax-exempt, you need to upload your exemption certificate through the Tax Settings page. We've seen companies pay thousands in unnecessary tax simply because nobody uploaded the certificate.
Understanding Your Cost and Usage Report (CUR)
The Billing Dashboard gives you the summary. The Cost and Usage Report gives you everything.
The CUR is a detailed, line-item-level export of every charge on your account. It can be delivered to an S3 bucket in CSV or Parquet format and contains columns for service, operation, resource ID, usage type, pricing, tags, and much more. For organizations that are serious about cost management, the CUR is the single most important data source.
Why the CUR matters: The billing console aggregates data in ways that can hide important details. The CUR shows you the raw charges — every API call, every GB of storage, every hour of compute. When you need to answer questions like "why did our S3 bill double last month?" or "which team is responsible for this Lambda spend?", the CUR is where you go.
Setting it up: Navigate to the Cost and Usage Reports page in the Billing Console and create a new report. Choose hourly granularity if you need detailed analysis, daily if you want manageable file sizes. Enable resource-level IDs so you can trace charges back to specific EC2 instances, RDS databases, or Lambda functions. Deliver it to an S3 bucket and optionally set up Athena integration so you can query it with SQL.
A word of caution: CUR files can be enormous. A large enterprise account can generate CUR files that are hundreds of gigabytes per month. Plan your storage and query infrastructure accordingly. Many teams use Athena with partitioning, or they load CUR data into a data warehouse like Redshift or Snowflake.
AWS Cost Explorer: Your Primary Analysis Tool
Cost Explorer is the most powerful built-in tool AWS provides for understanding your spending patterns. It's free to use (though the API has per-request charges) and provides filtering, grouping, and visualization capabilities that answer most cost questions.
Time-Based Analysis — You can view costs by day, month, or custom date ranges going back 12 months. This is essential for identifying trends. Is your spend growing linearly? Exponentially? Did something spike on a specific date? Cost Explorer's time view answers these questions at a glance.
Grouping and Filtering — This is where Cost Explorer gets powerful. You can group costs by:
- Service — See which AWS services are costing you the most
- Linked account — Essential for organizations using AWS Organizations
- Region — Understand geographic cost distribution
- Usage type — Break down costs within a service (e.g., different EC2 instance types)
- Tag — If you've tagged your resources (and you should), you can group by any tag key
- Instance type — See exactly which instance sizes you're running
The Right Charge Type — Cost Explorer lets you toggle between different charge types. The most important distinction:
- Unblended costs — The actual rate for each resource without any averaging
- Blended costs — An averaged rate across your organization (useful for multi-account setups)
- Amortized costs — Spreads upfront payments (like Reserved Instances) across their term
- Net unblended costs — After discounts and credits
For most analysis, use unblended costs to see actual charges, or amortized costs if you have Reserved Instances or Savings Plans and want to see the true economic cost per period.
Savings Plans and RI Coverage Reports — Cost Explorer includes specialized reports showing how well your commitment purchases cover your on-demand usage. The Coverage report shows what percentage of your eligible usage is covered by commitments. The Utilization report shows whether your purchased commitments are being fully used. Both are critical — you don't want to buy commitments that sit idle.
Decoding the Line Items: What Each Charge Actually Means
Let's look at the most common line item types you'll encounter and what they actually mean.
EC2 Costs — More Than Just Instances
EC2 is typically the largest line item for most AWS customers, but "EC2" on your bill includes much more than just virtual machines:
- Compute hours — The per-hour (or per-second) charge for your running instances. Pricing varies dramatically by instance type, size, and region. An m5.xlarge in us-east-1 costs differently than an m6i.xlarge in eu-west-1.
- EBS volumes — The storage attached to your instances. Charged per GB-month for provisioned storage, plus IOPS charges for io1/io2 volumes. Snapshots are separate and charged per GB stored in S3.
- Data transfer — This is where costs sneak up on people. Data transfer between availability zones costs money. Data leaving AWS (egress) costs money. Data transfer between regions costs money. The only free transfer is data coming into AWS and data within the same AZ using private IPs. We cover this in detail in our post on common AWS cost mistakes.
- Elastic IPs — Free when attached to a running instance, but charged when unattached. We've seen accounts with dozens of unused Elastic IPs accumulating quiet charges.
- NAT Gateway — Often overlooked, NAT Gateway charges include both an hourly rate and a per-GB data processing charge. For accounts with significant egress traffic from private subnets, NAT Gateway can be a top-5 cost driver.
S3 Costs — Death by a Thousand Requests
S3 pricing seems simple (pay per GB stored) but the real costs are often in the request charges:
- Storage — Per GB-month, varies by storage class (Standard, Intelligent-Tiering, Glacier, etc.)
- PUT/POST/LIST requests — Charged per 1,000 requests. High-volume applications can rack up significant request costs.
- GET requests — Also per 1,000 requests, but cheaper than writes
- Data transfer — Retrieving data from S3 to the internet has egress charges
- Lifecycle transitions — Moving objects between storage classes has per-request costs
Pro tip: Enable S3 Intelligent-Tiering for buckets where you're unsure of access patterns. There's a small monitoring fee per object, but it automatically moves infrequently accessed data to cheaper tiers without retrieval delays.
RDS Costs — The Database Tax
RDS pricing includes the instance hours, storage, I/O (for some engine types), backup storage beyond the free tier, and data transfer. Multi-AZ deployments double your instance cost (since you're running a standby replica). Read replicas are billed as separate instances.
Hidden RDS cost: Backup storage. RDS provides free backup storage equal to your provisioned database storage. But if your automated backups and manual snapshots exceed that amount, you're paying for the overage. We regularly find clients with dozens of manual snapshots they forgot about.
Lambda Costs — It's Not Just About Duration
Lambda charges per request and per GB-second of compute time. But the costs that often surprise people:
- Provisioned concurrency — If you configure provisioned concurrency for low-latency requirements, you pay for it whether it's used or not
- Data transfer — Lambda functions in a VPC that access the internet through a NAT Gateway inherit NAT Gateway data processing charges
- CloudWatch Logs — Every Lambda invocation generates log data, and CloudWatch Logs charges for ingestion and storage
Data Transfer: The Hidden Cost Multiplier
Data transfer deserves its own section because it's consistently the most misunderstood part of AWS billing. Here's the hierarchy:
- Inbound data — Free (almost always)
- Within the same AZ, same service — Free
- Between AZs in the same region — ~$0.01/GB each way
- Between regions — ~$0.02/GB and up (varies by region pair)
- To the internet (egress) — ~$0.09/GB for the first 10TB/month, decreasing with volume
These rates seem small until you multiply them by terabytes. A service processing 10TB of cross-AZ traffic per month is paying $200/month just for that inter-AZ transfer — and that's often invisible because it doesn't show up as its own service line item.
Where data transfer costs hide:
- Microservices communicating across AZs
- Cross-region replication (RDS, S3, DynamoDB Global Tables)
- NAT Gateway data processing (in addition to hourly charges)
- CloudFront-to-origin data transfer (free for S3 origins, but not for ALB/EC2 origins)
- VPC peering across regions
Reserved Instances vs. Savings Plans: Commitment Strategies
If you're spending more than a few thousand dollars per month on AWS, you should be using some form of commitment pricing. The two main options are Reserved Instances (RIs) and Savings Plans. We wrote a detailed comparison of Reserved Instances and Savings Plans, but here's the billing perspective.
Reserved Instances lock you into a specific instance type, region, and OS for a 1-year or 3-year term. In exchange, you get up to 72% off on-demand pricing. They appear on your bill as a separate line item (the RI fee) and show as a discount applied against matching on-demand usage.
Savings Plans are more flexible. Compute Savings Plans apply to any EC2 instance family, Lambda, or Fargate usage. EC2 Instance Savings Plans are specific to an instance family and region but still more flexible than RIs. Discounts are similar to RIs — up to 72% off.
How they show up on your bill:
- For All Upfront purchases, you see a one-time charge and then zero recurring charges (the discount is applied against what would have been on-demand usage)
- For Partial Upfront, you see the upfront payment plus reduced hourly charges
- For No Upfront, you see reduced hourly charges with no initial payment
The amortized view in Cost Explorer spreads upfront payments across the commitment term, giving you a more accurate picture of your effective hourly rate. Always use the amortized view when analyzing the true cost of workloads covered by commitments.
Common mistakes with commitments:
- Buying commitments before right-sizing — you're locking in waste
- Over-purchasing and ending up with unused commitments
- Not monitoring utilization rates (aim for 90%+ utilization)
- Ignoring the flexibility of Savings Plans and buying RIs out of habit
The Costs Nobody Tells You About
Beyond the main service charges, there are several cost categories that routinely surprise teams:
Support Plans
- Basic — Free, but you only get billing support
- Developer — Starting at $29/month, gives you technical support with 12-hour response for general guidance
- Business — Starting at $100/month (or a percentage of monthly spend, whichever is greater), gives you 1-hour response for production system down
- Enterprise — Starting at $15,000/month, includes a Technical Account Manager
The percentage-based pricing on Business and Enterprise plans means your support costs scale with your usage.
CloudWatch
CloudWatch costs creep up on everyone. Custom metrics, dashboards, log ingestion, log storage, high-resolution metrics, and alarms all have per-unit costs. For a well-instrumented application, CloudWatch can easily be a top-10 cost driver.
Secrets Manager
Per-secret monthly charges plus per-API-call charges. Seems trivial until you have hundreds of secrets across multiple environments.
KMS
Per-key monthly charges plus per-request charges for encryption and decryption. If you encrypt everything (which you should for compliance), KMS costs add up across services that make encryption calls automatically.
VPC Endpoints
Interface VPC endpoints have hourly per-AZ charges. If you have endpoints for S3, DynamoDB, ECR, CloudWatch, Secrets Manager, and KMS across three AZs, the monthly cost is nontrivial — just for the network plumbing.
Building a FinOps Practice: Making AWS Costs Manageable
Understanding your bill is step one. Building a sustainable practice around cost management is what separates organizations that control their cloud spend from those who are controlled by it. We cover the full FinOps framework in our post on what FinOps actually is, but here's the billing-focused summary.
Tagging Strategy
Tags are the foundation of cost allocation. Without consistent, enforced tagging, you can't answer basic questions like "how much does Project X cost?" or "which team is responsible for this spend?"
At minimum, tag every taggable resource with:
- Environment (production, staging, development)
- Team or Owner (who's responsible)
- Project or Application (what it supports)
- Cost Center (for finance allocation)
Use AWS Organizations Tag Policies to enforce consistency. Use AWS Config rules to detect untagged resources. Make tagging a non-negotiable part of your infrastructure provisioning process.
Budgets and Alerts
AWS Budgets lets you set spending thresholds and get notified when you're approaching or exceeding them. Set budgets at multiple levels:
- Account-level — Overall spending guardrail
- Service-level — Alert when specific services spike
- Tag-level — Track per-project or per-team spending
Configure alerts at 50%, 80%, and 100% of your budget. Use SNS topics to route alerts to Slack, PagerDuty, or email. The goal is early warning — not a surprise at month-end.
Regular Cost Reviews
Schedule a weekly or bi-weekly cost review. Pull up Cost Explorer, look at the trends, investigate any anomalies. The most common pattern we see is costs drifting upward by 5-10% per month because nobody is actively managing them. That compounds to significant annual growth in cloud spend from pure neglect.
A good cost review agenda:
- Month-to-date spend vs. budget
- Week-over-week change by top 5 services
- Commitment utilization and coverage rates
- Anomaly investigation (any unexpected spikes?)
- Action items from last review — did they get done?
Right-Sizing: The Lowest-Hanging Fruit
AWS Compute Optimizer and Cost Explorer's right-sizing recommendations analyze your EC2 usage patterns and suggest smaller or different instance types. In our experience, 30-40% of EC2 instances are oversized for their workload. That's money you're burning for capacity you don't use.
Right-sizing isn't a one-time exercise. Workloads change, and instances that were properly sized six months ago might be oversized today. Build right-sizing reviews into your quarterly planning.
Cleaning Up Waste
Every AWS account accumulates waste over time. Common culprits:
- Unattached EBS volumes from terminated instances
- Old EBS snapshots nobody remembers creating
- Idle Elastic Load Balancers
- Unused Elastic IPs
- Orphaned RDS snapshots
- Forgotten development and test environments running 24/7
- NAT Gateways in accounts with no active workloads
A quarterly cleanup can recover 10-20% of monthly spend for organizations that haven't been actively managing waste.
When to Get Help
AWS billing complexity scales with your usage. A smaller account is manageable with Cost Explorer and good tagging. Mid-range accounts need someone actively managing costs as part of their role. Large accounts need a dedicated FinOps practice with tooling, processes, and organizational buy-in.
Signs you need outside help:
- Your cloud spend has grown more than 20% year-over-year without a corresponding increase in business value
- Nobody on your team can explain what's driving the top 5 line items on your bill
- You've never purchased Reserved Instances or Savings Plans despite spending consistently
- You have no tagging strategy or your tags are inconsistent
- Your bill arrives and everyone just shrugs
We work with organizations at every stage of cloud cost maturity. Whether you need a one-time bill review, help building a FinOps practice, or ongoing cost optimization support, we can help you get your AWS spend under control without sacrificing performance or reliability.
Ready to make sense of your AWS bill? Get in touch — we'll review your current spend and show you exactly where the savings opportunities are.