Развертывание экземпляра контейнера с MSI и развернутыми в нем контейнерами не может считывать секреты keyvault - PullRequest
0 голосов
/ 23 ноября 2018

Я следовал этому руководству от Microsoft: https://docs.microsoft.com/en-us/azure/container-instances/container-instances-managed-identity

Все это прекрасно работает, но когда я хочу развернуть ASP.NET Core 2.1 внутри контейнера, где в своем коде я пытаюсь прочитатьСекреты KeyVault не работает.Он будет работать без развертывания в контейнере Docker.

Но цель состоит в том, чтобы развернуть проект в контейнере Docker, зарегистрировать его в реестре контейнеров Azure, а затем создать экземпляр контейнера с контейнерами, которые могут читать секреты ключей..

Ошибка, которую я получаю, обычно возникает при попытке прочитать секреты из Keyvaults внутри работающего контейнера Docker ядра .NET:

AzureServiceTokenProviderException: Параметры: Connectionstring: [Нетуказана строка подключения], ресурс: https://vault.azure.net, Полномочия: https://login.windows.net/. Сообщение об исключении: Попробовал следующие 3 метода для получения токена доступа, но ни один из них не сработал.Параметры: Строка соединения: [Строка соединения не указана], Ресурс: https://vault.azure.net, Полномочия: https://login.windows.net/. Сообщение об исключении: Попытка получить токен с использованием идентификатора управляемой службы.Невозможно подключиться к конечной точке MSI.Убедитесь, что вы работаете на ресурсе Azure, для которого настроена MSI.Параметры: Строка подключения: [Строка подключения не указана], Ресурс: https://vault.azure.net, Полномочия: https://login.windows.net/. Сообщение об исключении: Попытка получить токен с помощью Visual Studio.Не удалось получить токен доступа.Переменная окружения LOCALAPPDATA не установлена.Параметры: Строка подключения: [Строка подключения не указана], Ресурс: https://vault.azure.net, Полномочия: https://login.windows.net/. Сообщение об исключении: Попытка получить токен с помощью Azure CLI.Не удалось получить токен доступа./ bin / bash: az: Нет такого файла или каталога.

Любое руководство для чтения контейнеров Docker из секретов Azure Keyvault?

Исходный код для чтения секретов keyvault:

  public static async Task<string> GetSecret(string baseUrl, string keyName)
    {
        AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();

        using (var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback)))
        {
            var secret = await keyVaultClient.GetSecretAsync(baseUrl, keyName).ConfigureAwait(false);
            return secret
        }
    }

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Кажется, что я не знал об использовании AppAuthentication NuGet 1.1.0-preview произвело ошибку.Используйте 1.0.3, и все нормально работает внутри экземпляра контейнера Azure с запущенным образом контейнера:)

0 голосов
/ 25 ноября 2018

Прежде всего, вы должны знать, что управляемые удостоверения - это просто перо Azure Services.Кроме того, даже если для служб Azure, не все службы поддерживаются для пера.Вы можете узнать, какая служба Azure поддерживает управляемые удостоверения здесь .

И вы можете посмотреть, как работает MSI для службы Azure здесь .Поэтому кажется, что вы не можете использовать MSI для контейнера Docker, который не принадлежит Azure в экземпляре контейнера Azure.Ошибка также показывает, что:

Сообщение об исключении: Попытка получить токен с использованием идентификатора управляемой службы.Невозможно подключиться к конечной точке MSI.Убедитесь, что вы работаете с ресурсом Azure, для которого настроена MSI.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...