Подключение к Azure Vault с использованием MSI
Я пытаюсь подключиться к своему лазурному хранилищу из консольного приложения с помощью MSI
Для этого хранилища я добавил своего пользователя в качестве выбранного принципа
код, который я использую для подключения
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var secret = await keyVaultClient.GetSecretAsync("https://<vaultname>.vault.azure.net/secrets/<SecretName>").ConfigureAwait(false);
Я получаю следующее исключение
Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException: Параметры: Строка подключения: [Строка подключения не указана], Ресурс: https://vault.azure.net/, Authority
2 ответа
- Включите удостоверение управляемой службы в колонке конфигурации под вашей виртуальной машиной.
- Найдите субъекта службы NameOfYourVM и добавьте его в хранилище ключей в разделе Политики доступа. Добавить ключ / секрет / сертификат разрешения.
- На виртуальной машине Azure запустите консольное приложение.
class Program
{
// Target C# 7.1+ in your .csproj for async Main
static async Task Main()
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
var secret = await keyVaultClient.GetSecretAsync(
"https://VAULT-NAME.vault.azure.net/secrets/SECRET-NAME");
Console.WriteLine(secret.Value);
Console.ReadLine();
}
}
Для локального запуска создайте свою собственную регистрацию приложения Azure AD (тип Web App/Web API, чтобы сделать его конфиденциальным клиентом), добавьте его в Key Vault и используйте его client_id и client_secret при получении токена доступа - https://docs.microsoft.com/en-us/azure/key-vault/key-vault-use-from-web-application
Как отметил Varun - MSFT в комментариях, теперь есть лучший способ получить токен доступа при локальном запуске без предоставления субъекта службы -
https://docs.microsoft.com/en-us/azure/key-vault/service-to-service-authentication
Бежать локально.
- установить Azure Cli
- Откройте Windows Powershell
- записывать
az login
команда (она даст URL и код) - Откройте URL-адрес и введите код, который дается с помощью логина az
затем получить секретное значение, как это
var secret = keyVaultClient.GetSecretAsync("https://VAULT-NAME.vault.azure.net/secrets/SECRET-NAME").GetAwaiter().GetResult() ;
secret.Value; //will be your secret.
Правильный ответ уже дан выше, вот дополнительный:-)
Применение MSI Azure с помощью App Service & Vault