【问题标题】:Assign Azure Key Vault Secret to Connection String for Devops Release Pipeline将 Azure Key Vault 机密分配给 Devops 发布管道的连接字符串
【发布时间】:2020-03-02 16:31:34
【问题描述】:

在 appsettings.json 中创建连接字符串的常用方法是:

{    
  "ConnectionStrings": {
    "DefaultConnection": "Server=(local); Database=MyProperty; Trusted_Connection=True;"
  }
}

我想在 DevOps 发布管道中用我的 QA 数据库替换连接字符串值。

如果我在 Azure Devops 中声明一个发布管道变量,我可以使用名称 ConnectionStrings.DefaultConnection,为其设置一个值,它会将值作为发布的一部分注入 appsettings,如下所示:

但是,如果不是上述,我想使用 Azure Key Vault 并创建一个 Key Vault 机密,我只能将机密名称创建为 DefaultConnection,因为机密名称中不允许使用句点,因此连接字符串不会在发布期间被秘密值替换。 我假设如果我可以创建一个秘密作为 ConnectionStrings.DefaultConnection 它会起作用,但我们不允许添加特殊字符。

即使我添加了变量组,它也会采用不能接受特殊字符的秘密名称,如下所示:

请问有什么方法可以实现吗?

【问题讨论】:

  • 您是否考虑过尽可能使用托管标识(例如,您的数据库是否托管在 Azure 中),而不是在应用程序设置中以纯文本形式放置机密?
  • 是的,这是我根据我的问题尝试使用 Azure Key Vault 实现的目标,以便从保管库中检索值
  • 这不是托管身份。有关使用 Azure SQL Server 的示例,请参阅 docs.microsoft.com/en-us/azure/app-service/…。许多服务支持分配一个比共享凭据更容易和更安全的身份管理(即使是秘密的)。
  • 酷,感谢您的信息!

标签: azure connection-string devops azure-pipelines-release-pipeline azure-keyvault


【解决方案1】:

密钥名称与应用设置/连接字符串之间没有直接关系。如果需要,您可以将您的秘密命名为“鳄梨”。您需要做的是仅在设置真正的应用程序设置/连接字符串时定义正确的名称。

这是一个示例:

更多信息:Azure DevOps Variable Group not applying in Azure Function Configuration

编辑:不,您的秘密不能以相同的模式命名(“:”或“_”来分隔单词)

【讨论】:

  • 感谢您的回复。请看我的编辑。这表明,如果我按照建议在变量组中使用 Key Vault 机密,我不能拥有 ConnectionStrings.DefaultConnection 的机密名称,然后根据您的建议映射到 -ConnectionStrings:DefaultConnection $(ConnectionStrings.DefaultConnection)
  • 不,您的秘密不能以相同的模式命名(“:”或“_”来分隔单词)
  • @ThiagoCustodio 嗨,很抱歉打扰你,但我正处于时间紧缩状态,我正在尝试做类似的事情。我有一个密钥库秘密连接字符串,我希望它在构建时替换。但是,我正在使用 .net 核心构建,我没有看到 appSettings 的表单输入,任何帮助将不胜感激!
  • @ThiagoCustodio Nvm 我不确定如何在尝试更新应用服务应用程序设置的 KeyVaultSecret 错误中正确格式化连接字符串。数据:{"ConnectionStrings:test:":"Server=tcp:test-dev.database.windows.net,1433;Initial_Catalog=TestQA;Persist_Security_Info=False;User","":"ID=admin;Password=TestDev! @#;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection_Timeout=30;"} 2020-07-10T20:43:58.3282901Z ##[error]Error: 无法更新应用服务'test-api-dev'应用程序设置。错误:BadRequest - 参数名称不能为空。 (代码:400)
【解决方案2】:

我们想从 Azure 密钥保管库访问的任何机密说“connString”都可以使用约定 $(connString) 作为管道中的变量进行访问。

要从 Azure 管道中的 Azure 密钥保管库访问机密,有两种方法-

  1. 在管道中 - 使用任务“Azure key Vault”来获取特定的秘密或逗号分隔的秘密列表,或者您也可以使用“秘密过滤器”中的通配符来获取所有秘密。然后使用上述约定,即 $(),在下游任务中使用获取的秘密

  2. 创建基于密钥保管库的变量组 - 变量组可以链接到 Azure 密钥保管库,您可以选择要在管道中读取的特定机密。您可以将一个变量组与多个管道链接。

在任何一种情况下,您都需要对 Azure 密钥库拥有足够的权限,您可以在 Azure 门户的“访问策略”边栏选项卡中定义该权限

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-25
    • 2019-08-11
    • 2020-08-27
    • 2020-04-30
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 2020-12-08
    相关资源
    最近更新 更多