Использование управляемого удостоверения Azure для приложения, развернутого в Azure?

#c# #.net #azure #azure-keyvault

#c# #.net #лазурь #azure-keyvault

Вопрос:

У меня есть приложение функций azure, которое будет развернуто в azure. В этом приложении у меня есть некоторые секреты, которые хранятся в хранилище ключей, которые мне нужно использовать с помощью управляемой идентификации Azure. У меня есть следующий метод в одном из моих классов, который извлекает секреты, хранящиеся в KeyVault.

 public static string GetSecretValue(string secretkey)  {  string keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");  var kvUri = "https://"   keyVaultName   ".vault.azure.net";  var secretclient = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());  return secretclient.GetSecret(secretkey).Value.Value;  }  

У меня есть переменная среды, в которой хранится мое имя хранилища ключей, как показано в коде. Мне нужно проверить правильность моих шагов, чтобы использовать управляемую идентификацию Azure для извлечения значений 5 секретов, хранящихся в KeyVault во время производства/развертывания в Azure, и убедиться, что все работает хорошо (обратите внимание, что при локальном запуске все работает идеально).

Что я сделал до сих пор, так это следующее:

1. Включенные управляемые удостоверения для приложения функций Azure

2 — Предоставьте разрешение функции Azure (выбрав ее в качестве основного пользователя) для доступа к KeyVault

3. Настроил хранилище ключей Azure в Visual Studio на основе метода, показанного выше

Мой вопрос: я что-то упускаю в приведенном выше коде или в шагах по использованию управляемых удостоверений Azure? Должен ли я добавить что-либо еще в Настройки приложения в Azure или в этом нет необходимости? Могу ли я сохранить переменную среды в том виде, в каком она отображается, или мне следует сохранить ее где-нибудь еще в Azure ?

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

1. Если он работает правильно локально, это означает, что ваш код более или менее корректен (например DefaultAzureCredential , для получения учетных данных используется логин браузера, и вы упомянули, что он работает). Можете ли вы вставить скриншот в свой вопрос с подробным описанием разрешений, которые вы назначили основателю вашей управляемой личности? Кроме того, вы можете записать это значение в журнал Application Insights или в какой-либо другой регистратор, чтобы узнать, есть ли там допустимое значение?

Ответ №1:

Я провел тестирование в своей среде.

Вам необходимо добавить параметр приложения со значением, как показано ниже, для каждого секрета:

 @Microsoft.KeyVault(SecretUri=https://my-key-vault.vault.azure.net/secrets/secretName/secretVersion)  

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

Вы можете найти секретный Uri из секретного идентификатора текущей версии секретного:

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

Я вызвал секрет, используя нижеприведенную строку кода:

 var secretValue = Environment.GetEnvironmentVariable("secret1", EnvironmentVariableTarget.Process);   

Я могу успешно извлечь секреты хранилища ключей

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

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

1. Большое вам спасибо за вашу помощь. Это действительно очень помогло. У меня просто есть небольшой вопрос. В моей ситуации код в Visual Studio можно либо перевести в режим выпуска, либо отладить в диспетчере конфигурации. Как я узнаю, в каком режиме он будет опубликован в Azure ?

2. Здесь вы можете увидеть, в каком режиме вы опубликовали свою функцию из vs gt; сборка gt;gt; выбор публикации: gt;gt; i.imgur.com/Ll4Q9XW.png

3. Огромное спасибо. Я принял ваш ответ. Один последний вопрос, пожалуйста, как вы можете видеть в приведенном выше методе, я локально сохранил переменную среды с именем KEY_VAULT_NAME. При публикации я должен удалить эту переменную среды? Или мне следует оставить его себе ? В случае, если я должен удалить его, как я смогу получить значения секретов на основе метода, описанного выше, когда приложение будет опубликовано ? И если приложение было опубликовано, и я хотел бы снова изменить его локально, как я смогу это сделать ? Следует ли его переиздать, как это сделать ? Большое вам спасибо за вашу помощь 🙂

4. Вы можете сохранить/изменить переменную env локально, так как это не повлияет на операции KeyVault в приложении функций azure.