Azure内置KeyVault证书策略转自定义时provider不存在报错如何解决
问题根本原因
该报错由两个配置错误共同导致:
- 策略定义的
mode配置不符合要求:Microsoft.KeyVault.Data是Key Vault数据平面专属的资源提供程序,仅支持Microsoft.KeyVault.Data模式,你当前配置的All模式仅适配Azure资源管理器平面的资源别名,无法识别数据平面的提供程序标识。 - 字段别名修改错误:
validityInMonths是证书专属属性,仅存在于Microsoft.KeyVault.Data/vaults/certificates/properties.validityInMonths路径下,你修改为secrets相关路径后,该别名本身就不存在。
修复步骤
- 第一步:将azurerm_policy_definition资源中的
mode参数值从All改为Microsoft.KeyVault.Data - 第二步:还原内置策略JSON中40、43行的字段配置,改回原始的
Microsoft.KeyVault.Data/vaults/certificates/properties.validityInMonths - 第三步:重新执行
terraform apply即可完成策略创建
修复后的核心配置示例
resource "azurerm_policy_definition" "CertificatesShouldHaveSpecifiedMaximumValidityPeriod" { name = "CertificatesShouldHaveSpecifiedMaximumValidityPeriod" policy_type = "Custom" # 仅此处修改为数据平面专属模式,其余配置保持不变 mode = "Microsoft.KeyVault.Data" display_name = "CertificatesShouldHaveSpecifiedMaximumValidityPeriod" description = "Manage your organizational compliance requirements by specifying the maximum amount of time that a certificate can be valid within your key vault." metadata = jsonencode(local.json_keyvault_certmaxvalidityperiod.properties.metadata) policy_rule = jsonencode(local.json_keyvault_certmaxvalidityperiod.properties.policyRule) parameters = <<PARAMETERS { "effect" : { "type": "string", "metadata": { "description": "Enable or disable the execution of the policy", "displayName": "Effect" } }, "maximumValidityInMonths": { "type": "integer", "metadata": { "description": "The limit to how long a certificate may be valid for. Certificates with lengthy validity periods aren't best practice.", "displayName": "The maximum validity in months" } } } PARAMETERS }
额外注意事项
- 该策略为数据平面策略,分配后最长需要15分钟完成生效,即可扫描存量证书的合规状态
- 需提前确认对应订阅已完成
Microsoft.KeyVault资源提供程序的注册,否则仍可能出现别名识别错误 - 若部署在Azure边缘区域,可先通过Azure Policy别名查询接口确认对应区域是否已支持该数据平面别名
内容的提问来源于stack exchange,提问作者Big Bear Brian
相关产品推荐
相关产品推荐

