---
# ----------------------------------------------------------------------------
#
#     ***     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: "Security Command Center (SCC)"
description: |-
  A Cloud Security Command Center's (Cloud SCC) finding source.
---

# google\_scc\_source

A Cloud Security Command Center's (Cloud SCC) finding source. A finding
source is an entity or a mechanism that can produce a finding. A source is
like a container of findings that come from the same scanner, logger,
monitor, etc.


To get more information about Source, see:

* [API documentation](https://cloud.google.com/security-command-center/docs/reference/rest/v1/organizations.sources)
* How-to Guides
    * [Official Documentation](https://cloud.google.com/security-command-center/docs)

## Example Usage - Scc Source Basic


```hcl
resource "google_scc_source" "custom_source" {
  display_name = "My Source"
  organization = "123456789"
  description  = "My custom Cloud Security Command Center Finding Source"
}
```

## Argument Reference

The following arguments are supported:


* `display_name` -
  (Required)
  The source’s display name. A source’s display name must be unique
  amongst its siblings, for example, two sources with the same parent
  can't share the same display name. The display name must start and end
  with a letter or digit, may contain letters, digits, spaces, hyphens,
  and underscores, and can be no longer than 32 characters.

* `organization` -
  (Required)
  The organization whose Cloud Security Command Center the Source
  lives in.


- - -


* `description` -
  (Optional)
  The description of the source (max of 1024 characters).


## Attributes Reference

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

* `id` - an identifier for the resource with format `{{name}}`

* `name` -
  The resource name of this source, in the format
  `organizations/{{organization}}/sources/{{source}}`.


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


Source can be imported using any of these accepted formats:

* `organizations/{{organization}}/sources/{{name}}`
* `{{organization}}/{{name}}`


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

```tf
import {
  id = "organizations/{{organization}}/sources/{{name}}"
  to = google_scc_source.default
}
```

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

```
$ terraform import google_scc_source.default organizations/{{organization}}/sources/{{name}}
$ terraform import google_scc_source.default {{organization}}/{{name}}
```
