Подключение к 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 ответа

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

Включить MSI в блейде конфигурации виртуальной машины

  1. Найдите субъекта службы NameOfYourVM и добавьте его в хранилище ключей в разделе Политики доступа. Добавить ключ / секрет / сертификат разрешения.

Добавить сервисный принципал в Key Vault

  1. На виртуальной машине 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

Бежать локально.

  1. установить Azure Cli
  2. Откройте Windows Powershell
  3. записывать az login команда (она даст URL и код)
  4. Откройте 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

  1. Включите Системную назначенную управляемую идентификацию для вашей службы приложений, проверьте раздел "Идентификация" в настройках.

  2. Добавить политику в хранилище

  3. настроить свой код позади

Другие вопросы по тегам