blob: 526ae8904fc2d362640f44635e1fc56b36235e23 [file] [log] [blame] [edit]
---
# ----------------------------------------------------------------------------
#
# *** AUTO GENERATED CODE *** Type: MMv1 ***
#
# ----------------------------------------------------------------------------
#
# This file is automatically generated by Magic Modules and manual
# changes will be clobbered when the file is regenerated.
#
# Please read more about how to change this file in
# .github/CONTRIBUTING.md.
#
# ----------------------------------------------------------------------------
subcategory: "Compute Engine"
description: |-
A NAT service created in a router.
---
# google_compute_router_nat
A NAT service created in a router.
To get more information about RouterNat, see:
* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/routers)
* How-to Guides
* [Google Cloud Router](https://cloud.google.com/router/docs/)
## Example Usage - Router Nat Basic
```hcl
resource "google_compute_network" "net" {
name = "my-network"
}
resource "google_compute_subnetwork" "subnet" {
name = "my-subnetwork"
network = google_compute_network.net.id
ip_cidr_range = "10.0.0.0/16"
region = "us-central1"
}
resource "google_compute_router" "router" {
name = "my-router"
region = google_compute_subnetwork.subnet.region
network = google_compute_network.net.id
bgp {
asn = 64514
}
}
resource "google_compute_router_nat" "nat" {
name = "my-router-nat"
router = google_compute_router.router.name
region = google_compute_router.router.region
nat_ip_allocate_option = "AUTO_ONLY"
source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"
log_config {
enable = true
filter = "ERRORS_ONLY"
}
}
```
## Example Usage - Router Nat Manual Ips
```hcl
resource "google_compute_network" "net" {
name = "my-network"
}
resource "google_compute_subnetwork" "subnet" {
name = "my-subnetwork"
network = google_compute_network.net.id
ip_cidr_range = "10.0.0.0/16"
region = "us-central1"
}
resource "google_compute_router" "router" {
name = "my-router"
region = google_compute_subnetwork.subnet.region
network = google_compute_network.net.id
}
resource "google_compute_address" "address" {
count = 2
name = "nat-manual-ip-${count.index}"
region = google_compute_subnetwork.subnet.region
}
resource "google_compute_router_nat" "nat_manual" {
name = "my-router-nat"
router = google_compute_router.router.name
region = google_compute_router.router.region
nat_ip_allocate_option = "MANUAL_ONLY"
nat_ips = google_compute_address.address.*.self_link
source_subnetwork_ip_ranges_to_nat = "LIST_OF_SUBNETWORKS"
subnetwork {
name = google_compute_subnetwork.subnet.id
source_ip_ranges_to_nat = ["ALL_IP_RANGES"]
}
}
```
## Example Usage - Router Nat Rules
```hcl
resource "google_compute_network" "net" {
name = "my-network"
auto_create_subnetworks = false
}
resource "google_compute_subnetwork" "subnet" {
name = "my-subnetwork"
network = google_compute_network.net.id
ip_cidr_range = "10.0.0.0/16"
region = "us-central1"
}
resource "google_compute_router" "router" {
name = "my-router"
region = google_compute_subnetwork.subnet.region
network = google_compute_network.net.id
}
resource "google_compute_address" "addr1" {
name = "nat-address1"
region = google_compute_subnetwork.subnet.region
}
resource "google_compute_address" "addr2" {
name = "nat-address2"
region = google_compute_subnetwork.subnet.region
}
resource "google_compute_address" "addr3" {
name = "nat-address3"
region = google_compute_subnetwork.subnet.region
}
resource "google_compute_router_nat" "nat_rules" {
name = "my-router-nat"
router = google_compute_router.router.name
region = google_compute_router.router.region
nat_ip_allocate_option = "MANUAL_ONLY"
nat_ips = [google_compute_address.addr1.self_link]
source_subnetwork_ip_ranges_to_nat = "LIST_OF_SUBNETWORKS"
subnetwork {
name = google_compute_subnetwork.subnet.id
source_ip_ranges_to_nat = ["ALL_IP_RANGES"]
}
rules {
rule_number = 100
description = "nat rules example"
match = "inIpRange(destination.ip, '1.1.0.0/16') || inIpRange(destination.ip, '2.2.0.0/16')"
action {
source_nat_active_ips = [google_compute_address.addr2.self_link, google_compute_address.addr3.self_link]
}
}
enable_endpoint_independent_mapping = false
}
```
## Example Usage - Router Nat Private
```hcl
resource "google_compute_network" "net" {
provider = google-beta
name = "my-network"
}
resource "google_compute_subnetwork" "subnet" {
provider = google-beta
name = "my-subnetwork"
network = google_compute_network.net.id
ip_cidr_range = "10.0.0.0/16"
region = "us-central1"
purpose = "PRIVATE_NAT"
}
resource "google_compute_router" "router" {
provider = google-beta
name = "my-router"
region = google_compute_subnetwork.subnet.region
network = google_compute_network.net.id
}
resource "google_network_connectivity_hub" "hub" {
provider = google-beta
name = "my-hub"
description = "vpc hub for inter vpc nat"
}
resource "google_network_connectivity_spoke" "spoke" {
provider = google-beta
name = "my-spoke"
location = "global"
description = "vpc spoke for inter vpc nat"
hub = google_network_connectivity_hub.hub.id
linked_vpc_network {
exclude_export_ranges = [
"198.51.100.0/24",
"10.10.0.0/16"
]
uri = google_compute_network.net.self_link
}
}
resource "google_compute_router_nat" "nat_type" {
provider = google-beta
name = "my-router-nat"
router = google_compute_router.router.name
region = google_compute_router.router.region
source_subnetwork_ip_ranges_to_nat = "LIST_OF_SUBNETWORKS"
enable_dynamic_port_allocation = false
enable_endpoint_independent_mapping = false
min_ports_per_vm = 32
type = "PRIVATE"
subnetwork {
name = google_compute_subnetwork.subnet.id
source_ip_ranges_to_nat = ["ALL_IP_RANGES"]
}
rules {
rule_number = 100
description = "rule for private nat"
match = "nexthop.hub == \"//networkconnectivity.googleapis.com/projects/acm-test-proj-123/locations/global/hubs/my-hub\""
action {
source_nat_active_ranges = [
google_compute_subnetwork.subnet.self_link
]
}
}
}
```
## Argument Reference
The following arguments are supported:
* `name` -
(Required)
Name of the NAT service. The name must be 1-63 characters long and
comply with RFC1035.
* `source_subnetwork_ip_ranges_to_nat` -
(Required)
How NAT should be configured per Subnetwork.
If `ALL_SUBNETWORKS_ALL_IP_RANGES`, all of the
IP ranges in every Subnetwork are allowed to Nat.
If `ALL_SUBNETWORKS_ALL_PRIMARY_IP_RANGES`, all of the primary IP
ranges in every Subnetwork are allowed to Nat.
`LIST_OF_SUBNETWORKS`: A list of Subnetworks are allowed to Nat
(specified in the field subnetwork below). Note that if this field
contains ALL_SUBNETWORKS_ALL_IP_RANGES or
ALL_SUBNETWORKS_ALL_PRIMARY_IP_RANGES, then there should not be any
other RouterNat section in any Router for this network in this region.
Possible values are: `ALL_SUBNETWORKS_ALL_IP_RANGES`, `ALL_SUBNETWORKS_ALL_PRIMARY_IP_RANGES`, `LIST_OF_SUBNETWORKS`.
* `router` -
(Required)
The name of the Cloud Router in which this NAT will be configured.
- - -
* `nat_ip_allocate_option` -
(Optional)
How external IPs should be allocated for this NAT. Valid values are
`AUTO_ONLY` for only allowing NAT IPs allocated by Google Cloud
Platform, or `MANUAL_ONLY` for only user-allocated NAT IP addresses.
Possible values are: `MANUAL_ONLY`, `AUTO_ONLY`.
* `nat_ips` -
(Optional)
Self-links of NAT IPs. Only valid if natIpAllocateOption
is set to MANUAL_ONLY.
* `drain_nat_ips` -
(Optional)
A list of URLs of the IP resources to be drained. These IPs must be
valid static external IPs that have been assigned to the NAT.
* `subnetwork` -
(Optional)
One or more subnetwork NAT configurations. Only used if
`source_subnetwork_ip_ranges_to_nat` is set to `LIST_OF_SUBNETWORKS`
Structure is [documented below](#nested_subnetwork).
* `min_ports_per_vm` -
(Optional)
Minimum number of ports allocated to a VM from this NAT. Defaults to 64 for static port allocation and 32 dynamic port allocation if not set.
* `max_ports_per_vm` -
(Optional)
Maximum number of ports allocated to a VM from this NAT.
This field can only be set when enableDynamicPortAllocation is enabled.
* `enable_dynamic_port_allocation` -
(Optional)
Enable Dynamic Port Allocation.
If minPortsPerVm is set, minPortsPerVm must be set to a power of two greater than or equal to 32.
If minPortsPerVm is not set, a minimum of 32 ports will be allocated to a VM from this NAT config.
If maxPortsPerVm is set, maxPortsPerVm must be set to a power of two greater than minPortsPerVm.
If maxPortsPerVm is not set, a maximum of 65536 ports will be allocated to a VM from this NAT config.
Mutually exclusive with enableEndpointIndependentMapping.
* `udp_idle_timeout_sec` -
(Optional)
Timeout (in seconds) for UDP connections. Defaults to 30s if not set.
* `icmp_idle_timeout_sec` -
(Optional)
Timeout (in seconds) for ICMP connections. Defaults to 30s if not set.
* `tcp_established_idle_timeout_sec` -
(Optional)
Timeout (in seconds) for TCP established connections.
Defaults to 1200s if not set.
* `tcp_transitory_idle_timeout_sec` -
(Optional)
Timeout (in seconds) for TCP transitory connections.
Defaults to 30s if not set.
* `tcp_time_wait_timeout_sec` -
(Optional)
Timeout (in seconds) for TCP connections that are in TIME_WAIT state.
Defaults to 120s if not set.
* `log_config` -
(Optional)
Configuration for logging on NAT
Structure is [documented below](#nested_log_config).
* `endpoint_types` -
(Optional)
Specifies the endpoint Types supported by the NAT Gateway.
Supported values include:
`ENDPOINT_TYPE_VM`, `ENDPOINT_TYPE_SWG`,
`ENDPOINT_TYPE_MANAGED_PROXY_LB`.
* `rules` -
(Optional)
A list of rules associated with this NAT.
Structure is [documented below](#nested_rules).
* `enable_endpoint_independent_mapping` -
(Optional)
Enable endpoint independent mapping.
For more information see the [official documentation](https://cloud.google.com/nat/docs/overview#specs-rfcs).
* `type` -
(Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html))
Indicates whether this NAT is used for public or private IP translation.
If unspecified, it defaults to PUBLIC.
If `PUBLIC` NAT used for public IP translation.
If `PRIVATE` NAT used for private IP translation.
Default value is `PUBLIC`.
Possible values are: `PUBLIC`, `PRIVATE`.
* `auto_network_tier` -
(Optional)
The network tier to use when automatically reserving NAT IP addresses.
Must be one of: PREMIUM, STANDARD. If not specified, then the current
project-level default tier is used.
Possible values are: `PREMIUM`, `STANDARD`.
* `region` -
(Optional)
Region where the router and NAT reside.
* `project` - (Optional) The ID of the project in which the resource belongs.
If it is not provided, the provider project is used.
<a name="nested_subnetwork"></a>The `subnetwork` block supports:
* `name` -
(Required)
Self-link of subnetwork to NAT
* `source_ip_ranges_to_nat` -
(Required)
List of options for which source IPs in the subnetwork
should have NAT enabled. Supported values include:
`ALL_IP_RANGES`, `LIST_OF_SECONDARY_IP_RANGES`,
`PRIMARY_IP_RANGE`.
* `secondary_ip_range_names` -
(Optional)
List of the secondary ranges of the subnetwork that are allowed
to use NAT. This can be populated only if
`LIST_OF_SECONDARY_IP_RANGES` is one of the values in
sourceIpRangesToNat
<a name="nested_log_config"></a>The `log_config` block supports:
* `enable` -
(Required)
Indicates whether or not to export logs.
* `filter` -
(Required)
Specifies the desired filtering of logs on this NAT.
Possible values are: `ERRORS_ONLY`, `TRANSLATIONS_ONLY`, `ALL`.
<a name="nested_rules"></a>The `rules` block supports:
* `rule_number` -
(Required)
An integer uniquely identifying a rule in the list.
The rule number must be a positive value between 0 and 65000, and must be unique among rules within a NAT.
* `description` -
(Optional)
An optional description of this rule.
* `match` -
(Required)
CEL expression that specifies the match condition that egress traffic from a VM is evaluated against.
If it evaluates to true, the corresponding action is enforced.
The following examples are valid match expressions for public NAT:
"inIpRange(destination.ip, '1.1.0.0/16') || inIpRange(destination.ip, '2.2.0.0/16')"
"destination.ip == '1.1.0.1' || destination.ip == '8.8.8.8'"
The following example is a valid match expression for private NAT:
"nexthop.hub == 'https://networkconnectivity.googleapis.com/v1alpha1/projects/my-project/global/hub/hub-1'"
* `action` -
(Optional)
The action to be enforced for traffic that matches this rule.
Structure is [documented below](#nested_action).
<a name="nested_action"></a>The `action` block supports:
* `source_nat_active_ips` -
(Optional)
A list of URLs of the IP resources used for this NAT rule.
These IP addresses must be valid static external IP addresses assigned to the project.
This field is used for public NAT.
* `source_nat_drain_ips` -
(Optional)
A list of URLs of the IP resources to be drained.
These IPs must be valid static external IPs that have been assigned to the NAT.
These IPs should be used for updating/patching a NAT rule only.
This field is used for public NAT.
* `source_nat_active_ranges` -
(Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html))
A list of URLs of the subnetworks used as source ranges for this NAT Rule.
These subnetworks must have purpose set to PRIVATE_NAT.
This field is used for private NAT.
* `source_nat_drain_ranges` -
(Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html))
A list of URLs of subnetworks representing source ranges to be drained.
This is only supported on patch/update, and these subnetworks must have previously been used as active ranges in this NAT Rule.
This field is used for private NAT.
## Attributes Reference
In addition to the arguments listed above, the following computed attributes are exported:
* `id` - an identifier for the resource with format `{{project}}/{{region}}/{{router}}/{{name}}`
## Timeouts
This resource provides the following
[Timeouts](https://developer.hashicorp.com/terraform/plugin/sdkv2/resources/retries-and-customizable-timeouts) configuration options:
- `create` - Default is 20 minutes.
- `update` - Default is 20 minutes.
- `delete` - Default is 20 minutes.
## Import
RouterNat can be imported using any of these accepted formats:
* `projects/{{project}}/regions/{{region}}/routers/{{router}}/{{name}}`
* `{{project}}/{{region}}/{{router}}/{{name}}`
* `{{region}}/{{router}}/{{name}}`
* `{{router}}/{{name}}`
In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import RouterNat using one of the formats above. For example:
```tf
import {
id = "projects/{{project}}/regions/{{region}}/routers/{{router}}/{{name}}"
to = google_compute_router_nat.default
}
```
When using the [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import), RouterNat can be imported using one of the formats above. For example:
```
$ terraform import google_compute_router_nat.default projects/{{project}}/regions/{{region}}/routers/{{router}}/{{name}}
$ terraform import google_compute_router_nat.default {{project}}/{{region}}/{{router}}/{{name}}
$ terraform import google_compute_router_nat.default {{region}}/{{router}}/{{name}}
$ terraform import google_compute_router_nat.default {{router}}/{{name}}
```
## User Project Overrides
This resource supports [User Project Overrides](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference#user_project_override).