簡體   English   中英

如何在共享服務器上托管的 ASP.Net Core 3.1 應用程序中存儲生產機密,如連接字符串

[英]How can I store production secrets like connection string in ASP.Net Core 3.1 application, hosted on a shared server

也許我的問題已經有了答案,但經過長時間的搜索,我還是找不到。

我的用例如下:我有一個 ASP.Net Core 3.1 Web 應用程序。 它使用 MSSQL 數據庫來存儲一些信息(僅供參考,我不存儲任何用戶的秘密,但這些信息對我來說仍然很有價值)。 它還使用電子郵件客戶端發送電子郵件。 我需要存儲數據庫的連接字符串以及電子郵件客戶端的憑據。 到目前為止,我將它們存儲在 appsettings.json 文件中,直到我意識到它們是以純文本形式存儲的,如果有人訪問它們,他/她將可以訪問我的數據庫和我的電子郵件客戶端。

現在我正在尋找一種更安全地存儲它們的方法。 在閱讀了 SO 中的問題后,我了解到存儲此類信息的建議方法是使用 Azure Key Vault。 我可以使用它並開始更新我的應用程序以使用它(我讀到我可以在 Azure 之外訪問它)。 但我開始意識到我需要將 Vault URL、ClientID 和 ClientSecret 值存儲在某處。

我該如何存儲它們。 在其中一個教程中,他們將它們放在 appsettings.json 文件中,但他們說這對於生產來說不是一個好方法,這是可以理解的。 建議的選項是將它們存儲在環境變量中。 但是我的問題來了 - 我在共享服務器上托管,我無法添加任何環境變量。 所以環境變量的使用對我來說不是一個選擇。

就我而言,當我無法添加任何環境變量時,存儲任何生產機密(如數據庫連接字符串)的最佳方法是什么? Azure Key Vault 仍然是一個有效且不錯的選擇嗎? 我應該考慮將它們保留在 appsetting.json 中並加密該文件嗎? 或者也許有另一種更好的方法?

只有我在開發應用程序,而且我不會將它存儲在任何公共 GitHub 存儲庫或任何東西中。

PS:這是我正在查看的教程的鏈接: Using Azure Key Vault From A Non-Azure App

謝謝。

編輯:這是一個教程,我發現它對如何在Azure 之外使用帶有證書的 Azure Key Vault很有

兩件事情:

1-您應該將機密存儲在 Azure Key Vault 中。 正如您已經注意到的,它將提供一個 URL,用於從 Key Vault 檢索機密。

2-只有允許的服務才能檢索機密。 您需要做的是為您的 Web 應用程序創建一個管理身份,然后授予從 Key Vault 到此托管身份的 GET / LIST 機密的訪問權限。

這是一步一步:

https://docs.microsoft.com/en-us/azure/key-vault/general/tutorial-net-create-vault-azure-web-app

(總結討論和決議作為答案)

在 Azure Keyvault 中存儲機密是推薦的方法。 但是,要獲得對 KeyVault 的授權訪問,您需要像 ClientId 和 Secret 或 Certificate 這樣的憑據。 所以問題是在哪里存儲這些秘密以訪問 KeyVault 的實際秘密! :)。 現在,如果您在 Azure 主機中,例如 Azure Web App 或 VM,我可以直接推薦托管標識,您不必在 App 中維護憑據,但既然您提到它是非 Azure 主機,我建議您去通過證書身份驗證,因為基於機密的身份驗證需要您將機密存儲在配置/環境變量中的某處,這不是一個好主意。 還要確保只有您的應用程序可以訪問主機中的該證書。

現在您與您的托管供應商協調配置證書並且一切正常,我希望它有所幫助。 謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM