如何通过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
相关产品推荐
相关产品推荐

