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

如何通过Bicep编程获取Azure Service Bus的SharedAccessKey

正确实现方案

错误原因

你之前的写法问题在于listKeys直接作用于Service Bus命名空间资源本身不符合API返回结构,默认的RootManageSharedAccessKey是命名空间下的授权规则子资源,需要针对该子资源调用listKeys才能正确获取密钥。

方案1:直接在配置项内拼接连接字符串

直接修改你的value字段写法如下:

name: 'AzureWebJobsServiceBus'
value: 'Endpoint=sb://${service_bus.name}.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=${listKeys(resourceId('Microsoft.ServiceBus/namespaces/authorizationRules', service_bus.name, 'RootManageSharedAccessKey'), service_bus.apiVersion).primaryKey}'

方案2:提前定义连接字符串变量(更易维护)

你可以先在Bicep文件中定义变量存储完整连接字符串,后续其他资源直接引用变量即可:

// 定义Service Bus连接字符串变量
var serviceBusConnectionString = 'Endpoint=sb://${service_bus.name}.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=${listKeys(resourceId('Microsoft.ServiceBus/namespaces/authorizationRules', service_bus.name, 'RootManageSharedAccessKey'), service_bus.apiVersion).primaryKey}'

// 其他资源引用示例
name: 'AzureWebJobsServiceBus'
value: serviceBusConnectionString

补充说明

  • 该写法不需要硬编码任何密钥,部署时Azure会自动调用对应API获取授权规则的主密钥填充到连接字符串中
  • 如果你使用自定义的授权规则而非默认的RootManageSharedAccessKey,只需要把上面代码中的授权规则名称替换为你自己定义的名称即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 13:54:02