使用Terraform创建Azure Key Vault SSL证书遇400错误求助
Azure Key Vault自签名证书Terraform创建报错解决
问题场景
使用azurerm_key_vault_certificate资源创建自签名SSL证书时,收到400错误:
Error: keyvault.BaseClient#CreateCertificate: Failure responding to request: StatusCode=400 -- Original Error: autorest/azure: Service returned an error. Status=400 Code="BadParameter" Message="Property policy has invalid value\r\n"
使用的Terraform代码如下:
resource "azurerm_key_vault_certificate" "app" { provider = azurerm.app depends_on = [ azurerm_resource_group.app ] certificate_policy { lifetime_action { action { # Certificate contacts on expiring certificates action_type = "EmailContacts" } trigger { days_before_expiry = 28 } } issuer_parameters { name = "Self" } key_properties { exportable = true key_type = "RSA" reuse_key = false key_size = 2048 } secret_properties { content_type = "application/x-pkcs12" } } key_vault_id = azurerm_key_vault.app[0].id name = "${var.app_stage}-${var.app_key}" }
问题原因
报错指向证书策略无效,核心原因有两个:
- 自签名证书的策略必须包含
x509_certificate_properties块,指定证书主体信息,这是Azure Key Vault的强制要求; - 若使用
EmailContacts生命周期动作,需确保Key Vault已配置证书联系人,否则该动作会导致策略校验失败。
解决步骤
1. 添加必填的X509证书属性块
在certificate_policy内部添加x509_certificate_properties,指定证书的subject(主体标识),示例:
x509_certificate_properties { subject = "CN=${var.app_stage}-${var.app_key}.your-domain.com" }
根据实际业务需求替换subject的值,比如使用你的服务域名或内部标识。
2. 处理生命周期动作(二选一)
- 保留邮件提醒:确保Key Vault已通过Terraform或Azure门户配置证书联系人,示例Terraform配置:
resource "azurerm_key_vault_certificate_contact" "app" { key_vault_id = azurerm_key_vault.app[0].id email_address = "admin@your-domain.com" } - 移除邮件提醒:直接删除整个
lifetime_action块,简化证书策略。
3. 完整修正后的代码
resource "azurerm_key_vault_certificate" "app" { provider = azurerm.app depends_on = [azurerm_resource_group.app] key_vault_id = azurerm_key_vault.app[0].id name = "${var.app_stage}-${var.app_key}" certificate_policy { issuer_parameters { name = "Self" } key_properties { exportable = true key_type = "RSA" reuse_key = false key_size = 2048 } secret_properties { content_type = "application/x-pkcs12" } x509_certificate_properties { subject = "CN=${var.app_stage}-${var.app_key}.internal" } } }
内容的提问来源于stack exchange,提问作者Słowik
相关产品推荐
相关产品推荐

