You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:23:09