首页 > 解决方案 > 将 asp.net 核心配置排除在源代码和管道之外

问题描述

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

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

超酷。

现在我阅读了配置 .Net 核心应用程序的最佳实践,并找到了这篇文章:https ://www.humankode.com/asp-net-core/asp-net-core-configuration-best-practices-for-保守秘密,不受源代码控制

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

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

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

标签: iis.net-coreconfigurationazure-devopsazure-pipelines-release-pipeline

解决方案


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

在此处输入图像描述

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

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

$(variable-name)

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


推荐阅读