Bicep部署存储账户时如何将连接字符串存入Azure Key Vault?
错误原因
你遇到的段长度报错是ARM/Bicep的资源命名规则触发的:
Microsoft.KeyVault/vaults/secrets属于三级资源类型,共3个段,作为根资源单独声明时,资源名必须包含2个段,格式为{KeyVault名称}/{Secret名称}- 你当前的密钥资源只填了Secret名称1个段,段数不匹配所以校验失败
另外你原有代码还存在两处隐藏问题:
- 拼接连接字符串时
AccountName=${storage_Accounts[0]}写法错误,应该取存储资源的name属性 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
相关产品推荐
相关产品推荐

