VSTS使用来自Azure Key Vault的机密进行JSON变量替换

14
我正在使用Visual Studio Team Services进行Azure应用程序服务部署(ASP.NET Core 2.0 Web Api),想要替换appsettings.json中的一些值,因此阅读了https://learn.microsoft.com/en-us/vsts/build-release/tasks/transforms-variable-substitution#jsonvarsubs,但他们讨论了如何通过使用句点(.)连接名称来替换文件中嵌套级别的值。
问题是在Azure Key Vault中无法使用句点(.)。
有人知道如何使用Azure Key Vault中的Secrets替换appsettings.json文件中的嵌套级别变量吗?

1
我使用ARM模板设置了来自密钥保管库的应用程序设置。创建一个ARM模板,该模板可以提供Web应用程序并从密钥保管库读取值,然后使用这些值设置应用程序设置。您可以通过.parameters.json文件从密钥保管库中读取它们,或者使用嵌套模板。通过这种方式,您可以继续在应用程序设置中使用句点(.),并在密钥保管库中具有不同的键名。 - Clemens Reijnen
@ClemensReijnen 谢谢,你指导了我正确的方向,看看我的答案。 - Erwin
2个回答

10

我最终在Azure Key Vault中使用 'ConnectionStrings--Database' 作为秘钥。

然后在VSTS中添加了一个“变量组”(https://learn.microsoft.com/en-us/vsts/build-release/concepts/library/variable-groups),并将其链接到Azure Key Vault。

接着添加一个名为 ConnectionStrings.Database 的“过程变量”,其值为 '$(ConnectionStrings--Database)。

这样就可以用 Azure Key Vault 中的值替换您的“过程变量”的值,并使用“过程变量”的名称替换 appsettings.json 中的值。


应正确使用“--”替换“.”。 您还可以在文档“创建关键保管库机密并加载配置值(基本样本)”https://learn.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?tabs=aspnetcore2x#creating-key-vault-secrets-and-loading-configuration-values-basic-sample 中找到:“分层值(配置部分)使用“--”(两个破折号)作为分隔符。” - Marina Liu
@MarinaLiu-MSFT,当我使用带有--的Azure Vault密钥时,它没有替换appsettings.json中的值。在appsettings.json中,结构为{ "ConnectionStrings": { "Database": "databaseconnectionstring" } }。 - Erwin
Azure 应用服务部署任务的构建日志是什么? - Marina Liu
1
@MarinaLiu-MSFT,库在导入密钥保管库中的值时不会将“--”替换为“.”。这是一个重大问题...您需要手动“重新映射”每个管道中的过程变量中的所有键,以便具有正确的名称。否则,替换任务将不使用这些变量...目前从密钥保管库导入库是无法使用的。 - Jochen Kalmbach
2
感谢你发布这个,Erwin。这个问题的文档资料确实不足。 - Sam

0

[从评论移动到答案] 我使用了一个 ARM 模板来从密钥保管库中设置 appsettings。创建一个 ARM 模板,用于配置 Web 应用程序并从密钥保管库中读取值,并使用这些值来设置 appsettings。您可以通过 .parameters.json 文件从密钥保管库中读取它们,也可以使用嵌套模板。通过这种方式,您可以继续在 appsettings 中使用句点 (.) 并在密钥保管库中具有不同的键名。


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