Функции Azure Key Vault

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

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

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

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

Работает как управляемая системой.

Если я отлаживаю, это все, что я получаю:

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

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

 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");

}

person Stuart.Sklinar    schedule 06.03.2019    source источник


Ответы (1)


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

Убедитесь, что у вас не настроено авторизованное приложение или настройки applicationId.

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

Создайте политику доступа в Key Vault для удостоверения приложения, которое вы создали ранее. Включите разрешение на получение секрета для этой политики. Не настраивайте авторизованное приложение или параметры applicationId, поскольку это несовместимо с управляемым удостоверением.

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

@Microsoft.KeyVault(SecretUri=MYSECRETFULLURL) 

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

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

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

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

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

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

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

Затем вам нужно будет настроить политику доступа в Key Vault, которая даст вашему приложению разрешение GET для секретов. Узнайте, как настроить политику доступа.

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

@ Microsoft.KeyVault (SecretUri = secret_uri_with_version)

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

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

person Murray Foxcroft    schedule 06.03.2019
comment
Код работает ... но настройки не проходят ... Спасибо за регистрацию указателей RE! Завтра попробую еще раз! - person Stuart.Sklinar; 06.03.2019
comment
Как вы устанавливаете / передаете accountId - похоже, у вас есть имя ключа, а не значение. - person Murray Foxcroft; 07.03.2019
comment
Я получаю его через System.Environment.GetEnvironmentVariable("accountId");, и это установлено в ApplicationSettings в функции (в Azure), которая, в свою очередь, должна указывать на хранилище ключей Azure - параметр приложения: my-key-store.vault.azure.net/secrets/AccountId/ - person Stuart.Sklinar; 07.03.2019
comment
Выглядит правильно. Вы пробовали воссоздать простое функциональное приложение и протестировать его? Кроме того, возьмите всю коллекцию (GetEnvironmentVariables, а не GetEnvironmentVariable) и перечислите коллекцию, чтобы увидеть, является ли это одной переменной или несколькими. Кроме того, это функция 1.0 или 2.0? - person Murray Foxcroft; 07.03.2019
comment
Я попробую это. Это 2.0 - person Stuart.Sklinar; 07.03.2019
comment
Хорошо - Создан новый проект, новый KeyVault - без кубиков - я добавил свой проект в Github, чтобы точно продемонстрировать, как я это делаю - не все ресурсы выбрасываются github.com/stusklinar/kvtest/tree/master/TestFunction - person Stuart.Sklinar; 07.03.2019
comment
Пробовал ваш код, и он работает на 100% нормально. Одна вещь, которую нужно проверить, убедитесь, что вы перезапускаете приложение-функцию после добавления настройки приложения функции. Сделать это можно через портал с помощью кнопок Stop и Play / Start. В противном случае это где-то в вашем конфиге. - person Murray Foxcroft; 07.03.2019
comment
Я перезагружался несколько раз, и каждый раз я думаю - person Stuart.Sklinar; 08.03.2019
comment
comment
И запускали ли вы его из тестовой панели из функций Azure? Возможно, имеет смысл выйти из системы с идентификатором пользователя в коде и убедиться, что у пользователя есть доступ к хранилищу ключей и секретному хранилищу в соответствии с ПОЛИТИКАМИ ДОСТУПА. - person Murray Foxcroft; 08.03.2019
comment
@AndrewSumner Я добавил основную причину в начало своего ответа. Стюарт, прими это как ответ. - person Murray Foxcroft; 26.06.2020