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

如何通过Terraform创建名称包含下划线的Azure Key Vault密钥?

如何通过Terraform创建名称包含下划线的Azure Key Vault密钥?

咱们先理清楚问题根源:Azure Key Vault的秘密名称确实有字符约束(部分旧版Terraform Azurerm Provider也会做严格校验),不允许使用下划线,但你需要让这个秘密能被.NET应用正确映射到VccbSettingsV2:EndpointUrl这个配置项对吧?

这里有两个实用的解决方案,你可以根据自己的情况选择:

方案一:用点分隔的秘密名称,靠.NET默认规则自动映射

Azure Key Vault允许用点(.)作为秘密名称的分隔符,而.NET的Azure Key Vault配置提供程序默认会把秘密名称里的点转换成配置层级的冒号(:)。你只需要把Terraform代码改成这样:

resource "azurerm_key_vault_secret" "secret001" {
  name         = "VccbSettingsV2.EndpointUrl"
  value        = "https://some-url.com"
  key_vault_id = azurerm_key_vault.kv.id
}

这样你的.NET应用读取这个秘密时,会自动把VccbSettingsV2.EndpointUrl解析成VccbSettingsV2:EndpointUrl,完美匹配你需要的配置键,而且不需要额外修改应用代码,非常省心。

方案二:用双破折号替换下划线,配合.NET自定义映射

如果你更习惯类似下划线的分隔方式,也可以把下划线换成双破折号(--),然后在.NET应用里加一点配置代码来做映射转换:

首先修改Terraform代码:

resource "azurerm_key_vault_secret" "secret001" {
  name         = "VccbSettingsV2--EndpointUrl"
  value        = "https://some-url.com"
  key_vault_id = azurerm_key_vault.kv.id
}

然后在你的.NET应用的配置代码里(比如Program.cs),自定义Key Vault的秘密名称映射规则:

builder.Configuration.AddAzureKeyVault(
    new Uri("你的密钥保管库URI"),
    new DefaultAzureCredential(),
    new CustomKeyVaultSecretManager());

// 自定义的秘密管理器类
public class CustomKeyVaultSecretManager : IKeyVaultSecretManager
{
    public bool Load(SecretProperties properties)
    {
        return true; // 加载所有密钥保管库中的秘密
    }

    public string GetKey(KeyVaultSecret secret)
    {
        // 把双破折号替换成双下划线,.NET会自动把双下划线转成冒号
        return secret.Name.Replace("--", "__");
    }
}

这样秘密名称VccbSettingsV2--EndpointUrl会被转换成VccbSettingsV2__EndpointUrl,.NET配置系统会自动把双下划线转成冒号,最终得到你需要的VccbSettingsV2:EndpointUrl配置键。

个人更推荐方案一,因为不需要额外编写应用代码,完全利用默认规则就能解决问题,更简洁高效。

备注:内容来源于stack exchange,提问作者Harkirat singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 09:33:07