Чтение секрета, хранящегося в хранилище ключей, из службы приложений, в которой запущен контейнер - PullRequest
0 голосов
/ 11 марта 2019

Я создал службу приложений, в которой запущен контейнер с Identity Server.Этот контейнер нуждается в сертификате, который я загружаю из хранилища ключей.Чтобы получить содержимое сертификата, я сделал следующее:

  • Загрузка сертификата в хранилище ключей
  • Доступ к содержимому для доступа к секретной конечной точке хранилища ключей (https://mykeyvault.vault.azure.net/secrets/IdentityCert)

В моей первой попытке я сохранил только URI секрета в настройках приложения и попытался получить значение, используя следующий код:

var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
                    new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

var cert = keyVaultClient
    .GetSecretAsync(
        Env.GetString("CERTIFICATE_KEY_VAULT_KEY"))
    .ConfigureAwait(false).GetAwaiter().GetResult();

identityServerBuilder.AddSigningCredential(new X509Certificate2(Convert.FromBase64String(cert.Value)));

Это работает, еслиЯ внедряю код в виртуальную машину. Но этого не происходит, если я внедряю код в службу приложений, на которой запущен контейнер. Поэтому я решил попробовать другой вариант - использовать ссылку на хранилище ключей. Итак, я создалновые настройки приложения, такие как:

CERTIFICATE_CONTENT = @Microsoft.KeyVault(SecretUri=https://mykeyvault.vault.azure.net/secrets/IdentityCert/5221036c6b734d5fa69cba29976a8592)

А затем просто используйте это значение внутри моего кода:

var certificateContent = Env.GetString("CERTIFICATE_CONTENT");

identityServerBuilder.AddSigningCredential(new X509Certificate2(Convert.FromBase64String(certificateContent)));

Но это тоже не работает.

I 'включили управляемую идентификацию в службе приложений и добавили ее в политики доступа в хранилище ключей.

Как получить значение из хранилища ключей? Есть ли что-то, чего мне не хватает?

1 Ответ

0 голосов
/ 11 марта 2019

Итак, ошибка была в том, как я добавлял новую политику доступа.Я выбирал основной Id и Авторизованное приложение.Оказывается, мне нужно только выбрать принципала, оставив Авторизованное приложение как «Ни один не выбран».

...