如何让Azure Key Vault密钥与Web App Job的ServiceBusTrigger属性配合使用?
解决Azure函数ServiceBusTrigger结合KeyVault的配置方案
核心思路
[ServiceBusTrigger]属性的Connection参数要求的是配置键名,而非直接写连接字符串或KeyVault引用。我们只需要把这个配置键映射到KeyVault中的秘密即可,无需修改现有代码。
1. 保持现有代码不变
你的函数代码无需任何改动,因为Connection="ServiceBusConnectionString"是读取配置文件/应用设置中的对应键值:
public async Task MessageReceived( [ServiceBusTrigger("some-queue", Connection = "ServiceBusConnectionString")] SomeClass someInstance, int deliveryCount, DateTime enqueuedTimeUtc, string messageId, ILogger log) { // 消息处理代码 }
2. 在Azure门户配置应用设置映射到KeyVault
部署到Azure后,按以下步骤配置:
- 打开你的Web App Job(函数应用),进入配置 > 应用程序设置
- 点击「新建应用程序设置」,填入:
- 名称:
ServiceBusConnectionString - 值:
@Microsoft.KeyVault(VaultName=myvault;SecretName=存储ServiceBus连接字符串的秘密名称) - (替换
myvault为你的密钥库名称,存储ServiceBus连接字符串的秘密名称为你存在KeyVault里的ServiceBus连接字符串秘密名)
- 名称:
- 保存设置
3. 配置函数应用访问KeyVault的权限
必须给函数应用分配读取KeyVault秘密的权限:
- 进入函数应用的身份 > 系统分配,开启状态并保存,获取系统托管身份
- 打开你的KeyVault,进入访问策略 > 添加访问策略:
- 权限:选择「秘密权限」中的「获取」和「列表」
- 主体:搜索你的函数应用名称并选中
- 保存访问策略
本地开发提示
本地测试时,直接在local.settings.json中填入实际的ServiceBus连接字符串即可,无需KeyVault引用:
{ "Values": { "ServiceBusConnectionString": "你的实际ServiceBus连接字符串" } }
内容的提问来源于stack exchange,提问作者tonycdp
相关产品推荐
相关产品推荐

