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

Bicep部署存储账户时如何将连接字符串存入Azure Key Vault?

错误原因

你遇到的段长度报错是ARM/Bicep的资源命名规则触发的:

  • Microsoft.KeyVault/vaults/secrets属于三级资源类型,共3个段,作为根资源单独声明时,资源名必须包含2个段,格式为{KeyVault名称}/{Secret名称}
  • 你当前的密钥资源只填了Secret名称1个段,段数不匹配所以校验失败

另外你原有代码还存在两处隐藏问题:

  1. 拼接连接字符串时AccountName=${storage_Accounts[0]}写法错误,应该取存储资源的name属性
  2. listKeys参数不需要额外加字符串插值符号,直接传入资源属性即可
修复方案

推荐使用嵌套资源写法(和你找到的参考代码逻辑一致),无需手动拼接KV名称,同时适配多租户代码的循环场景,完整可运行代码如下:

param tenantCode array = [
  'dsec'
]

resource storage_Accounts 'Microsoft.Storage/storageAccounts@2021-06-01' = [ for tenantcode in tenantCode :{
  name: 'sthrideveur${tenantcode}'
  location: 'westeurope'
  sku: {
    name: 'Standard_RAGRS'
  }
  kind: 'StorageV2'
  properties: {
    allowCrossTenantReplication: true
    minimumTlsVersion: 'TLS1_2'
    allowBlobPublicAccess: false
    allowSharedKeyAccess: true
    networkAcls: {
      bypass: 'AzureServices'
      virtualNetworkRules: []
      ipRules: []
      defaultAction: 'Allow'
    }
    supportsHttpsTrafficOnly: true
    encryption: {
      services: {
        file: {
          keyType: 'Account'
          enabled: true
        }
        blob: {
          keyType: 'Account'
          enabled: true
        }
      }
      keySource: 'Microsoft.Storage'
    }
    accessTier: 'Cool'
  }
}]

resource devkeyvault 'Microsoft.KeyVault/vaults@2021-06-01-preview' existing = {
  name : '替换为你的Key Vault实际名称'
  // 嵌套声明Secret资源,自动关联父级Key Vault
  resource storageSecrets 'secrets' = [for i in range(0, length(tenantCode)): {
    name: storage_Accounts[i].name
    properties: {
      value: 'DefaultEndpointsProtocol=https;AccountName=${storage_Accounts[i].name};AccountKey=${listKeys(storage_Accounts[i].id, storage_Accounts[i].apiVersion).keys[0].value};EndpointSuffix=${environment().suffixes.storage}'
    }
  }]
}

如果你坚持使用单独根资源的写法,只需要修改密钥资源的name字段即可,示例如下:

resource storageAccountConnectionString 'Microsoft.KeyVault/vaults/secrets@2019-09-01' = {
  // 名称改为KeyVault名/Secret名的两段格式
  name: '${keyVault.name}/${connectionStringSecretName[0].name}'
  properties: {
    value: 'DefaultEndpointsProtocol=https;AccountName=${storage_Accounts[0].name};AccountKey=${listKeys(storage_Accounts[0].id, storage_Accounts[0].apiVersion).keys[0].value};EndpointSuffix=${environment().suffixes.storage}'
  }
}
前置权限要求

部署前需要确保你执行部署的身份,以及Key Vault的访问策略中,已经授予了机密设置权限,否则部署会报权限不足错误。

内容的提问来源于stack exchange,提问作者Nayden Van

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:36:03