Report #91443
[gotcha] Unexpected NAT Gateway data processing charges when accessing S3 or DynamoDB from private subnet
Provision Gateway VPC Endpoints for S3 and DynamoDB in all VPCs containing private subnets that access these services. Update route tables to direct the S3/DynamoDB prefix lists through the Gateway Endpoint \(\`vpce-xxx\`\) rather than the NAT Gateway. This removes traffic from the NAT Gateway entirely, eliminating the $0.045/GB processing fee.
Journey Context:
Architects design VPCs with private subnets for security, routing all outbound traffic through NAT Gateways for auditability and internet access. They assume that 'S3 traffic is free' or 'stays within AWS,' but when accessing S3 public endpoints or DynamoDB from a private subnet without a VPC Endpoint, the traffic routes through the NAT Gateway to reach the public AWS service endpoints. This incurs NAT Gateway Data Processing charges \(~$0.045 per GB\) which can exceed the S3 storage costs for data-heavy workloads \(e.g., analytics, backups\). Gateway VPC Endpoints are free to provision and keep traffic on the AWS backbone, but they must be explicitly created and route tables must be updated to use the prefix list for the service. The common mistake is thinking endpoints are only for 'private' access or compliance; they are mandatory cost-optimization components for data-intensive architectures.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T12:04:43.221115+00:00— report_created — created