#azure #azure-web-app-service #azure-keyvault
#azure #azure-web-app-service #azure-keyvault
Вопрос:
Я создал службу приложений, в которой запущен сервер идентификации контейнера. Этому контейнеру необходим сертификат, который я загружаю из хранилища ключей. Чтобы получить содержимое сертификата, я сделал следующее:
- Загрузите сертификат в хранилище ключей
- Доступ к содержимому осуществляется с помощью секретной конечной точки хранилища ключей (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)));
Но это тоже не работает.
Я включил управляемую идентификацию в службе приложений и добавил ее в Политики доступа в Хранилище ключей.
Как я могу получить значение из хранилища ключей? Есть ли что-то, чего я не хватает?
Комментарии:
1. Что означает «это не работает»? Вы получаете сообщение об ошибке?
2. Это означает, что служба приложений не обращается к хранилищу ключей для получения значения секрета, а просто возвращает значение настроек приложения (которое является ссылкой на секрет хранилища ключей). В любом случае, это была моя ошибка, я неправильно настроил политику доступа.
Ответ №1:
Итак, ошибка заключалась в том, как я добавлял новую политику доступа. Я выбирал основной идентификатор и авторизованное приложение. Оказывается, мне нужно только выбрать принципала, оставив Авторизованное приложение как «Не выбрано».