Хранилище ключей функций Azure

#azure #azure-functions #azure-keyvault

#azure #azure-функции #azure-keyvault

Вопрос:

Насколько я понимаю, пока я настраиваю гранты для KeyVault, моя функция должна иметь возможность считывать из него данные с помощью

@Microsoft.KeyVault(SecretUri=MYSECRETFULLURL) и я предполагаю, что это будет преобразовано во время выполнения?

Есть идеи, как я мог бы это отладить?

В настоящее время, когда я добираюсь до моей функции, это то, что указано выше, без каких-либо изменений.

Выполняется как управляемое системой.

Если я выполняю отладку, это все, что я получаю:

введите описание изображения здесь

Однако я могу видеть, что мой аудит в Azure key vault был заблокирован. введите описание изображения здесь

  public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            var accountToMoveFrom = System.Environment.GetEnvironmentVariable("accountToMonitor");
            log.LogCritical(accountToMoveFrom);
            var accessToken = System.Environment.GetEnvironmentVariable("accessToken");

}
  

Ответ №1:

Добавление окончательного разрешения:

Убедитесь, что у вас не настроены параметры «авторизованного приложения» или applicationId.

Из документации

Создайте политику доступа в хранилище ключей для удостоверения приложения, которое вы создали ранее. Включите секретное разрешение «Получить» в этой политике. Не настраивайте параметры «авторизованного приложения» или applicationId, поскольку это несовместимо с управляемым удостоверением.

Примечание: Действительно ли ваш код работает? Запись значения ключа в журнал перехватывается и отображается как

 @Microsoft.KeyVault(SecretUri=MYSECRETFULLURL) 
  

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

Он отлично работает в соответствии с документами (выдержка ниже), также дважды проверьте, что у вас есть:

  • Идентификатор управляемой службы (MSI), настроенный в функциональном приложении
  • Перезапустите приложение function после добавления настроек приложения function
  • MSI функции предоставляется доступ к соответствующему KeyVault, но не к плоскости управления, а к политикам доступа.

введите описание изображения здесь

  • Если вы запускаете / отлаживаете локально в Visual Studio, вам необходимо предоставить учетной записи, вошедшей в Visual Studio, права на хранилище ключей, поскольку это представленное удостоверение.

Получение настроек приложения из хранилища ключей Функция ссылок на хранилища ключей позволяет вашему приложению работать так, как если бы оно использовало настройки приложения в прежнем виде, то есть никаких изменений кода не требуется. Вы можете получить все подробности из нашей справочной документации по хранилищу ключей, но здесь я изложу основы.

Для этой функции требуется назначенное системой управляемое удостоверение для вашего приложения. Позже в этом посте я расскажу о пользовательских удостоверениях, но пока мы сохраняем эти предварительные просмотры отдельно.

Затем вам нужно будет настроить политику доступа к вашему хранилищу ключей, которая дает вашему приложению разрешение на получение секретных данных. Узнайте, как настроить политику доступа.

Наконец, установите значение любого параметра приложения равным ссылке следующего формата:

@Microsoft.KeyVault (секрет=secret_uri_with_version)

Где secret_uri_with_version — это полный URI для секрета в Хранилище ключей. Например, это могло бы быть что-то вроде: https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931

введите описание изображения здесь

Комментарии:

1. Код работает .. но настройки не выполняются… Спасибо за повторную регистрацию указателей! Я попробую еще раз завтра!

2. Как вы настраиваете / передаете AccountId — похоже, у вас есть имя ключа, а не значение.

3. Я получаю это через System.Environment.GetEnvironmentVariable("accountId"); и это задано ApplicationSettings в функции (в Azure), которая, в свою очередь, должна указывать на azure key vault — настройка приложения такова: my-key-store.vault.azure.net/secrets/AccountId /…

4. Это выглядит правильно. Вы пробовали воссоздать простое функциональное приложение и протестировать его? Кроме того, возьмите всю коллекцию (GetEnvironmentVariables в отличие от GetEnvironmentVariable) и перечислите коллекцию, чтобы увидеть, является ли это только одной переменной или многих. Кроме того, это функция 1.0 или 2.0?

5. Я попробую это. Это 2.0