Как использовать DefaultAzureCredential как в локальной, так и в размещенной среде (Azure и локально) для доступа к Azure Key Vault?
У нас есть веб-API (.NET 5), который получает доступ к некоторым секретам из Azure KeyVault.
На локальном компьютере для разработки, поскольку я являюсь владельцем нового созданного хранилища, моя электронная почта имеет право доступа к хранилищу ключей.
Поэтому я выбрал свою учетную запись, хотя VS -> Инструменты> Параметры -> Аутентификация службы Azure -> Выбор учетной записи -> " myemail@.com "
У меня есть приведенный ниже код для извлечения секретов из Keyvault и доступа через конфигурацию, как мы получаем доступ к значению appsettings.
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
var appSettings = config.Build();
var credentialOptions = new DefaultAzureCredentialOptions();
var credential = new DefaultAzureCredential(credentialOptions);
config.AddAzureKeyVault(new Uri(appSettings["Url:KeyVault"]), credential);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
Мы получаем доступ к секретному значению, такому как _configuration["secret"] на уровне сервиса и контроллера.
Мои запросы
1. Если я перенесу развертывание этого кода на локальный сервер, как он будет работать (dev env — локальный сервер)?
2. Если я разверну этот веб-API в Azure, как использовать приложение идентификации AD для доступа к хранилищу ключей без каких-либо изменений кода. У нас зарегистрировано приложение AD, которое имеет доступ на чтение к этому конкретному хранилищу.
Я хочу, чтобы код без проблем работал на локальном сервере и в Azure.
1 ответ
DefaultAzureCredential — это новый и унифицированный способ подключения и извлечения токенов из Azure Active Directory, который можно использовать вместе с ресурсами, которым они нужны.
DefaultAzureCredential получает токен в зависимости от среды, в которой работает приложение.
Следующие типы учетных данных, если они включены, будут опробованы по порядку: EnvironmentCredential, ManagedIdentityCredential, SharedTokenCacheCredential, InteractiveBrowserCredential
- ЕСЛИ я перенесу развертывание этого кода на локальный сервер, как он будет работать (dev env — локальный сервер)
При выполнении этого на компьютере разработки (локальный сервер) необходимо сначала настроить среду, задав для переменных AZURE_CLIENT_ID, AZURE_TENANT_ID и AZURE_CLIENT_SECRET соответствующие значения для вашего субъекта-службы (приложение, зарегистрированное в Azure AD).
- Если я разверну это веб-приложение в Azure, как использовать приложение идентификации AD для доступа к хранилищу ключей без каких-либо изменений кода. У нас есть зарегистрированное приложение AD, которое имеет доступ для чтения к этому хранилищу.
Вы можете включить назначенное системой управляемое удостоверение для своего веб-приложения. Добавьте политику доступа для этого удостоверения в Azure Key Vault, чтобы прочитать секреты. Теперь, не внося никаких изменений в ваш код, ваше веб-приложение сможет читать секреты хранилища ключей.