diff --git a/CHANGELOG b/CHANGELOG
index 2bdb45e7858c159b7327beb0d9a2e85b1a1c4b29..e74654a819d54689436bd56947f4dbdbc6b116b5 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 ## [4.0.1] - 2021-07-15
 ### Changed
  - Support load balancer ingress style alongside Cloud Run domain mapping.
+ - Surface Cloud NAT variable for minimum number of SNAT tuples, supporting a larger
+   number of outbound connections if required.
 
 ## [4.0.0] - 2021-06-29
 ### Changed
diff --git a/static_egress_ip.tf b/static_egress_ip.tf
index 7337b9b338e5579444d6e5c4cda267dcbbb7beeb..85b8db05392cfbe8c19c76ced7d3235a91a4d889 100644
--- a/static_egress_ip.tf
+++ b/static_egress_ip.tf
@@ -50,6 +50,7 @@ resource "google_compute_router_nat" "static-ip-nat" {
   nat_ips                = [google_compute_address.static-ip[0].self_link]
   nat_ip_allocate_option = "MANUAL_ONLY"
   region                 = var.cloud_run_region
+  min_ports_per_vm       = var.min_ports_per_vm
 
   source_subnetwork_ip_ranges_to_nat = "LIST_OF_SUBNETWORKS"
   subnetwork {
diff --git a/variables.tf b/variables.tf
index 8940782fbc3998ea048eb92005be20470e9367a4..239f6293e77446ac6f42780f8c2ac28088da643f 100644
--- a/variables.tf
+++ b/variables.tf
@@ -274,6 +274,16 @@ variable "static_egress_ip_cidr_range" {
   description = "The cidr range used to create a subnet that this cloud run will use if assigned a static ip"
 }
 
+variable "min_ports_per_vm" {
+  default     = 64
+  type        = number
+  description = <<-EOL
+    When using Cloud NAT to provide an egress route, Cloud NAT's minimum ports per VM
+    can be configured to determine how many concurrent connections can be established
+    to the same destination IP address and port. 
+EOL
+}
+
 variable "secrets_volume" {
   type = list(object({
     name    = string # name of the file that is going to be mounted