Будет ли использование Managed Service Identity препятствовать подключению к KeyVault в режиме отладки

Я пытаюсь реализовать Azure KeyVault в моем приложении «Функции Azure», следуя этой статье: https://medium.com/statuscode/getting-key-vault-secrets-in-azure-functions-37620fd20a0b

В статье приложение-функция настроено на использование Managed Service Identity. (MSI), так что нам не нужно использовать секрет для получения токена для подключения к Azure KeyVault. Потому что это отчасти противоречит цели использования Azure KeyVault.

Насколько я понимаю, приложение Azure можно зарегистрировать для использования MSI, чтобы другие ресурсы Azure распознавали его напрямую, что упрощает процесс подключения, избавляя от необходимости получать токен и т. Д.

Однако во время отладки приложения функций Azure я не могу подключиться к Azure KeyVault для получения необходимых секретов.

Мне кажется, что это происходит потому, что во время отладки приложение функций выполняется локально, а не в Azure.

Может ли это быть причиной того, что я не могу подключиться к KeyVault?


person Sam    schedule 24.12.2017    source источник
comment
Это то, с чем я только что столкнулся, и у меня возникли точно такие же подозрения. Спасибо, что разместили это.   -  person Joey Eng    schedule 21.06.2018


Ответы (3)


Да, к сожалению, MSI получит токен только при работе внутри службы Функций Azure. Я обновил свой образец около недели назад, добавив новый регион #if, который я использую для извлечения секрета из локальных переменных в режиме DEBUG.

https://github.com/jeffhollan/functions-csharp-keyvault-eventhub/blob/master/ScaleTestV1_NoHost/Http.cs

person jeffhollan    schedule 24.12.2017
comment
Мое приложение-функция работает нормально локально, но не работает в Azure. Похоже, у меня проблемы с чтением секретов из Azure Key Vault. В вашем коде я не понимаю, где я говорю своей функции Azure, к какому Key Vault подключаться. Как приложение-функция узнает, какое хранилище ключей нужно вызвать, чтобы получить его значения? - person Sam; 25.12.2017
comment
@Sam Секретный идентификатор (Environment.GetEnvironmentVariable (EventHubSecretId))), который передается в вызов GetSecretAsync, содержит эту информацию как часть. Он принимает формат - https: // {keyvault-name} .vault.azure.net / {object-type} / {object-name} / {object-version}. - person Rahul P Nath; 03.01.2018
comment
Есть перегрузка для передачи URL-адреса keyvault в пакете nuget keyvault 2.3.2. Думаю, это то, что вам нужно. - person Joey Eng; 21.06.2018

В настоящее время доступно лучшее решение этой проблемы - использование Managed Service Identity во время локальной разработки в режиме отладки (по крайней мере, для приложений и функций .NET).

Вы можете использовать пакет Microsoft.Azure.Services.AppAuthentication.

Соответствующий образец кода .. (из ссылок ниже)

using Microsoft.Azure.Services.AppAuthentication;
using Microsoft.Azure.KeyVault;
// ...
var azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://vault.azure.net");
// OR
var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

Как использовать управляемые удостоверения для службы приложений и функций Azure

Microsoft.Azure.Services Справочник по .AppAuthentication

Библиотека Microsoft.Azure.Services.AppAuthentication для .NET упрощает эту проблему. Он использует учетные данные разработчика для аутентификации во время локальной разработки. Когда решение позже развертывается в Azure, библиотека автоматически переключается на учетные данные приложения.

Дополнительные сведения о том, как AzureServiceTokenProvider получает токены с помощью Visual Studio, Azure CLI или встроенной проверки подлинности Azure AD .. Прочтите здесь

person Rohit Saigal    schedule 06.10.2018

В качестве дополнения к ответу Рохита Сайгала обратите внимание на следующее:

Локальная разработка в Visual Studio с использованием службы Azure Key Vault зависит от https://marketplace.visualstudio.com/items?itemName=chrismann.MicrosoftVisualStudioAsalExtension#overview, который интегрирован в Visual Studio начиная с версии 15.6 и не требует отдельной установки.

Проверьте Visual Studio / Инструменты / Параметры / Аутентификация служб Azure, чтобы узнать, какую учетную запись вы используете для аутентификации в службах Azure, и установите соответствующие значения.

person Savo Zirojević    schedule 06.12.2018