如何使用Key Vault机密为连接字符串绑定Azure Functions中的事件中心?

时间:2018-07-31 11:54:14

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

我为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机密中获取该值,并且应在运行方法参数中实例化EventHubTrigger实例时自动使用该值?

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

2 个答案:

答案 0 :(得分:2)

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

一种方法(提到here)是使用ARM模板进行部署,然后从KeyVault注入密钥。

答案 1 :(得分:1)

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

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

本地运行-将设置保存在local.settings.json

移动到Azure时,在密钥库中输入连接字符串

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

注意! Azure功能必须具有访问密钥库的权限。