[英]What is the recommended solution for user secrets storage in ASP.NET core in non-Azure production environment?
[英].NET Core secrets on a production server when not hosting on Azure
我一直在嘗試了解 .NET Core 如何處理敏感信息,並且我正在努力研究如何在未托管在 Azure 上的生產環境中進行部署。
據我了解,我可以在本地開發環境中使用“秘密存儲”來存儲敏感信息,但這僅適用於開發環境。
如果我想在生產環境中訪問秘密變量,Azure Key Vault 似乎是推薦的方法? 但是,從我正在閱讀的內容來看,除非我也在 Azure 上托管,否則我無法訪問這些秘密。
在我的情況下,我們已經與第 3 方托管公司建立了托管,所以我想知道當不在 Azure 上托管時,是否有可能以某種方式仍然使用 Azure 的 Key Vault。 做不到這一點,有什么替代方案?
謝謝
在我的情況下,我們已經與第 3 方托管公司建立了托管,所以我想知道當不在 Azure 上托管時,是否有可能以某種方式仍然使用 Azure 的 Key Vault。 做不到這一點,有什么替代方案?
您仍然可以完全使用 On Premise 替代方案來安全地托管您的秘密,而無需將它們放入設置文件中。
您首先需要了解的是如何將設置加載到 ASP.Net Core 應用程序中。 在編寫此答案時,這是在Program.cs
文件上調用CreateDefaultBuilder
時用於加載配置的順序:
CreateDefaultBuilder
按以下順序為應用程序提供默認配置:
ChainedConfigurationProvider
:將現有的IConfiguration
添加為源。 在默認配置情況下,添加主機配置並將其設置為應用配置的第一個來源。
appsettings.json
使用 JSON 配置提供程序。
appsettings.Environment.json
使用 JSON 配置提供程序。 例如,appsettings.Production.json
和 appsettings.Development.json。應用程序在開發環境中運行時的應用程序機密。
使用環境變量配置提供程序的環境變量。
使用命令行配置提供程序的命令行 arguments。
在您的情況下,您需要查看的步驟是第 5 步。 在Windows中,環境變量的配置方式有兩種:
因此,在您的情況下,您需要執行以下步驟:
您需要創建一個特定的用戶帳戶來運行您的應用程序。
它只能是本地用戶帳戶。
使用新創建的用戶帳戶連接到服務器,設置環境變量並確保它將保留在該用戶的 scope 中(這是下面 PowerShell 命令中的第三個參數的目的)。 例如,要設置連接字符串,您將運行如下內容:
[Environment]::SetEnvironmentVariable("ConnectionStrings:MySuperDatabse", "my super database connection string", "User")
您需要配置 IIS 應用程序池以使用該新帳戶來運行應用程序。 因此,您需要 go 到專用於您的應用程序的應用程序池的高級設置,並設置新帳戶,如下所示:
最后一個想法是再次配置 IIS 應用程序池以加載用戶配置文件。 在某些 IIS 配置中,默認設置為false
。 您需要將其設置為true
,以便在加載用戶配置文件時,還將加載該特定用戶的環境變量。 可以在專用於 ASP.Net Core 應用程序的應用程序池的高級設置中進行配置,如下所示:
它已經完成了。 您將能夠訪問運行 ASP.Net Core 應用程序的用戶帳戶的機密,而無需修改代碼庫中的任何內容,但只能在該用戶范圍內的環境變量上的配置以及在 IIS 上完成的配置,除了用戶帳戶創建。 所有剩余的步驟都可以毫無困難地自動集成到您的 CD 管道中。
由於機密設置為創建帳戶的環境變量,因此請確保沒有多少人知道其密碼(威脅該帳戶為管理員帳戶)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.