variables.customermanagedkey.tf (42 lines of code) (raw):

variable "customer_managed_key" { type = object({ key_name = string key_vault_resource_id = string key_version = optional(string, null) # Not supported in CosmosDB user_assigned_identity = optional(object({ resource_id = string }), null) }) default = null description = <<DESCRIPTION Defaults to `null`. Ignored for Basic and Standard. Defines a customer managed key to use for encryption. - `key_name` - (Required) - The key name for the customer managed key in the key vault. - `key_vault_resource_id` - (Required) - The full Azure Resource ID of the key_vault where the customer managed key will be referenced from. - `key_version` - (Unsupported) - `user_assigned_identity` - (Required) - The user assigned identity to use when access the key vault - `resource_id` - (Required) - The full Azure Resource ID of the user assigned identity. > Note: Remember to assign permission to the managed identity to access the key vault key. The Key vault used must have enabled soft delete and purge protection. The minimun required permissions is "Key Vault Crypto Service Encryption User" Example Inputs: ```hcl customer_managed_key = { key_name = "sample-customer-key" key_vault_resource_id = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.KeyVault/vaults/{keyVaultName}" user_assigned_identity { resource_id = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{managedIdentityName}" } } ``` DESCRIPTION validation { condition = var.customer_managed_key == null || can(regex("^/subscriptions/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/resourceGroups/.+/providers/Microsoft.ManagedIdentity/userAssignedIdentities/.+$", var.customer_managed_key.user_assigned_identity.resource_id)) error_message = "'user_assigned_identity.resource_id' must be in the format '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{managedIdentityName}'" } validation { condition = var.customer_managed_key == null || can(regex("^/subscriptions/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/resourceGroups/.+/providers/Microsoft.KeyVault/vaults/.+$", var.customer_managed_key.key_vault_resource_id)) error_message = "'key_vault_resource_id' must be in the format '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.KeyVault/vaults/{keyVaultName}'" } validation { condition = var.customer_managed_key == null ? true : var.customer_managed_key.key_name != null error_message = "'key_name' must have a value" } }