Как связать концентратор событий в функциях 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 должна иметь разрешение на доступ к хранилищу ключей. Об этом также рассказывается в статье

Другие вопросы по тегам