azure-active-directory - 由 servicebus 触发的 Azure Functions 抱怨连接字符串“AzureWebJobsServiceBus”丢失或为空
问题描述
当我在 local.settings.json 中有一个有效的 AzureWebJobsServiceBus 时,我有一个 .netcore Azure Functions 项目在 Visual Studio 2019 中运行良好,但如果它丢失或为空,则无法编译。我正在使用 AD 向服务总线验证我的功能,而不是通过连接字符串。AzureWebJobsServiceBus 在我的项目中的任何地方都没有使用。这是我的 project.cs
我使用 Azure.Identity 包并按照这篇文章使用我的凭据登录到 Azure,这是我正在工作的函数:
[FunctionName("ProcessNewMessage")]
public async Task ProcessPaymentMessage([ServiceBusTrigger("topic", "subscription")] Message message, ILogger log) {
var tokenProvider = TokenProvider.CreateManagedIdentityTokenProvider();
QueueClient queueClient = new QueueClient($"sb://{Environment.GetEnvironmentVariable("ServiceBusEndPoint")}", Environment.GetEnvironmentVariable("GenericAuditQueueName"), tokenProvider);
await queueClient.SendAsync(message);
}
在使用 AD 进行身份验证之前,我使用的是连接字符串,这也可以,但建议使用 AD。
总而言之,当提供连接字符串但我的代码未使用时,我的 Azure 函数与服务总线触发器一起使用。如何在没有连接字符串的情况下使我的函数与 AD 一起使用?
非常感谢
解决方案
您无法从 Azure 函数应用服务总线触发器中删除服务总线连接字符串,因为内部 SDK 使用它来建立连接。
使用 key Vault 在 Function App 中保存服务总线的连接字符串: Key Vault 引用功能使您的应用程序可以像使用应用程序设置一样工作,这意味着不需要更改代码。您可以从我们的Key Vault 参考文档中获取所有详细信息,但我将在此处概述基础知识。
此功能需要为您的应用分配系统分配的托管标识。在这篇文章的后面,我将讨论用户分配的身份,但我们暂时将这些预览分开。
然后,您需要在 Key Vault 上配置访问策略,为您的应用程序提供获取机密的权限。了解如何配置访问策略。
最后,将任何应用程序设置的值设置为以下格式的引用:
@Microsoft.KeyVault(SecretUri=secret_uri_with_version)
其中 secret_uri_with_version 是 Key Vault 中机密的完整 URI。例如,这将类似于:https ://myvault.vault.azure.net/secrets/azurewebjobsservicebussecret/ec96f02080254f109c51a1f14cdb1931
您可以将 MSI 用于 Azure Function App 和服务总线:
推荐阅读
- xquery - 查询。如何查看当前的增量备份状态?
- python - grpc-Python max_workers 限制同时进程的数量
- c# - 反序列化对象
- amazon-web-services - 降低 AWS 中的数据传输成本
- php - 使用 Ajax 时如何访问购物车 id 的会话变量?如何设置属性?
- angular - 是否可以在从服务器获取之前过滤 api 数据?
- python-3.x - 如何使用 Matplotlib 更改我的代码以停止 DepreciatonWarning:使用或从“集合”导入 ABC
- lua - 如何修改由 C API 创建的元表?
- amazon-web-services - 禁用 AWS Api Gateway http --> https 307 重定向
- c# - 如何让 c# 从网站获取所有 URL 并将它们放入列表中