Loading...


Updated 6 Oct 2026 • 7 mins read

AWS data transfer fees depend on where a byte goes: free within a zone, $0.01 per GB between zones, about $0.02 between regions, $0.09 to the internet, and $0.045 extra through a NAT Gateway. This guide maps every path, shows which ones inflate real bills, and gives seven ways to cut them.
Most AWS pricing is intuitive once you know the rate: a server costs this much an hour, storage this much a gigabyte. Data transfer is the exception, because the price of moving a gigabyte depends not on the gigabyte but on where it is going. The same byte is free between two servers in one Availability Zone, costs a cent to cross into the next zone, two cents to reach another region, nine cents to reach the internet, and four and a half cents more if it happens to pass through a NAT Gateway on the way. Six paths, six prices, one invoice line that almost nobody can explain.
This guide maps every one of those paths with 2026 US rates from the official EC2 data transfer pricing, VPC pricing, and CloudFront pricing pages, shows which charges actually inflate real bills (it is rarely the one people budget for), works through a typical three-tier application, and ends with seven changes that cut transfer costs without rebuilding anything.
The short answer: AWS charges nothing for data coming in and nothing for traffic between resources in the same Availability Zone over private addresses. Everything else is metered by path: $0.01 per GB in each direction between Availability Zones in a region, about $0.02 per GB between US regions, and $0.09 per GB out to the internet for the first 10 TB a month after a 100 GB free allowance, falling to $0.05 above 150 TB. A NAT Gateway adds $0.045 per GB processed on top of whatever the traffic already pays. CloudFront receives data from AWS origins free and sends it to the internet at $0.085 per GB with 1 TB free. At mid-to-large scale, transfer commonly runs 10 to 20 percent of the AWS bill, and the fastest reductions come from CloudFront for public content, gateway VPC endpoints instead of NAT for S3 and DynamoDB, and keeping chatty tiers in the same zone.
Rates are US East (N. Virginia) list prices as of October 2026 in US dollars per GB; other regions vary and several are higher.
| Path | Rate per GB | Free allowance | Notes |
|---|---|---|---|
| Internet in (any service) | Free | Unlimited | Ingress is never charged |
| Same AZ, private IP | Free | Unlimited | EC2 to EC2, EC2 to RDS in one zone |
| Between AZs, same region | $0.01 each direction | None | $0.02 per GB round trip; applies to VPC peering too |
| Between US regions | ~$0.02 | None | Up to ~$0.09 to some intercontinental destinations |
| Internet out, first 10 TB / month | $0.09 | 100 GB / month, all services combined | Then $0.085, $0.07, and $0.05 at higher tiers |
| NAT Gateway processing | $0.045 (added) | None | Plus ~$0.045 per hour per gateway; stacks on egress |
| Interface VPC endpoint (PrivateLink) | $0.01 (added) | None | Plus ~$0.01 per hour per endpoint per AZ |
| Gateway VPC endpoint (S3, DynamoDB) | Free | Unlimited | Replaces NAT for these two services |
| AWS origin to CloudFront | Free | Unlimited | S3, EC2, ALB, and other AWS origins |
| CloudFront to internet (US, first 10 TB) | $0.085 | 1 TB / month | Tiers down with volume |
| Transit Gateway processing | ~$0.02 (added) | None | Plus attachment hourly fee |
| Direct Connect out (US) | ~$0.02 | None | Plus port hours |
Teams budget for internet egress because it is the rate everyone quotes. In practice three other charges usually dominate, and each is invisible until you look for it.
This is why data transfer is, with public IPv4 addresses, the clearest example of cloud waste that hides in small per-unit charges: the rate is tiny, the volume is invisible, and nobody owns the line.
Consider a production web application in US East: a load balancer across three Availability Zones, six application servers spread across those zones, a database primary in one zone with a read replica in another, and an S3 bucket the app reads from through a NAT Gateway because the servers sit in private subnets. It serves 2 TB a month to users.
Internet egress is what the team budgeted: 2 TB less 100 GB free, about 1.9 TB at $0.09, roughly $175. Now the unbudgeted paths. The application servers exchange about 6 TB a month with the database, and because two-thirds of them are in zones other than the primary's, about 4 TB crosses zones at $0.02 round trip: $80. Replication to the read replica moves 1.5 TB across zones one way: $15. Service-to-service calls between app servers in different zones move another 3 TB: $60. And the servers pull 3 TB from S3 through the NAT Gateway: $135 in processing plus about $33 for the gateway itself. The unbudgeted total is around $323, nearly twice the $175 of internet egress the team planned for, and the whole transfer line is about $500 a month.
Apply the levers. A gateway endpoint for S3 removes the $135 NAT processing at no cost. Routing the 2 TB of public content through CloudFront drops the egress to about $85 after the 1 TB free tier and cuts origin traffic further through caching. Zone-aware routing so that servers prefer same-zone database and service calls can halve the cross-zone chatter, saving about $70. The line falls from roughly $500 to about $200, with no change to the application's architecture beyond configuration.
Transfer from AWS origins to CloudFront is free, CloudFront's egress is cheaper than regional egress, its free tier is ten times larger, and caching means much of the traffic never reaches the origin. For static assets, media, downloads, and APIs with cacheable responses, this is the single largest saving available.
Gateway VPC endpoints are free and route traffic to S3 and DynamoDB privately, removing the $0.045 per GB NAT processing on what is often the heaviest internal traffic in an account. This is a routing-table change with no downside.
For other AWS services, an interface endpoint costs about $0.01 per GB plus a small hourly fee against NAT's $0.045 per GB. At more than a few hundred gigabytes a month per service, the endpoint wins.
Resilience requires multiple zones; it does not require every request to cross one. Zone-aware load balancing, topology-aware routing in Kubernetes, and placing caches and read replicas in the zones that read them keep hot paths local and reserve cross-zone traffic for failover.
Response compression, efficient serialization, and application-level caching reduce every transfer charge proportionally, because they reduce the gigabytes. A 60 percent compression ratio on API responses is a 60 percent cut in egress for that path.
Replication and multi-region designs pay transfer continuously. Keep them where compliance or latency genuinely demands them, and replicate deltas rather than full copies where the service allows.
Enable VPC Flow Logs, filter the Cost and Usage Report by the transfer usage types, and attribute the result to the teams whose services generate it. Transfer stays high when it is a single unowned line on the bill; it falls quickly once a team can see that its service is the one talking across zones. That attribution is the general practice in our guide to cloud cost allocation, and it is what Opslyft's cost visibility is built to make routine across networking and every other service line.
Not all transfer is waste. Multi-AZ failover traffic is the price of surviving a zone outage. A NAT Gateway serving a private subnet's genuine internet needs is cheaper and safer than public IPs on every instance. Cross-region replication for disaster recovery or data residency is a legitimate cost of the requirement. The aim is not zero transfer; it is zero transfer that a routing change would have made free
AWS data transfer fees are confusing because they price the route rather than the data, and expensive because the routes that cost most are the ones nobody looks at. Internet egress is the charge everyone budgets, and in a multi-AZ application it is often the smaller part; cross-zone traffic and NAT processing are where the bill grows. Map your traffic by path, move public content behind CloudFront, replace NAT with endpoints for AWS services, keep hot paths in one zone, and attribute what remains to the teams that cause it. Then revisit it quarterly, because new services default to the expensive paths every time. For the wider set of AWS charges that behave this way, see our guides to AWS cost optimization and S3 cost optimization, where egress is the largest hidden line.
Data into AWS is free. Data out to the internet is free for the first 100 GB a month across all services and regions, then $0.09 per GB for the first 10 TB, $0.085 for the next 40 TB, $0.07 for the next 100 TB, and $0.05 above 150 TB in US regions. Traffic between Availability Zones costs $0.01 per GB in each direction, traffic between US regions about $0.02 per GB, and a NAT Gateway adds $0.045 per GB processed on top of any other charge.
Only within the same Availability Zone, over private IP addresses. Traffic between Availability Zones in the same region costs $0.01 per GB each way, so a request and response crossing zones costs $0.02 per GB. Traffic to a public IP or through a NAT Gateway is billed even inside one zone. Most 'same region' traffic in a multi-AZ architecture is therefore not free.
Per gigabyte, intercontinental inter-region transfer, up to about $0.09 per GB to South America. In practice, the charge that most inflates bills is NAT Gateway processing at $0.045 per GB, because it is added on top of the egress or inter-region rate the same byte already pays and because it applies to traffic to AWS's own services that a free gateway VPC endpoint would carry for nothing.
Yes, in two ways. Transfer from AWS origins such as S3 and EC2 to CloudFront is free, so the regional egress charge disappears, and CloudFront's own egress is $0.085 per GB in the US with 1 TB a month free, against $0.09 and 100 GB free for direct egress. Caching also cuts the volume that reaches the origin at all. For public content, routing through CloudFront is almost always cheaper.
Filter the Cost and Usage Report or Cost Explorer by data transfer usage types, which separate internet egress, inter-AZ, inter-region, and NAT processing, then enable VPC Flow Logs to see which resources are generating cross-zone and NAT traffic. Most large transfer bills trace to a small number of chatty paths, typically an application tier talking to a database in another zone or a batch job pulling from S3 through a NAT Gateway.
Serve public content through CloudFront, replace NAT Gateway paths to S3 and DynamoDB with free gateway VPC endpoints, keep compute and the data it reads in the same Availability Zone where resilience allows, use zone-aware load balancing and read replicas to stop cross-zone chatter, compress payloads, and avoid cross-region replication unless compliance requires it. Together these commonly cut transfer costs by half or more.
Not for a migration. Since 2024 AWS waives data transfer out charges for customers moving their data off AWS entirely, on request through AWS Support. The waiver covers a one-time migration, not ongoing egress, and standard rates apply to normal operation.