【问题标题】:Keeping asp.net core config out of your source and your pipelines将 asp.net 核心配置排除在源代码和管道之外
【发布时间】:2019-11-07 23:09:13
【问题描述】:

我正在处理一个 asp.net 核心项目,我正在尝试弄清楚如何让我的源代码和管道 100% 保密。

我有一个运行 azure 代理的 VM 和一个用于构建和发布的 azure dev ops 管道。 如果我删除 VM 上的站点,发布管道将自动为我重新创建它并部署最新版本。

超级酷。

现在我阅读了配置 .Net 核心应用程序的最佳实践并找到了这篇文章:https://www.humankode.com/asp-net-core/asp-net-core-configuration-best-practices-for-keeping-secrets-out-of-source-control

因此,在代码中保密是个坏主意,这是完全合理的。 但是,如果我将相同的安全主体应用于 Yaml,那么我当然也不应该在我的管道中放置秘密。 但是我需要管道能够从头开始重新创建站点,并且它应该可以正常工作。不知何故,该站点需要知道它的默认 sql 连接在哪里,或者它需要有一个 azure 应用配置服务的密钥。我不应该在每次发布后都登录虚拟机并手动创建 appsettings.json!

因此,无论网站需要操作什么,都需要包含在管道中,因此需要一些工件,或者包含在代码中。

我已经用谷歌搜索了好几天,但我似乎找不到任何关于如何完全自动化的信息。 我考虑过创建一个从实际 VM 注册表读取的自定义配置提供程序,但这也感觉不对。 我基本上需要一个不在站点本身托管的配置选项。所以我在虚拟机上设置了一次,再也没有。

【问题讨论】:

标签: iis .net-core configuration azure-devops azure-pipelines-release-pipeline


【解决方案1】:

Lex Li 在 cmets 中列出的方法是 Microsoft 推荐的在管道中保护“秘密”的方法。

在我看来,Ben Smith 的答案同样好,但可能稍微不那么安全。

我在我们的组织中使用这种方法。我们所有的发布管道都会根据它们部署到的环境使用适当的设置进行最终配置转换。

即数据库连接在开发、测试和 UAT 以及生产部署阶段进行转换。

我将管道变量中的相关秘密保存为受保护的秘密。我这样做有两个原因:

  1. 只有选定数量的受信任人员可以访问发布管道定义。
  2. 即使有人确实有权访问这些定义 - 您也看不到安全变量。即使您在变量选项卡上“取消挂锁” - 您也看不到设置是什么。

然后,我们的实际机密将存​​储在我们的企业机密保险库中。

使用 Azure Key Vault 绝对是一个好方法。但是,我们已经有一个集中的地方来存放我们的东西;我不希望它出现在 3 个位置。

如果我不将变量组作为流水线流程的一部分包括在内,那就太失职了。与构建/发布变量的概念相同 - 不同之处在于您现在可以在一处共享它们。

当然,这些都是意见。这只是这样做的一种方法;我觉得这是安全性和灵活性的一个很好的平衡。

【讨论】:

    【解决方案2】:

    除了问题 cmets 中的建议外,您还可以将秘密存储在管道“变量”部分中。

    您可以在此处添加变量,然后通过选择“将此值保密”将其标记为机密。一旦你保存了一个秘密,它的值就会被混淆,即你可以使用它,但你不能再在 Azure Devops 中看到它的原始值(如果你想重新访问变量来检查它,这无疑是相当令人沮丧的!) .

    然后,您可以使用以下语法在管道 YAML 中引用秘密变量:

    $(variable-name)
    

    因此,这种方法可以确保 Azure Devops 中的机密安全,直到需要由管道 YAML 脚本解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      相关资源
      最近更新 更多