aliteq.

AWS NAT Gateway Cost (2026): Why It's on Your Bill and Four Cheaper Setups for a Small App

A NAT gateway bills for every hour it exists and every GB it touches, including S3 traffic that would otherwise be free. Here is what that adds up to for a small app, and the fixes AWS documents, priced from AWS's own price files.

Aliteq TeamUpdated Oct 411 min read
A metal gate frame over a long conveyor of plain cardboard boxes in a dim blue concrete tunnel, one red lamp glowing on the gate
Share

The NAT gateway is the line on an AWS bill that confuses people most. Nobody buys it as a product. It comes with a tutorial, a template or a "production-ready" VPC wizard, and then it bills every hour and every gigabyte.

I want to be upfront about where I stand. aliteq.com runs on Cloudflare Workers and Supabase, not on AWS, and I have never run a NAT gateway for a client. I ran a PC hardware shop for five years, so I read price lists for a living. Everything below is arithmetic on AWS's own published prices, with every formula shown.

This page goes deeper than the NAT section in our guide to why an AWS bill gets so high. That page covers every surprise line. This one covers only the NAT gateway and what to do about it.

How much does an AWS NAT gateway cost per month?

A NAT gateway in US East costs $32.85 a month just for existing: $0.045 an hour times 730 hours. On top of that you pay $0.045 for every GB it processes, so 1 TB adds $46.08. Its public IPv4 address adds $3.65 a month. One gateway carrying 1 TB comes to $82.58.

A NAT gateway (network address translation) lets servers in a private subnet reach the internet without the internet being able to reach them. AWS's VPC pricing page says you are charged for each "NAT Gateway-hour" that your gateway is "provisioned and available". It also says processing charges apply "for each gigabyte processed through the NAT gateway regardless of the traffic's source or destination", and that "Each partial NAT Gateway-hour consumed is billed as a full hour."

There is a third charge most people miss. The same page says: "You also incur standard AWS data transfer charges for all data transferred via the NAT gateway." So a GB sent to the internet through a NAT gateway costs the $0.045 processing fee plus the normal $0.09 data-out rate, once you are past the 100 GB a month that AWS gives free across your account. That is $0.135 per GB.

Gateway hours

US East price
$0.045 per hour
One month
$32.85

Data processed

US East price
$0.045 per GB
One month
$46.08 per TB

Public IPv4 address

US East price
$0.005 per hour
One month
$3.65

Data out to the internet

US East price
$0.09 per GB after 100 GB free
One month
$83.16 per TB

Crossing a zone to reach the gateway

US East price
$0.01 per GB each direction
One month
$20.48 per TB

Where to see it: in Cost Explorer, group by Usage type. In US East, AWS's price file names the lines NatGateway-Hours and NatGateway-Bytes. Other Regions add a Region prefix.

Why is my NAT gateway bill so high?

Because more traffic goes through it than you think, and you probably have more than one. Servers in a private subnet send everything bound outside the VPC through the gateway: S3 reads and writes, container image pulls, package installs and calls to other AWS services. Every one of those gigabytes pays $0.045.

The S3 part surprises people the most. AWS's EC2 pricing page says data moved directly between EC2 and S3 in the same Region is free. Then it adds: "If other AWS services are in the path of your data transfer, you will be charged their associated data processing costs. These services include, but are not limited to, PrivateLink endpoints, NAT Gateway and Transit Gateway." Free traffic becomes paid traffic the moment a NAT gateway sits in the middle.

Container images are the quiet version of the same thing. Amazon ECR's documentation says ECR "uses Amazon S3 to store your image layers", and that containers fetch the image manifest from ECR "and then Amazon S3 to download the actual image layers." Every deploy, scale-out and node replacement pulls those layers again. Through a NAT gateway, each GB is billed.

The second driver is the count. Many VPC templates create one NAT gateway per Availability Zone (an Availability Zone, or AZ, is one of the separate data center groups inside a Region). Three zones means three gateways, $98.55 a month before a single byte. A dev and a staging VPC built from the same template triple it again.

What do four cheaper setups cost for a small app?

In our example app, the default of three NAT gateways costs $155.58 a month. Adding a free S3 gateway endpoint cuts it to $121.02. One shared gateway plus that endpoint is $51.43. A small self-managed NAT instance plus the endpoint is $10.77. Each step down trades away resilience or adds work.

The example is ours, not a measurement of any real company. It is a small app in US East with private subnets in three zones and workloads spread evenly. It sends 1 TB a month through NAT. Of that, 768 GB (75%) is S3 traffic, including container image layers, and 256 GB is internet APIs and package downloads. Data out to the internet is the same in every setup, so it is left out.

Bar chart of the monthly NAT cost of one example small app in US East moving 1 TB a month: three NAT gateways $155.58, three NAT gateways plus an S3 gateway endpoint $121.02, one shared NAT gateway $96.23, one shared NAT gateway plus an S3 gateway endpoint $51.43, one t4g.nano NAT instance plus an S3 gateway endpoint $10.77.
Example quantities are our assumptions: 1 TB a month through NAT, 75% of it S3. Prices are AWS US East list prices read on 4 October 2026. · aliteq research

Here is the arithmetic behind each bar:

Three NAT gateways, one per zone

Hours
$98.55
Processing
$46.08
Public IPv4
$10.95
Cross-zone
$0
Month
$155.58

Three NAT gateways + S3 gateway endpoint

Hours
$98.55
Processing
$11.52
Public IPv4
$10.95
Cross-zone
$0
Month
$121.02

One shared NAT gateway

Hours
$32.85
Processing
$46.08
Public IPv4
$3.65
Cross-zone
$13.65
Month
$96.23

One shared NAT gateway + S3 gateway endpoint

Hours
$32.85
Processing
$11.52
Public IPv4
$3.65
Cross-zone
$3.41
Month
$51.43

One NAT instance (t4g.nano) + S3 gateway endpoint

Hours
$3.71
Processing
$0
Public IPv4
$3.65
Cross-zone
$3.41
Month
$10.77

Processing is GB through the gateway times $0.045: 1,024 GB is $46.08, and 256 GB is $11.52. Cross-zone assumes two-thirds of the traffic starts in a zone without the gateway and pays $0.01 out plus $0.01 in per GB. The NAT instance line is $0.0042 an hour times 730, plus an 8 GB gp3 disk at $0.08 per GB-month. The disk size is our assumption.

Should I run one NAT gateway or one per Availability Zone?

One per zone is the resilient choice, and AWS recommends it. One shared gateway is cheaper: in our example it saves $59.35 a month. The catch is in AWS's own documentation. If the gateway's zone goes down, servers in the other zones lose internet access until it comes back.

AWS's NAT gateway documentation says each gateway "is created in a specific Availability Zone and implemented with redundancy in that zone." It continues: "If you have resources in multiple Availability Zones and they share one NAT gateway, and if the NAT gateway's Availability Zone is down, resources in the other Availability Zones lose internet access."

A shared gateway also adds a cross-zone charge. AWS's VPC pricing example says there are data transfer charges between the gateway and an instance "if they are in a different Availability Zone." That is $0.01 per GB each way. AWS's NAT pricing documentation suggests keeping heavy-traffic resources in the gateway's zone, or creating "a NAT gateway in each Availability Zone with resources."

My rule of thumb, from the arithmetic and not from running it: dev, staging and test VPCs rarely need three gateways. Production that must keep calling a payment API during a zone outage probably does. Decide per VPC, on purpose.

What does a regional NAT gateway change?

It changes the setup, not the price. AWS now offers a regional NAT gateway that spreads across zones by itself. AWS's VPC pricing page says it bills "for each hour that the NAT Gateway is configured in each availability zone", so three zones are three NAT gateway-hours, $0.135 an hour. Processing is the same $0.045 per GB.

The documentation lists real conveniences. It needs no public subnet, uses one route for every zone, and expands and contracts with your workloads. It also says it "may take your regional NAT Gateway up to 60 minutes to expand to a new Availability Zone", and that traffic is processed across zones until then. Converting from zonal gateways resets existing connections, so AWS recommends a maintenance window. In Cost Explorer it shows as RegionalNatGateway-Hours and, in US East, USE1-RegionalNatGateway-Bytes.

Which traffic can skip the NAT gateway for free?

Traffic to S3 and DynamoDB in the same Region can skip it for free. A gateway endpoint for either service puts a route in your subnet route tables that bypasses the NAT gateway. AWS's PrivateLink documentation says: "There is no additional charge for using gateway endpoints." No hourly fee, no per-GB fee.

AWS's own VPC pricing example makes the same point. It prices a 1 GB file sent from EC2 to S3 through a NAT gateway at $0.045, then notes that a gateway endpoint avoids it because "There are no data processing or hourly charges for using Gateway Type VPC endpoints."

Because ECR stores image layers in S3, the S3 gateway endpoint also takes most container image bytes off the NAT gateway. In our example, that one change moves 768 GB off the gateway and saves $34.56 a month. Two cautions from the docs. The endpoint only applies to subnets whose route tables you associate with it. And the ECR docs warn that existing connections to S3 "might be briefly interrupted" when you add it.

When does an interface endpoint pay for itself?

At about 626 GB a month per service, if you place it in three zones. Interface endpoints (AWS PrivateLink) cover many other AWS services. Each costs $0.01 an hour in each zone you put it in, plus $0.01 per GB. That beats the NAT gateway's $0.045 per GB only once volume is high enough.

AWS's PrivateLink pricing page says you are "billed for each hour that your VPC endpoint remains provisioned in each Availability Zone". In three zones one endpoint is 3 x $7.30 = $21.90 a month. It saves $0.045 - $0.01 = $0.035 per GB, so it breaks even at 21.90 / 0.035 = 625.7 GB a month. In one zone it breaks even at 208.6 GB.

The trap is adding endpoints for everything. Four services in three zones are 4 x $21.90 = $87.60 a month, more than two idle NAT gateways. If the NAT gateway stays for other traffic, its hours do not go away. Add interface endpoints for the one or two services that actually carry volume, and check the line in Cost Explorer a month later.

Scorecard of six options for an AWS NAT gateway bill. S3 or DynamoDB gateway endpoint: free, covers S3 and DynamoDB only. Interface endpoint: $7.30 a month per zone plus $0.01 per GB, breaks even near 626 GB a month in three zones. One shared NAT gateway: $32.85 instead of $98.55 for three, but other zones lose internet if its zone fails.
Prices are AWS US East list prices read on 4 October 2026. Break-even is our arithmetic: $21.90 a month divided by the $0.035 saved per GB. · aliteq research

Can IPv6 traffic avoid the NAT gateway?

Yes, for destinations that speak IPv6. An egress-only internet gateway lets servers make outbound IPv6 connections while blocking inbound ones, the same job a NAT gateway does for IPv4. AWS's documentation says: "There is no charge for an egress-only internet gateway". Normal data transfer charges still apply.

The limit is the other end. The same documentation says the gateway is "for use with IPv6 traffic only" and that for outbound-only IPv4 you "use a NAT gateway instead." If an IPv6-only server needs to reach an IPv4-only API, AWS routes it through NAT64 on a NAT gateway, which bills as NAT. I could not find a primary figure for how many of the APIs a typical app calls support IPv6, so test your own list before you plan around it.

Is a NAT instance cheaper than a NAT gateway?

On price, yes, by a lot. A t4g.nano instance is $0.0042 an hour, $3.07 a month, with no per-GB processing charge. On everything else, it is a server you now own. You patch it, size it and handle failover, and AWS's documentation recommends the managed gateway instead.

AWS's comparison page lists the differences. A NAT gateway scales "up to 100 Gbps", while an instance's bandwidth "Depends on the bandwidth of the instance type." Failover on instances is "a script" you write. The documentation also warns that AWS's old NAT AMI "reached the end of standard support on December 31, 2020 and end of maintenance support on December 31, 2023", so you would build your own image from a current Amazon Linux.

I did not read a throughput figure for a t4g.nano, so I am not going to tell you it can carry your traffic. Measure it before you trust it. It still pays for its public IPv4 address, its disk and normal data transfer out.

How do I find what's going through my NAT gateway?

Start in Cost Explorer, then go to the gateway's own metrics, then to flow logs. Group Cost Explorer by Usage type and read NatGateway-Bytes. In CloudWatch, the gateway reports BytesOutToDestination and BytesInFromDestination. Flow logs then tell you which server sent the bytes.

AWS's Knowledge Center lays out the same order. Use CloudWatch metrics to find when the traffic spikes. Then query VPC flow logs for that window, with CloudWatch Logs Insights or with Athena if your logs go to S3. To see which servers talk to internet destinations, the article says to use custom flow logs that include the pkt-srcaddr and pkt-dstaddr fields. Flow logs have their own cost, so turn them on for the investigation and check their line too.

Five steps to find and cut NAT gateway traffic: read NatGateway-Hours and NatGateway-Bytes in Cost Explorer, find the spike times in the gateway's CloudWatch byte metrics, query VPC flow logs to see which servers send the bytes, move S3 and DynamoDB traffic to a free gateway endpoint, then decide gateway count per VPC and price interface endpoints against the 626 GB break-even.
Metric and usage-type names are AWS's, read on 4 October 2026. Flow logs carry their own charge while they run. · aliteq research

Add an S3 gateway endpoint to every VPC with private subnets, and a DynamoDB one if you use it. It is free and it is the biggest single cut for most apps.

Count your NAT gateways per VPC. Dev, staging and test VPCs rarely need one per zone; each extra one is $32.85 a month idle.

Read NatGateway-Bytes in Cost Explorer before and after each change, so you see the saving instead of guessing it.

Keep one gateway per zone where an outage would cost more than $32.85 a month. That is a business call, not a tuning one.

If the NAT line is only one of several surprises on your bill, the AWS bill guide walks through public IPv4, data transfer, logs and idle servers with the same prices. For the wider picture of servers, backups and IT spend, see the Cloud & IT Infrastructure hub.

Quick answers

How much does an AWS NAT gateway cost per month?
In US East it is $0.045 an hour, $32.85 for a 730-hour month, plus $0.045 per GB processed and $3.65 a month for its public IPv4 address. One gateway carrying 1 TB is $82.58. Traffic to the internet also pays the normal data-out rate.
Does AWS charge for a NAT gateway with no traffic?
Yes. You pay for every hour the gateway is provisioned and available, and a partial hour bills as a full hour. An idle gateway is $32.85 a month. Deleting it is the only way to stop the hourly charge.
Is S3 traffic through a NAT gateway charged?
Yes. EC2 to S3 in the same Region is free when sent directly, but a NAT gateway in the path adds its $0.045 per GB processing charge. An S3 gateway endpoint removes it, and AWS charges nothing for gateway endpoints.
Do I need a NAT gateway in every Availability Zone?
Only if those zones must keep internet access when another zone fails. AWS says resources sharing one gateway lose internet access if its zone goes down. One shared gateway is cheaper but adds $0.01 per GB each way for traffic from other zones.
What is the cheapest alternative to a NAT gateway?
For S3 and DynamoDB, a gateway endpoint, which is free. For IPv6 destinations, an egress-only internet gateway, which has no gateway charge. A NAT instance costs from $3.07 a month for a t4g.nano, but you patch it and handle failover yourself.
Is a regional NAT gateway cheaper?
No. It bills $0.045 an hour for each zone it runs in, so three zones cost the same as three zonal gateways, plus the same $0.045 per GB. It is simpler to manage, not cheaper to run.

Found this useful? Share it

Share

Aliteq

Aliteq Team

Aliteq started in 2019 as a PC hardware shop and is now a US-based publication. We build the VRAM and cost calculators on this site, track live cloud-GPU prices, and write guides with AI-assisted drafting that we check against primary sources before publishing.

The Aliteq brief

The tech worth knowing — hardware, AI, gaming, deals. No spam, unsubscribe anytime.

Keep reading