|  | --- | 
|  | # ---------------------------------------------------------------------------- | 
|  | # | 
|  | #     ***     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 `CryptoKey` represents a logical key that can be used for cryptographic operations. | 
|  | --- | 
|  |  | 
|  | # google\_kms\_crypto\_key | 
|  |  | 
|  | A `CryptoKey` represents a logical key that can be used for cryptographic operations. | 
|  |  | 
|  |  | 
|  | ~> **Note:** CryptoKeys cannot be deleted from Google Cloud Platform. | 
|  | Destroying a Terraform-managed CryptoKey will remove it from state | 
|  | and delete all CryptoKeyVersions, rendering the key unusable, but *will | 
|  | not delete the resource from the project.* When Terraform destroys these keys, | 
|  | any data previously encrypted with these keys will be irrecoverable. | 
|  | For this reason, it is strongly recommended that you add | 
|  | [lifecycle](https://developer.hashicorp.com/terraform/language/meta-arguments/lifecycle) | 
|  | hooks to the resource to prevent accidental destruction. | 
|  |  | 
|  |  | 
|  | To get more information about CryptoKey, see: | 
|  |  | 
|  | * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys) | 
|  | * How-to Guides | 
|  | * [Creating a key](https://cloud.google.com/kms/docs/creating-keys#create_a_key) | 
|  |  | 
|  | ## Example Usage - Kms Crypto Key Basic | 
|  |  | 
|  |  | 
|  | ```hcl | 
|  | resource "google_kms_key_ring" "keyring" { | 
|  | name     = "keyring-example" | 
|  | location = "global" | 
|  | } | 
|  |  | 
|  | resource "google_kms_crypto_key" "example-key" { | 
|  | name            = "crypto-key-example" | 
|  | key_ring        = google_kms_key_ring.keyring.id | 
|  | rotation_period = "7776000s" | 
|  |  | 
|  | lifecycle { | 
|  | prevent_destroy = true | 
|  | } | 
|  | } | 
|  | ``` | 
|  | ## Example Usage - Kms Crypto Key Asymmetric Sign | 
|  |  | 
|  |  | 
|  | ```hcl | 
|  | resource "google_kms_key_ring" "keyring" { | 
|  | name     = "keyring-example" | 
|  | location = "global" | 
|  | } | 
|  |  | 
|  | resource "google_kms_crypto_key" "example-asymmetric-sign-key" { | 
|  | name     = "crypto-key-example" | 
|  | key_ring = google_kms_key_ring.keyring.id | 
|  | purpose  = "ASYMMETRIC_SIGN" | 
|  |  | 
|  | version_template { | 
|  | algorithm = "EC_SIGN_P384_SHA384" | 
|  | } | 
|  |  | 
|  | lifecycle { | 
|  | prevent_destroy = true | 
|  | } | 
|  | } | 
|  | ``` | 
|  |  | 
|  | ## Argument Reference | 
|  |  | 
|  | The following arguments are supported: | 
|  |  | 
|  |  | 
|  | * `name` - | 
|  | (Required) | 
|  | The resource name for the CryptoKey. | 
|  |  | 
|  | * `key_ring` - | 
|  | (Required) | 
|  | The KeyRing that this key belongs to. | 
|  | Format: `'projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}'`. | 
|  |  | 
|  |  | 
|  | - - - | 
|  |  | 
|  |  | 
|  | * `labels` - | 
|  | (Optional) | 
|  | Labels with user-defined metadata to apply to this resource. | 
|  |  | 
|  | **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. | 
|  | Please refer to the field `effective_labels` for all of the labels present on the resource. | 
|  |  | 
|  | * `purpose` - | 
|  | (Optional) | 
|  | The immutable purpose of this CryptoKey. See the | 
|  | [purpose reference](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys#CryptoKeyPurpose) | 
|  | for possible inputs. | 
|  | Default value is "ENCRYPT_DECRYPT". | 
|  |  | 
|  | * `rotation_period` - | 
|  | (Optional) | 
|  | Every time this period passes, generate a new CryptoKeyVersion and set it as the primary. | 
|  | The first rotation will take place after the specified period. The rotation period has | 
|  | the format of a decimal number with up to 9 fractional digits, followed by the | 
|  | letter `s` (seconds). It must be greater than a day (ie, 86400). | 
|  |  | 
|  | * `version_template` - | 
|  | (Optional) | 
|  | A template describing settings for new crypto key versions. | 
|  | Structure is [documented below](#nested_version_template). | 
|  |  | 
|  | * `destroy_scheduled_duration` - | 
|  | (Optional) | 
|  | The period of time that versions of this key spend in the DESTROY_SCHEDULED state before transitioning to DESTROYED. | 
|  | If not specified at creation time, the default duration is 24 hours. | 
|  |  | 
|  | * `import_only` - | 
|  | (Optional) | 
|  | Whether this key may contain imported versions only. | 
|  |  | 
|  | * `skip_initial_version_creation` - | 
|  | (Optional) | 
|  | If set to true, the request will create a CryptoKey without any CryptoKeyVersions. | 
|  | You must use the `google_kms_key_ring_import_job` resource to import the CryptoKeyVersion. | 
|  |  | 
|  |  | 
|  | <a name="nested_version_template"></a>The `version_template` block supports: | 
|  |  | 
|  | * `algorithm` - | 
|  | (Required) | 
|  | The algorithm to use when creating a version based on this template. | 
|  | See the [algorithm reference](https://cloud.google.com/kms/docs/reference/rest/v1/CryptoKeyVersionAlgorithm) for possible inputs. | 
|  |  | 
|  | * `protection_level` - | 
|  | (Optional) | 
|  | The protection level to use when creating a version based on this template. Possible values include "SOFTWARE", "HSM", "EXTERNAL", "EXTERNAL_VPC". Defaults to "SOFTWARE". | 
|  |  | 
|  | ## Attributes Reference | 
|  |  | 
|  | In addition to the arguments listed above, the following computed attributes are exported: | 
|  |  | 
|  | * `id` - an identifier for the resource with format `{{key_ring}}/cryptoKeys/{{name}}` | 
|  |  | 
|  | * `primary` - | 
|  | A copy of the primary CryptoKeyVersion that will be used by cryptoKeys.encrypt when this CryptoKey is given in EncryptRequest.name. | 
|  | Keys with purpose ENCRYPT_DECRYPT may have a primary. For other keys, this field will be unset. | 
|  | Structure is [documented below](#nested_primary). | 
|  |  | 
|  | * `terraform_labels` - | 
|  | The combination of labels configured directly on the resource | 
|  | and default labels configured on the provider. | 
|  |  | 
|  | * `effective_labels` - | 
|  | All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Terraform, other clients and services. | 
|  |  | 
|  |  | 
|  | <a name="nested_primary"></a>The `primary` block contains: | 
|  |  | 
|  | * `name` - | 
|  | (Output) | 
|  | The resource name for this CryptoKeyVersion. | 
|  |  | 
|  | * `state` - | 
|  | (Output) | 
|  | The current state of the CryptoKeyVersion. | 
|  |  | 
|  | ## 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 | 
|  |  | 
|  |  | 
|  | CryptoKey can be imported using any of these accepted formats: | 
|  |  | 
|  | * `{{key_ring}}/cryptoKeys/{{name}}` | 
|  | * `{{key_ring}}/{{name}}` | 
|  |  | 
|  |  | 
|  | In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import CryptoKey using one of the formats above. For example: | 
|  |  | 
|  | ```tf | 
|  | import { | 
|  | id = "{{key_ring}}/cryptoKeys/{{name}}" | 
|  | to = google_kms_crypto_key.default | 
|  | } | 
|  | ``` | 
|  |  | 
|  | When using the [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import), CryptoKey can be imported using one of the formats above. For example: | 
|  |  | 
|  | ``` | 
|  | $ terraform import google_kms_crypto_key.default {{key_ring}}/cryptoKeys/{{name}} | 
|  | $ terraform import google_kms_crypto_key.default {{key_ring}}/{{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). |