【问题标题】:How to bind Event hub in Azure Functions using Key Vault secret for connection string?如何使用连接字符串的 Key Vault 机密绑定 Azure Functions 中的事件中心?
【发布时间】:2025-04-01 06:55:01
【问题描述】:

我为EventHubTrigger 开发了一个 Azure Function 应用程序。这是基本代码:

public static class MyEventHubTriggerFunction
{

    [FunctionName("MyEventHubTriggerFunction")]
    public static async Task Run([EventHubTrigger("EventHubName",
        Connection = "EventHubConnectionString")] 
        string[] eventHubMessages, 
        TraceWriter log, 
        ExecutionContext context)
        { ... }
}

这是我的 local.settings.json 文件:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "EventHubName": "<myEventHubName>",
    "EventHubConnectionString": "<myEventHubConnectionString>"
  }
}

在部署此应用时,它可以在机器或 Azure 上正常运行。这里必须将 EventHubConnectionString 粘贴到 json 文件中。

是否有任何方法可以使用 MSI 身份验证从 KeyVault 机密中获取该值,并且它应该自动用于在 Run 方法参数中实例化 EventHubTrigger 实例?

我知道如何使用 KeyVaultClient 在函数范围内获取机密,但这里的函数触发器 run 方法本身需要连接字符串,因此我需要一种使用 KeyVault 机密覆盖它的方法。

【问题讨论】:

    标签: azure azure-functions azure-eventhub azure-keyvault azure-eventhub-capture


    【解决方案1】:

    今天不支持此功能。见https://github.com/Azure/azure-webjobs-sdk/issues/746

    一种方法(提到here)是使用 ARM 模板进行部署并从那里注入 KeyVault 的密钥。

    【讨论】:

      【解决方案2】:

      如果有人(如我)偶然发现这个问题但没有找到这个问题 (https://medium.com/statuscode/getting-key-vault-secrets-in-azure-functions-37620fd20a0b)

      简而言之(如果链接断开):

      在本地运行 - 在 local.settings.json 中设置

      迁移到 Azure 时,将连接字符串输入您的密钥保管库

      最后添加应用程序设置(与 local.settings.json 文件中的密钥相同),但输入密钥库 url 而不是实际的连接字符串

      注意! Azure Function 必须有权访问密钥保管库。这在文章中也有描述

      【讨论】:

        最近更新 更多