对于Azure Functions和WebJobs,将连接字符串作为密钥存储在Key Vault中,而不是直接将它们放置在应用程序设置中(并使用ConfigurationManager.ConnectionStrings进行引用),是否有任何好处?

Azure Key Vault Secrets是否主要用于VM等,而不是Azure Functions和WebJobs?

似乎在这两个开发中都增加了一个额外的步骤(更新Key Vault中的Secret和Secret Identifier)。应用程序设置)和运行时的额外步骤(从Key Vault进行的其他检索),唯一的好处是应用程序设置中的密码是标识符而不是实际密码。我看不到安全性的好处,但有损。

评论

如果在github上出现错误时提供公共数据库连接字符串,那就太酷了:)(如果真的需要原因的话)

我不知道怎么回事。我说的是在“应用程序设置”中有连接字符串,该字符串存储在云中,并且永远不会触及代码库。

只要在gui交互中一切都可以在云中完成,就转移到纯IaC,其中所有云配置都以代码形式完成,并且这种情况将有一天发生,这就是使用保管库的主要原因。如果您认为没有必要,请不要使用它。

是的,只是秘密标识符似乎和数据库连接字符串一样安全/不安全。您要么需要更改,要么都不需要更改。

嗯..并非如此,例如,在应用程序设置中引用的名为“ DB_Cx_String”的问题要比“ jdbc:// host:port / DBname”的问题少。

#1 楼

我看到的好处是使用Azure Key Vault的一般原因


秘密集中存储有授权,审核等选项。
Azure可以编写脚本以进行更新计时器上的机密-因此,如果连接字符串被不正确的人使用,它仅在一天(或一周,或任何其他时间)内有效。
如果机密在多个应用程序之间共享,则仅必须将其更新到一个位置(不是最大的好处,但仍然不错)


评论


在我看来,您是在说密钥库仅在多个应用服务器共享同一秘密时才有用。如果连接字符串由单个应用程序服务器使用,则密钥库没有任何优势。

–约翰·亨克尔(John Henckel)
18/12/13在19:34

#2 楼

我和您有相同的看法,在这种情况下使用Key Vault是没有意义的。

相反,我使用Azure应用程序配置https://docs.microsoft.com/zh-cn/azure / azure-app-configuration / overview,我只在其中存储所有应用程序设置。
和我一起存储在实际应用程序服务/ func / Web作业中的唯一字符串是用于访问Azure应用程序配置的连接字符串。

在我的启动环境中,配置设置为如果应用,则从..settings.json中读取,如果不存在(如果在Azure上运行,则不应该存在),我会寻找与Azure应用配置的连接字符串。

如果..找到settings.json,这意味着我在本地运行。

..settings.json如果不在gitignore文件中,则会被加密。

看起来像这样:

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);
            }


评论


我为时已晚,但是如果您仍然有相同的意见,则必须更改它。配置(您的参考资料)不是存储机密,而是存储配置。数据库连接字符串是一个秘密而不是配置。 KeyVault用于存储机密,Configuration用于将配置存储在集中存储中。我希望这是有道理的

–RAM
19/12/2在9:27



#3 楼

密钥库检索可能是性能问题。从密钥库读取需要几秒钟。 Azure SLA仅表示将花费不到5秒的99.9%的时间。它不能保证平均时间,但是根据我的经验和传闻,平均时间大约为2秒。

除非您的Web应用程序“始终处于运行状态”,否则如果空闲5-20分钟,它将被卸载。分钟。这意味着,除非您的流量很大,否则您的站点响应时间会很糟糕。

评论


在应用程序启动期间,您一次即可获取大多数应用程序机密。

– Miroslav Holec
19年1月29日在12:51

#4 楼

我们计划在下方使用

秘密-Azure Key-Vault


始终加密列的主密钥旋转
证书存储(可以轻松地编写一个.NET中的提供程序)
连接之类的敏感项目
字符串(隐藏其他资源信息),密码等。

配置-Azure应用配置(仍在预览中)


监视是一种发现服务的绝妙方法,特别是如果您
需要更新标志或值以用于运营用途。
无需重新启动容器或实例。