---
# ----------------------------------------------------------------------------
#
#     ***     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: "Cloud Intrusion Detection Service"
description: |-
  Cloud IDS is an intrusion detection service that provides threat detection for intrusions, malware, spyware, and command-and-control attacks on your network.
---

# google_cloud_ids_endpoint

Cloud IDS is an intrusion detection service that provides threat detection for intrusions, malware, spyware, and command-and-control attacks on your network.


To get more information about Endpoint, see:

* [API documentation](https://cloud.google.com/intrusion-detection-system/docs/configuring-ids)

## Example Usage - Cloudids Endpoint


```hcl
resource "google_compute_network" "default" {
	name = "tf-test-my-network"
}
resource "google_compute_global_address" "service_range" {
	name          = "address"
	purpose       = "VPC_PEERING"
	address_type  = "INTERNAL"
	prefix_length = 16
	network       = google_compute_network.default.id
}
resource "google_service_networking_connection" "private_service_connection" {
	network                 = google_compute_network.default.id
	service                 = "servicenetworking.googleapis.com"
	reserved_peering_ranges = [google_compute_global_address.service_range.name]
}

resource "google_cloud_ids_endpoint" "example-endpoint" {
    name     = "test"
    location = "us-central1-f"
    network  = google_compute_network.default.id
    severity = "INFORMATIONAL"
    depends_on = [google_service_networking_connection.private_service_connection]
}
```

## Argument Reference

The following arguments are supported:


* `name` -
  (Required)
  Name of the endpoint in the format projects/{project_id}/locations/{locationId}/endpoints/{endpointId}.

* `network` -
  (Required)
  Name of the VPC network that is connected to the IDS endpoint. This can either contain the VPC network name itself (like "src-net") or the full URL to the network (like "projects/{project_id}/global/networks/src-net").

* `severity` -
  (Required)
  The minimum alert severity level that is reported by the endpoint.
  Possible values are: `INFORMATIONAL`, `LOW`, `MEDIUM`, `HIGH`, `CRITICAL`.

* `location` -
  (Required)
  The location for the endpoint.


- - -


* `description` -
  (Optional)
  An optional description of the endpoint.

* `threat_exceptions` -
  (Optional)
  Configuration for threat IDs excluded from generating alerts. Limit: 99 IDs.

* `project` - (Optional) The ID of the project in which the resource belongs.
    If it is not provided, the provider project is used.


## Attributes Reference

In addition to the arguments listed above, the following computed attributes are exported:

* `id` - an identifier for the resource with format `projects/{{project}}/locations/{{location}}/endpoints/{{name}}`

* `create_time` -
  Creation timestamp in RFC 3339 text format.

* `update_time` -
  Last update timestamp in RFC 3339 text format.

* `endpoint_forwarding_rule` -
  URL of the endpoint's network address to which traffic is to be sent by Packet Mirroring.

* `endpoint_ip` -
  Internal IP address of the endpoint's network entry point.


## 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


Endpoint can be imported using any of these accepted formats:

* `projects/{{project}}/locations/{{location}}/endpoints/{{name}}`
* `{{project}}/{{location}}/{{name}}`
* `{{location}}/{{name}}`


In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import Endpoint using one of the formats above. For example:

```tf
import {
  id = "projects/{{project}}/locations/{{location}}/endpoints/{{name}}"
  to = google_cloud_ids_endpoint.default
}
```

When using the [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import), Endpoint can be imported using one of the formats above. For example:

```
$ terraform import google_cloud_ids_endpoint.default projects/{{project}}/locations/{{location}}/endpoints/{{name}}
$ terraform import google_cloud_ids_endpoint.default {{project}}/{{location}}/{{name}}
$ terraform import google_cloud_ids_endpoint.default {{location}}/{{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).
