Azure Bicep循环传递存储账户连接串到Key Vault部署冲突问题
Bicep批量部署存储账户冲突问题排查
实现目标
- 按tenantCode批量创建存储账户
- 生成专属加密密钥
- 使用对应密钥加密存储账户
- 将存储账户连接串作为机密存入Key Vault
- 基础设施拆分两个资源组:
rg-shared:存放2个Key Vault,分别用于存储加密密钥/GUID、存储连接串机密rg-storage-account:存放所有批量创建的存储账户
现有代码架构
现有3份Bicep脚本,职责如下:
Storage.bicep:负责创建存储账户、配置Blob服务,调用shared.bicep模块上传连接串keyvaultclient.bicep:入口文件,负责创建托管标识、Key Vault密钥、访问策略、GUID机密,循环调用Storage.bicep模块部署存储账户shared.bicep:负责将传入的连接串写入目标Key Vault
问题现象
当tenantCodes数组仅配置1个租户代码时部署完全正常;配置多个租户代码时,所有资源(存储账户、密钥、加密配置、GUID、连接串机密)均可成功创建,但部署最终在连接串机密环节报错,错误码为StorageAccountOperationInProgress,提示当前存储账户正在执行需要独占访问的操作。
根因定位
已确认存在嵌套循环问题:shared.bicep内部会再次遍历全量tenantCodes创建所有租户的连接串机密,导致每个存储账户部署时都会重复修改所有机密、并发操作存储账户拉取密钥,最终触发冲突。
复现步骤
- 创建2个资源组,分别用于存放Key Vault和存储账户
- 替换脚本中Key Vault名称等参数为实际值
- 在所有Bicep文件的
tenantCodes数组中配置至少2个租户代码 - 执行
az deployment group create -f ./keyvaultsclient.bicep -g <Key Vault所在资源组名>命令部署即可复现问题
求助需求
本人为Bicep初学者,已尝试多种方案仍无法解决,请求协助排查修复该循环嵌套导致的部署冲突问题。
内容的提问来源于stack exchange,提问作者Nayden Van
相关产品推荐
相关产品推荐

