demo_solution/modules/repo_terraform.azurerm.key_vault_content/main.tf (28 lines of code) (raw):

# Creating secret resource "azurerm_key_vault_secret" "main" { for_each = { for secret in var.secrets : secret.name => secret } name = each.key value = sensitive(each.value.value) key_vault_id = var.keyvault_id content_type = each.value.content_type not_before_date = each.value.not_before_date expiration_date = each.value.expiration_date tags = each.value.tags # uncoment this if you need to update values manually # lifecycle { # ignore_changes = [value] # } } # Creating key resource "azurerm_key_vault_key" "main" { for_each = { for key in var.keys : key.name => key } name = each.key key_vault_id = var.keyvault_id key_type = each.value.key_type key_size = each.value.key_size key_opts = each.value.key_opts curve = each.value.curve not_before_date = each.value.not_before_date expiration_date = each.value.expiration_date tags = each.value.tags # uncoment this if you need to update keys manually # lifecycle { # ignore_changes = [key_type, key_size] # } } # Creating sertificate # To implement this solution, you need to create a certificate with a password resource "azurerm_key_vault_certificate" "main" { for_each = { for certificate in var.certificate_setting : certificate.name => certificate } name = each.key key_vault_id = var.keyvault_id /* Storing the certificate in the folder is not the right solution from a security point of view. This storage method is implemented to test the module's operability and will be redesigned in accordance with real design requirements*/ dynamic "certificate" { for_each = each.value.certificate != null ? [1] : [] content { contents = filebase64(each.value.certificate.path) password = sensitive(each.value.certificate.password) } } dynamic "certificate_policy" { for_each = each.value.certificate_policy != null ? [1] : [] content { issuer_parameters { name = each.value.certificate_policy.issuer_parameters.name } key_properties { curve = each.value.certificate_policy.key_properties.curve exportable = each.value.certificate_policy.key_properties.exportable key_size = each.value.certificate_policy.key_properties.key_size key_type = each.value.certificate_policy.key_properties.key_type reuse_key = each.value.certificate_policy.key_properties.reuse_key } dynamic "lifetime_action" { for_each = each.value.certificate_policy.lifetime_action != null ? [1] : [] content { action { action_type = each.value.certificate_policy.lifetime_action.action.action_type } trigger { days_before_expiry = each.value.certificate_policy.lifetime_action.trigger.days_before_expiry lifetime_percentage = each.value.certificate_policy.lifetime_action.trigger.lifetime_percentage } } } secret_properties { content_type = each.value.certificate_policy.secret_properties.content_type } dynamic "x509_certificate_properties" { for_each = each.value.certificate_policy.x509_certificate_properties != null ? [1] : [] content { extended_key_usage = each.value.certificate_policy.x509_certificate_properties.extended_key_usage key_usage = each.value.certificate_policy.x509_certificate_properties.key_usage subject = each.value.certificate_policy.x509_certificate_properties.subject validity_in_months = each.value.certificate_policy.x509_certificate_properties.validity_in_months dynamic "subject_alternative_names" { for_each = each.value.certificate_policy.x509_certificate_properties.subject_alternative_names != null ? [1] : [] content { dns_names = each.value.certificate_policy.x509_certificate_properties.subject_alternative_names.dns_names emails = each.value.certificate_policy.x509_certificate_properties.subject_alternative_names.emails upns = each.value.certificate_policy.x509_certificate_properties.subject_alternative_names.upns } } } } } } tags = each.value.tags # uncoment this if you need to update certificates manually # lifecycle { # ignore_changes = [certificate] # } }