我为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覆盖它的方法。
答案 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功能必须具有访问密钥库的权限。