Azure KeyVault 配置提供程序在更改时重新加载值
Posted
技术标签:
【中文标题】Azure KeyVault 配置提供程序在更改时重新加载值【英文标题】:Azure KeyVault Configuration Provider reload values on change 【发布时间】:2019-11-10 20:43:12 【问题描述】:我正在使用 Azure Key Vault 配置提供程序在应用启动时读取一些机密。然而,秘密会在一天中不断轮换,我希望能够在轮换发生时重新加载新值。
我说的类似于reloadOnChange
api
.ConfigureAppConfiguration((context, config) =>
config.AddJsonFile("appsettings.json", reloadOnChange: true);
)
这可能吗?
这是一个 webapi 项目,因此在实践中,如果更好/更可行的话,我可以手动重新加载每个 HttpRequest 的值。
【问题讨论】:
目前,每当你需要它时,我都会从 kv 那里得到秘密。有一个新的Azure App Config
功能(预览中)。它很有前途,会做你想做的事:docs.microsoft.com/en-us/azure/azure-app-configuration/overview
您还可以创建一个端点来重新加载配置:IConfigurationRoot.Reload()
并在您更新 KV 中的机密时调用它。
@Thomas Azure App Config 服务与 KV 不同,它不是用于秘密存储。
@juunas 感谢您的评论,我误读了文档中的这一行:应用程序配置补充了用于存储应用程序机密的 Azure Key Vault。我以为它会提供一个统一的商店,也可以从 kv 中获取秘密。无论如何谢谢:-)
【参考方案1】:
使用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 机密将可用并根据您的重新加载间隔刷新。
【讨论】:
【参考方案2】:秘密被缓存直到IConfigurationRoot.Reload()
被调用。在执行重新加载之前,应用程序不会尊重密钥保管库中过期、禁用和更新的机密。
Configuration.Reload();
更多详情可以参考这个article。
【讨论】:
嘿,谢谢。我知道这个api。我希望以某种方式自动完成此操作。或者至少能够根据 Http 请求将其自动化。你知道有没有办法做到这一点? 当您使用它并在浏览器中重新加载时,它会自动执行每个 Http 请求。【参考方案3】:与 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)
);
和a link to a source code 看看它实际上是如何工作的:)
【讨论】:
感谢您提供源代码。我很好奇正在使用什么 API 调用。以上是关于Azure KeyVault 配置提供程序在更改时重新加载值的主要内容,如果未能解决你的问题,请参考以下文章
使用 KeyVault 和 Azure PowerShell 证书身份验证创建 Azure AD 应用程序
自动重新生成反映在 Azure Key Vault Secret 中的密钥
Azure 函数和 Azure KeyVault 通过服务端点进行通信