问题描述
在使用Azure Functions和WebJobs时,想知道将连接字符串作为Key Vault中的Secrets是否比直接放入应用程序设置中(并使用ConfigurationManager.ConnectionStrings引用)有任何好处。Azure Key Vault Secrets主要用于虚拟机等,而不是Azure Functions和WebJobs吗?
用户认为这样做只是在开发和运行时增加了额外的步骤(更新Key Vault中的Secret和Application Settings中的Secret Identifier),而唯一的好处是Application Settings中的Secret是一个标识符而不是实际的Secret。用户在这里看不到安全性的好处,而只有劣势。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
根据Azure Key Vault的一般用途,以下是我认为使用Key Vault的好处:
– Secrets集中存储,具有授权、审计等选项。
– Azure可以根据计时器定期更新Secrets,因此如果连接字符串落入错误的手中,它只在一天(或一周等)内有效。
– 如果Secrets在多个应用程序之间共享,只需在一个地方更新(虽然不是最大的好处,但仍然很好)。
方案2
使用Azure App Configuration来存储所有应用程序设置,然后在实际的应用服务/函数/ WebJob中存储与之相关的连接字符串。
以下是一个示例代码片段,展示了如何在启动时从Azure App Configuration中读取配置:
var appConfigEndpoint = Environment.GetEnvironmentVariable("AppConfigEndpoint");
var appConfigLabel = Environment.GetEnvironmentVariable("AppConfigLabel");
if (!string.IsNullOrEmpty(appConfigEndpoint))
{
config.AddAzureAppConfiguration(options =>
{
options.Connect(appConfigEndpoint);
options.Use(keyFilter: "*", labelFilter: appConfigLabel);
});
}
else
{
config.AddJsonFile("appsettings.test.json", optional: false);
}
在上面的示例中,我们首先从环境变量中获取Azure App Configuration的连接信息。然后,使用AddAzureAppConfiguration
方法将Azure App Configuration与应用程序的配置绑定。这样,我们就可以在应用程序中使用Azure App Configuration中的配置。
请注意,Azure App Configuration主要用于存储配置而不是Secrets。如果连接字符串是一个Secret而不是配置,那么使用Azure Key Vault存储Secrets可能更合适。