Azure KeyVault 配置提供程序在更改时重新加载值

8
我使用Azure Key Vault Configuration Provider在应用程序启动时读取一些密钥。 但是,这些秘密在一天中不断轮换,我希望能够在发生此轮换时重新加载新值。
我的意思类似于reloadOnChange API。
.ConfigureAppConfiguration((context, config) =>
{
    config.AddJsonFile("appsettings.json", reloadOnChange: true);
})

这真的可能吗?

这是一个WebAPI项目,因此在实践中,如果这样做更好/更可行,我可以手动重新加载每个HttpRequest的值。


目前,每次需要秘钥时,我都会从kv中获取。有一个新的“Azure App Config”功能(预览版)。它很有前途,可以实现你想要的功能:https://learn.microsoft.com/en-us/azure/azure-app-configuration/overview - Thomas
1
您还可以创建一个端点来重新加载配置:IConfigurationRoot.Reload(),并在更新KV中的密钥时随时调用它。 - Thomas
@Thomas,Azure App Config服务与KV不同,它不是用于保密存储的。 - juunas
1
@juunas 感谢您的评论,我误读了文档中的这一行:应用程序配置是 Azure Key Vault 的补充,用于存储应用程序机密。我以为它会提供一个统一的存储库,也可以从 kv 获取机密。无论如何,还是非常感谢 :-) - Thomas
3个回答

17

使用 Microsoft.Extensions.Configuration.AzureKeyVault (v3),您可以执行以下操作:

configurationBuilder.AddAzureKeyVault(new AzureKeyVaultConfigurationOptions
{
    Vault = configuration["KeyVaultUrl"],
    ReloadInterval = TimeSpan.FromMinutes(10),
    Client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(
       new AzureServiceTokenProvider().KeyVaultTokenCallback))
});
现在当你在服务中请求 IConfiguration 时,基于你的重载间隔,KeyVault秘密将会可用并更新。

7
与Bobby Koteski提出的相似,但使用更新的Azure.Extensions.AspNetCore.Configuration.Secrets软件包,因为Microsoft.Extensions.Configuration.AzureKeyVault已不再推荐使用。 ReloadInterval是等待在轮询Azure Key Vault进行更改尝试之间的时间。
configurationBuilder.AddAzureKeyVault(
    new SecretClient(
        new Uri(configuration["KeyVaultBaseUrl"]),
        new ManagedIdentityCredential(configuration["UserAssignedManagedIdentityClientId"])
    ),
    new AzureKeyVaultConfigurationOptions()
    {
        ReloadInterval = TimeSpan.FromSeconds(1000)
    }
);

请看源代码,了解它是如何工作的 :)


谢谢您包含源代码。我很好奇使用了哪些API调用。 - Tiamo Idzenga

3

直到调用IConfigurationRoot.Reload(),密钥仍将被缓存。过期、禁用和更新的密钥在重新加载之前将不会被应用程序识别。

Configuration.Reload();

如需更多细节,您可以参考此文章


嘿,谢谢。我知道这个API。我希望能以某种方式自动完成这个任务。或者至少能够通过HTTP请求自动化它。你知道有没有办法做到这一点吗? - reggaemahn
当您使用此功能并在浏览器中重新加载时,它将自动执行每个HTTP请求。 - Joey Cai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接