A NAT Gateway has two charges: an hourly fee for each gateway, and a data-processing fee on every gigabyte that passes through it, about $0.045/GB in us-east-1. The per-GB fee is where the money goes. Most of that traffic is S3, DynamoDB, ECR and other AWS calls that a VPC endpoint carries for free or for much less. Here is how it is priced, how to find your number, and the fixes in order.
A NAT Gateway gives private subnets outbound internet access without letting the internet reach in. It is the secure default, so the VPC wizard and most Terraform modules create one per Availability Zone, and nobody questions it.
The surprise is the billing model. NAT Gateway is a metered data-processing service, not flat-rate plumbing. You pay for the hours each gateway exists and for every gigabyte it processes. A private task does not announce that it just pulled a 1 GB image from ECR, or that your app reads terabytes from S3 through NAT instead of a free gateway endpoint. It all lands as one aggregated line on next month's bill.
Cutting it costs nothing in performance, availability or security. You are not trading anything away; you are stopping traffic from taking the expensive path.
Two charges, added together. Rates vary by Region; the figures below are representative us-east-1 rates.
Check the rates for your Region on the AWS VPC pricing page.
The data-processing charge stacks on top of normal data transfer. Send data to the internet through NAT and you pay NAT processing plus internet egress (about $0.09/GB at the first tier). Route a subnet in one AZ to a NAT Gateway in another and every byte also pays a cross-AZ charge.
You pay about $0.045/GB for every byte through a NAT Gateway, on top of any transfer cost the byte already has. The goal is not "make NAT cheaper"; it is "stop sending bytes through NAT that do not need to be there."
When you attribute NAT traffic by destination, the same few patterns show up. Most of them are AWS-to-AWS traffic that never needed the internet path.
You need two numbers before changing anything: how much you spend on NAT, and what traffic causes it.
Set monthly granularity over the last few months, filter to the EC2-Other usage type group and group by Usage Type. NAT shows as NatGateway-Hours and NatGateway-Bytes. If Bytes dwarfs Hours (it usually does), your problem is traffic and VPC endpoints are the lever. If both are small, look for idle gateways in unused AZs or dev VPCs. Add a Cost Anomaly Detection monitor or budget alert so the next spike is flagged.
Enable Flow Logs (publishing to S3 is cheaper to analyze), filter to flows through the NAT Gateway's network interface, and query them with Athena: group bytes by destination address and port, sorted descending. Map the top destinations to AWS services using the published AWS IP ranges. Each AWS service near the top is an endpoint to deploy.
The first fix alone often removes most of the data-processing spend.
Add a gateway VPC endpoint for S3 and DynamoDB and attach it to your private route tables. AWS says there are "no data processing or hourly charges" for gateway endpoints (VPC pricing, checked 2026-10-10). That traffic then stays on the AWS network and stops paying NAT processing. Lock the endpoint down with a policy.
Most other AWS services are reachable through interface endpoints (AWS PrivateLink). Each costs about $0.01 per hour per AZ plus about $0.01/GB, roughly a quarter of the NAT per-GB rate. Add them for the busy services in your Flow Logs ranking and skip the long tail where the hourly fee would exceed the savings. ECR needs its API interface endpoints plus the S3 gateway endpoint, because image layers live in S3.
Point each subnet at the NAT Gateway in its own AZ, so bytes stop paying a cross-AZ charge on top. In dev and staging, one gateway instead of three saves the hourly fees if you accept that an AZ outage takes the environment down. Never do this in production.
For low-traffic, non-critical environments, a small self-managed NAT instance (Graviton is cheapest) avoids the per-GB processing fee. You own patching, it is a single point of failure unless you build HA, and bandwidth does not scale on its own. Use it in dev and test only.
The deepest lever is less traffic: a pull-through cache or private artifact repository instead of re-downloading dependencies on every build, and fewer polling integrations.
A hypothetical startup VPC with three NAT Gateways processing 30 TB a month: 14 TB S3, 6 TB ECR, 4 TB DynamoDB, 3 TB other AWS APIs and telemetry, and 3 TB of real internet traffic. Representative us-east-1 rates.
Processing for this traffic falls from about $1,350 a month to a few hundred dollars all-in, with no change to availability, performance or security. Most of the saving comes from the free gateway endpoints. Your Region and traffic mix change the numbers, not the shape.
All of this is doable in-house if someone has time to read Flow Logs and change routes without breaking connectivity. If not, a partner can do it.
CloudRoute matches you with one vetted AWS partner that fits. The partner quantifies NAT spend in Cost Explorer, attributes it with Flow Logs, deploys the endpoints, fixes route tables and tests in staging. The same review usually finds nearby savings: wider data-transfer waste, idle resources, right-sizing and commitment coverage.
Who pays: a NAT cleanup on its own is normal paid work, and the monthly savings pay for it. AWS funding that a partner can file comes through three routes: MAP when you migrate to AWS, POC when you test something, and incremental workload (IW) funding when you launch new work on AWS. If your network work is part of one of those, the partner checks whether it qualifies: typically $50K to $150K for startups. Depends on the workload; AWS approves. CloudRoute is free for startups; partners pay CloudRoute a monthly membership plus 10% of AWS-approved funding.
You will usually run a mix: AWS-to-AWS traffic on VPC endpoints, real internet traffic on NAT, and low-traffic dev on a NAT instance if it pays. Rates are representative us-east-1 figures.
| Dimension | NAT Gateway (managed) | VPC endpoints (gateway / interface) | NAT instance (self-managed) |
|---|---|---|---|
| What it is for | Outbound internet access for private subnets | A private path to specific AWS services | Outbound internet through a small EC2 instance |
| Hourly cost | ~$0.045/hr per gateway, per AZ | Gateway: $0. Interface: ~$0.01/hr per endpoint, per AZ | The EC2 instance (a few dollars a month for a small one) |
| Data processing | ~$0.045/GB on every byte | Gateway: $0/GB. Interface: ~$0.01/GB | None beyond normal data transfer |
| Reaches the internet? | Yes | No, AWS services only | Yes |
| High availability | Managed, one per AZ | Managed | You build it |
| Operational burden | None | None | You patch, monitor and scale it |
| Best for | Real internet egress to third parties | All AWS-to-AWS traffic | Low-traffic dev and test |
You fill in a short form: what you run today, what you want to move, test or build, your stage and your region.
We read your answers and pick one vetted AWS consulting partner that fits the work, the stack and the region. We reply within 24 hours; your matched partner reaches out within 5 business days.
Your matched partner scopes the work with you. Then it checks which partner-filed funding fits: MAP if you are moving to AWS, POC if you want to test something, or incremental workload (IW) funding if you are already on AWS and launching new work.
If the work qualifies, the partner files the funding request with AWS. AWS reviews it and decides. The amount depends on the workload.
CloudRoute is free for startups. Partners pay CloudRoute a monthly membership plus 10% of AWS-approved funding.
AWS Activate credits are separate, and you apply for them yourself. Use Activate Founders if no investor backs you. Use Activate Portfolio with the Org ID or invite from your VC, accelerator, incubator or angel group if it is an Activate Provider. A consulting partner cannot apply for Activate on your behalf.
CloudRoute matches you with a vetted AWS partner who audits your NAT spend, deploys the endpoints and fixes the route tables. CloudRoute is free for startups.