blob: 3291ebadd2019b0ca3fed337124affee96e8a87a [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: "Cloud Key Management Service"
description: |-
A `KeyHandle` is a resource used to auto-provision CryptoKeys for CMEK.
---
# google_kms_key_handle
A `KeyHandle` is a resource used to auto-provision CryptoKeys for CMEK.
~> **Note:** KeyHandles cannot be deleted from Google Cloud Platform.
Destroying a Terraform-managed KeyHandle will remove it from state but
*will not delete the resource from the project.*
~> **Warning:** This resource is in beta, and should be used with the terraform-provider-google-beta provider.
See [Provider Versions](https://terraform.io/docs/providers/google/guides/provider_versions.html) for more details on beta resources.
To get more information about KeyHandle, see:
* [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyHandles)
* How-to Guides
* [Cloud KMS with Autokey](https://cloud.google.com/kms/docs/kms-with-autokey)
## Example Usage - Kms Key Handle Basic
```hcl
# Create Folder in GCP Organization
resource "google_folder" "autokms_folder" {
provider = google-beta
display_name = "folder-example"
parent = "organizations/123456789"
deletion_protection = false
}
# Create the key project
resource "google_project" "key_project" {
provider = google-beta
project_id = "key-proj"
name = "key-proj"
folder_id = google_folder.autokms_folder.folder_id
billing_account = "000000-0000000-0000000-000000"
depends_on = [google_folder.autokms_folder]
deletion_policy = "DELETE"
}
# Create the resource project
resource "google_project" "resource_project" {
provider = google-beta
project_id = "resources"
name = "resources"
folder_id = google_folder.autokms_folder.folder_id
billing_account = "000000-0000000-0000000-000000"
depends_on = [google_folder.autokms_folder]
deletion_policy = "DELETE"
}
# Enable the Cloud KMS API
resource "google_project_service" "kms_api_service" {
provider = google-beta
service = "cloudkms.googleapis.com"
project = google_project.key_project.project_id
disable_on_destroy = false
disable_dependent_services = true
depends_on = [google_project.key_project]
}
# Wait delay after enabling APIs
resource "time_sleep" "wait_enable_service_api" {
depends_on = [google_project_service.kms_api_service]
create_duration = "30s"
}
#Create KMS Service Agent
resource "google_project_service_identity" "kms_service_agent" {
provider = google-beta
service = "cloudkms.googleapis.com"
project = google_project.key_project.number
depends_on = [time_sleep.wait_enable_service_api]
}
# Wait delay after creating service agent.
resource "time_sleep" "wait_service_agent" {
depends_on = [google_project_service_identity.kms_service_agent]
create_duration = "10s"
}
#Grant the KMS Service Agent the Cloud KMS Admin role
resource "google_project_iam_member" "autokey_project_admin" {
provider = google-beta
project = google_project.key_project.project_id
role = "roles/cloudkms.admin"
member = "serviceAccount:service-${google_project.key_project.number}@gcp-sa-cloudkms.iam.gserviceaccount.com"
depends_on = [time_sleep.wait_service_agent]
}
# Wait delay after granting IAM permissions
resource "time_sleep" "wait_srv_acc_permissions" {
create_duration = "10s"
depends_on = [google_project_iam_member.autokey_project_admin]
}
resource "google_kms_autokey_config" "autokey_config" {
provider = google-beta
folder = google_folder.autokms_folder.folder_id
key_project = "projects/${google_project.key_project.project_id}"
depends_on = [time_sleep.wait_srv_acc_permissions]
}
# Wait delay for autokey config to take effect
resource "time_sleep" "wait_autokey_config" {
create_duration = "10s"
depends_on = [google_kms_autokey_config.autokey_config]
}
resource "google_kms_key_handle" "example-keyhandle" {
provider = google-beta
project = google_project.resource_project.project_id
name = "example-key-handle"
location = "global"
resource_type_selector = "storage.googleapis.com/Bucket"
depends_on = [time_sleep.wait_autokey_config]
}
```
## Argument Reference
The following arguments are supported:
* `name` -
(Required)
The resource name for the KeyHandle.
* `resource_type_selector` -
(Required)
Selector of the resource type where we want to protect resources.
For example, `storage.googleapis.com/Bucket`.
* `location` -
(Required)
The location for the KeyHandle.
A full list of valid locations can be found by running `gcloud kms locations list`.
- - -
* `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}}/keyHandles/{{name}}`
* `kms_key` -
A reference to a Cloud KMS CryptoKey that can be used for CMEK in the requested
product/project/location, for example
`projects/1/locations/us-east1/keyRings/foo/cryptoKeys/bar-ffffff`
## 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.
- `delete` - Default is 20 minutes.
## Import
KeyHandle can be imported using any of these accepted formats:
* `projects/{{project}}/locations/{{location}}/keyHandles/{{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 KeyHandle using one of the formats above. For example:
```tf
import {
id = "projects/{{project}}/locations/{{location}}/keyHandles/{{name}}"
to = google_kms_key_handle.default
}
```
When using the [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import), KeyHandle can be imported using one of the formats above. For example:
```
$ terraform import google_kms_key_handle.default projects/{{project}}/locations/{{location}}/keyHandles/{{name}}
$ terraform import google_kms_key_handle.default {{project}}/{{location}}/{{name}}
$ terraform import google_kms_key_handle.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).