混淆云中的应用程序设置文件,但允许本地应用程序开发
Obfulscating the app settings files in-cloud but allowing the local app development
我计划将本地存储的项目迁移到 Azure DevOps 以实现无缝的 CI/DI 体验。
Azure 密钥保管库 将用于保护存储在 .Net 应用程序的应用程序配置文件中的秘密。因此,解决方案的配置文件将不包含任何敏感信息。json
和 xml
配置文件中的所有变量都替换为 azure devops
中的 pipelines/release
。 .
但现在问题来了 - 如果代码存储库中所有地方的所有秘密都被混淆了 - 那么你如何在 Visual Studio 中本地 构建和测试解决方案?
我想出了几个理论上的解决方案;
- 将整个
appsettings.Development.json
个文件(或这些文件中的特定机密)存储在 Azure Key Vault
中。然后制作 VSIX
VS 扩展,它将能够连接到 Vault 并在代码检出后检索特定解决方案的设置文件(或秘密值)。
这种方法的缺点是 .Net 框架(与 .net 核心不同)Web 应用程序正在使用 Web.Config
文件,因此我无法使用单独的 web.development.config
文件调试。 XML 据我所知,在构建过程中未应用转换.. p.s。我计划将所有 appsettings.X.json
、Web.X.config
添加到 git-ignore.
- 创建一个
MsBuild
post-构建任务,它将连接到 Vault 并在应用程序启动之前替换变量(在 bin
文件夹中)。
缺点是在团队中的其他开发人员之间分配 MbBuild 任务并不容易(与 vsix 扩展不同)。但是 - 它只允许混淆 bin
文件夹中的值,留下代码版本控制的配置文件不受影响。此任务必须在 azure devops
中跳过,自然。
是否有任何通用的安全方法可以在开发人员之间共享开发配置文件而不将它们暴露在云端?在这一点上,我觉得第二种选择是可行的,所以我想听听专家的任何建议。
实际上,您可以将 Web.Config
用于具有 SlowCheetah
项目的多环境 - https://github.com/Microsoft/slow-cheetah/。我在我的一个项目中成功地使用了它。
正题 - 我已经为您的问题考虑了多种解决方案:
为本地环境使用模拟器
对于 Azure 中的各种服务,您可以使用模拟器(存储帐户、Cosmos DB、服务总线),这允许您的开发人员在本地开发而不会暴露秘密。缺点 - 很难与其他人共享环境。
使用托管开发环境
在您的存储库中存储开发设置并不总是一个坏主意。如果您可以确保开发环境中不存储任何敏感数据,则可以始终坚持轻松存储的开发秘密。您还可以实施临时开发环境,但这需要一种机制来轮换秘密或始终创建具有相同秘密的环境。
引入配置提供程序
您不必依赖从本地文件加载的设置。对于所有机密,您可以在代码中引入一个配置提供程序,它将连接到 Key Vault 并根据您的环境设置获取机密。无论如何,这都会很棘手,因为您必须以某种方式“证明自己的身份”才能连接到 Key Vault 并读取机密。
根据您的需要,我选择 1 > 3 > 2。
您是否查看过 Azure 应用程序配置? https://docs.microsoft.com/en-us/azure/azure-app-configuration/overview
这样您就可以将您的代码与机密分开,并且只需要一个连接字符串即可连接到您在云端管理的应用配置。
我会使用 Azure Key Vault 进行开发和生产。但是为开发人员和生产创建一个单独的密钥保管库实例。那么你作为开发者需要一个凭证来获取所有本地开发配置,就像在生产中你可以通过相同的方式获取配置。
我计划将本地存储的项目迁移到 Azure DevOps 以实现无缝的 CI/DI 体验。
Azure 密钥保管库 将用于保护存储在 .Net 应用程序的应用程序配置文件中的秘密。因此,解决方案的配置文件将不包含任何敏感信息。json
和 xml
配置文件中的所有变量都替换为 azure devops
中的 pipelines/release
。 .
但现在问题来了 - 如果代码存储库中所有地方的所有秘密都被混淆了 - 那么你如何在 Visual Studio 中本地 构建和测试解决方案?
我想出了几个理论上的解决方案;
- 将整个
appsettings.Development.json
个文件(或这些文件中的特定机密)存储在Azure Key Vault
中。然后制作VSIX
VS 扩展,它将能够连接到 Vault 并在代码检出后检索特定解决方案的设置文件(或秘密值)。
这种方法的缺点是 .Net 框架(与 .net 核心不同)Web 应用程序正在使用 Web.Config
文件,因此我无法使用单独的 web.development.config
文件调试。 XML 据我所知,在构建过程中未应用转换.. p.s。我计划将所有 appsettings.X.json
、Web.X.config
添加到 git-ignore.
- 创建一个
MsBuild
post-构建任务,它将连接到 Vault 并在应用程序启动之前替换变量(在bin
文件夹中)。
缺点是在团队中的其他开发人员之间分配 MbBuild 任务并不容易(与 vsix 扩展不同)。但是 - 它只允许混淆 bin
文件夹中的值,留下代码版本控制的配置文件不受影响。此任务必须在 azure devops
中跳过,自然。
是否有任何通用的安全方法可以在开发人员之间共享开发配置文件而不将它们暴露在云端?在这一点上,我觉得第二种选择是可行的,所以我想听听专家的任何建议。
实际上,您可以将 Web.Config
用于具有 SlowCheetah
项目的多环境 - https://github.com/Microsoft/slow-cheetah/。我在我的一个项目中成功地使用了它。
正题 - 我已经为您的问题考虑了多种解决方案:
为本地环境使用模拟器
对于 Azure 中的各种服务,您可以使用模拟器(存储帐户、Cosmos DB、服务总线),这允许您的开发人员在本地开发而不会暴露秘密。缺点 - 很难与其他人共享环境。
使用托管开发环境
在您的存储库中存储开发设置并不总是一个坏主意。如果您可以确保开发环境中不存储任何敏感数据,则可以始终坚持轻松存储的开发秘密。您还可以实施临时开发环境,但这需要一种机制来轮换秘密或始终创建具有相同秘密的环境。
引入配置提供程序
您不必依赖从本地文件加载的设置。对于所有机密,您可以在代码中引入一个配置提供程序,它将连接到 Key Vault 并根据您的环境设置获取机密。无论如何,这都会很棘手,因为您必须以某种方式“证明自己的身份”才能连接到 Key Vault 并读取机密。
根据您的需要,我选择 1 > 3 > 2。
您是否查看过 Azure 应用程序配置? https://docs.microsoft.com/en-us/azure/azure-app-configuration/overview
这样您就可以将您的代码与机密分开,并且只需要一个连接字符串即可连接到您在云端管理的应用配置。
我会使用 Azure Key Vault 进行开发和生产。但是为开发人员和生产创建一个单独的密钥保管库实例。那么你作为开发者需要一个凭证来获取所有本地开发配置,就像在生产中你可以通过相同的方式获取配置。