Как связать концентратор событий в функциях Azure, используя секретный ключ хранилища ключей для строки подключения?
Я разработал приложение-функцию Azure для EventHubTrigger
, Вот основной код:
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.
Есть ли способ извлечь это значение из секрета KeyVault с помощью аутентификации MSI, и оно должно автоматически использоваться при создании экземпляра EventHubTrigger
экземпляр в параметре метода Run?
Я знаю о том, как получить секрет в рамках функции, используя KeyVaultClient
но здесь триггер функции run
сам метод требует строку подключения, поэтому мне нужен способ переопределить это с секретом KeyVault.
1 ответ
Это не поддерживается сегодня. См. https://github.com/Azure/azure-webjobs-sdk/issues/746.
Один из подходов (упомянутый здесь) состоит в том, чтобы использовать шаблон ARM для развертывания и вставить туда ключ от KeyVault.
Если кто-то (как и я) наткнется на этот вопрос и не нашел его (https://medium.com/statuscode/getting-key-vault-secrets-in-azure-functions-37620fd20a0b)
Вкратце (если ссылка не работает):
Запуск локально - настройте его в local.settings.json
При переходе в Azure введите строку подключения в хранилище ключей.
Наконец, добавьте настройку приложения (тот же ключ, что и в вашем файле local.settings.json), но введите URL-адрес хранилища ключей вместо фактической строки подключения
Заметка! Функция Azure должна иметь разрешение на доступ к хранилищу ключей. Об этом также рассказывается в статье