C# 不在Azure上托管时,生产服务器上的.NET核心机密
我一直在努力了解.NET Core如何处理敏感信息,我也在努力研究如何部署到一个不在Azure上托管的生产环境中 据我所知,我可以在本地开发环境中使用“秘密存储”来存储敏感信息,但这只适用于开发环境 如果我想访问生产环境中的秘密变量,Azure Key Vault似乎是推荐的方法?然而,从我阅读的内容来看,除非我也在Azure上托管,否则我无法访问这些秘密 在我的情况下,我们已经与一家第三方托管公司建立了托管,所以我想知道,如果不在Azure上托管,是否还可以以某种方式使用Azure的密钥库。如果做不到这一点,还有什么选择 谢谢 在我的情况下,我们已经与第三方建立了主机 托管公司,所以我想知道是否有可能 不在Azure上托管时使用Azure的密钥库。如果不行,怎么办 还有其他选择吗 您仍然可以使用完全本地的替代方案来安全地托管您的机密,而无需将它们放入设置文件中 您首先需要知道的是如何将设置加载到ASP.Net核心应用程序中。在编写此答案时,这是在C# 不在Azure上托管时,生产服务器上的.NET核心机密,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,我一直在努力了解.NET Core如何处理敏感信息,我也在努力研究如何部署到一个不在Azure上托管的生产环境中 据我所知,我可以在本地开发环境中使用“秘密存储”来存储敏感信息,但这只适用于开发环境 如果我想访问生产环境中的秘密变量,Azure Key Vault似乎是推荐的方法?然而,从我阅读的内容来看,除非我也在Azure上托管,否则我无法访问这些秘密 在我的情况下,我们已经与一家第三方托管公司建立了托管,所以我想知道,如果不在Azure上托管,是否还可以以某种方式使用Azure的密钥库。如
Program.cs
文件上调用CreateDefaultBuilder
时用于加载配置的顺序:
CreateDefaultBuilder
为中的应用程序提供默认配置
顺序如下:
ChainedConfigurationProvider
:添加现有的IConfiguration
作为源。在默认配置情况下,添加主机配置
并将其设置为应用程序配置的第一个源
appsettings.json
使用json配置提供程序
appsettings.Environment.json
使用json配置提供程序。例如,appsettings.Production.json
和
appsettings.Development.json
- 全局:机器环境变量。因此,这意味着所有用户都可以看到环境变量
- 每个用户:用户只能看到属于他们的环境变量。用户在使用其登录名和密码以该用户身份连接之前,无法查看其他环境变量
[Environment]::SetEnvironmentVariable("ConnectionStrings:MySuperDatabse", "my super database connection string", "User")
3.配置运行ASP.Net核心应用程序的进程
您需要配置IIS应用程序池以使用该新帐户运行应用程序。因此,您需要转到专用于您的应用程序的应用程序池的高级设置,并设置新帐户,如下所示:
[Environment]::SetEnvironmentVariable("ConnectionStrings:MySuperDatabse", "my super database connection string", "User")
4.配置进程以加载用户配置文件
最后一个想法是再次配置IIS应用程序池以加载用户配置文件。在某些IIS配置中,它默认设置为false
。您需要将其设置为true
,以便在加载用户配置文件时,还将加载该特定用户的环境变量。可以在ASP.Net核心应用程序专用的应用程序池的高级设置中配置,如下所示:
[Environment]::SetEnvironmentVariable("ConnectionStrings:MySuperDatabse", "my super database connection string", "User")
就这样!您将能够访问运行ASP.Net核心应用程序的用户帐户的机密,而无需对代码库中的任何内容进行修改,但只能访问作用域为该用户的环境变量上的配置和在IIS上完成的配置。除了创建用户帐户之外,其余所有步骤都可以自动进入CD管道,不会有任何困难
由于机密设置为所创建帐户的环境变量,请确保没有多少人知道其密码(该帐户作为管理员帐户受到威胁)。是的,您可以使用keyvault。如果您有一种安全的方法来转换敏感值,那么您也可以使用配置文件,就像在Devops管道中一样,您也可以用于on-prem安装。