C# 不在Azure上托管时,生产服务器上的.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的密钥库。如

我一直在努力了解.NET Core如何处理敏感信息,我也在努力研究如何部署到一个不在Azure上托管的生产环境中

据我所知,我可以在本地开发环境中使用“秘密存储”来存储敏感信息,但这只适用于开发环境

如果我想访问生产环境中的秘密变量,Azure Key Vault似乎是推荐的方法?然而,从我阅读的内容来看,除非我也在Azure上托管,否则我无法访问这些秘密

在我的情况下,我们已经与一家第三方托管公司建立了托管,所以我想知道,如果不在Azure上托管,是否还可以以某种方式使用Azure的密钥库。如果做不到这一点,还有什么选择

谢谢

在我的情况下,我们已经与第三方建立了主机 托管公司,所以我想知道是否有可能 不在Azure上托管时使用Azure的密钥库。如果不行,怎么办 还有其他选择吗

您仍然可以使用完全本地的替代方案来安全地托管您的机密,而无需将它们放入设置文件中

您首先需要知道的是如何将设置加载到ASP.Net核心应用程序中。在编写此答案时,这是在
Program.cs
文件上调用
CreateDefaultBuilder
时用于加载配置的顺序:

CreateDefaultBuilder
为中的应用程序提供默认配置 顺序如下:

  • ChainedConfigurationProvider
    :添加现有的
    IConfiguration
    作为源。在默认配置情况下,添加主机配置 并将其设置为应用程序配置的第一个源

  • appsettings.json
    使用json配置提供程序

  • appsettings.Environment.json
    使用json配置提供程序。例如,
    appsettings.Production.json
    和 appsettings.Development.json

  • 应用程序在开发环境中运行时的应用程序机密

  • 使用环境变量配置提供程序的环境变量

  • 使用命令行配置提供程序的命令行参数

  • 在您的情况下,您需要查看的步骤是第5步。在Windows中,环境变量以两种方式配置:

    • 全局:机器环境变量。因此,这意味着所有用户都可以看到环境变量
    • 每个用户:用户只能看到属于他们的环境变量。用户在使用其登录名和密码以该用户身份连接之前,无法查看其他环境变量
    因此,在您的情况下,您需要遵循以下步骤:

    1.创建特定的用户帐户 您需要创建一个特定的用户帐户来运行应用程序

    它只能是本地用户帐户

    2.为该用户帐户创建环境变量 使用新创建的用户帐户连接到服务器,设置环境变量并确保它将保留在该用户的范围内(这是下面PowerShell命令中第三个参数的用途)。例如,要设置连接字符串,您将运行如下操作:

    [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安装。