#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.