在 C# 应用程序中安全存储 Azure blob 存储访问密钥的正确方法

Correct way to securely store Azure blob storage access key in C# app

我正在构建一个 c# 应用程序 (WPF),它将日志文件上传到 azure blob 存储。我将 StorageConnectionString 存储在 App.config 文件中,如下所示:

<appSettings>
    <add key="StorageConnectionString" value="DefaultEndpointsProtocol=https;AccountName=<my account name>;AccountKey=<my account key>;EndpointSuffix=core.windows.net" />
</appSettings>

在我的代码中,我像这样检索 StorageConnectionString

string connectionString = ConfigurationManager.AppSettings.Get("StorageConnectionString");

到目前为止一切正常,但我担心 清晰可见 StorageConnectionStringApp.config 文件中。

如何确保我的应用程序无法通过逆向工程获得 StorageConnectionString

要在 C# 应用程序中安全地存储您的存储帐户访问密钥,您可以使用以下任一选项:

  1. 将存储帐户密钥存储为环境变量
  2. 对 blob 存储使用 Azure AD 身份验证而不是访问密钥

您的应用程序应该使用共享密钥。存储帐户密钥授予对您的存储帐户的完全访问权限。更好的方法是在您的应用程序中使用 Azure AD 使用共享访问签名。

可在此处找到完整的概述:

https://docs.microsoft.com/en-us/azure/storage/common/storage-sas-overview

虽然 Microsoft 建议将 Azure AD 与 SAS 一起使用以授权对 Azure 存储的请求。如果您必须使用共享密钥授权,请使用 Azure Key Vault 保护您的帐户密钥。您可以在运行时从密钥保管库中检索密钥,而不是将它们保存在您的应用程序中。有关 Azure Key Vault 的详细信息,请参阅 Azure Key Vault overview

我们所有的安全建议都可以在这里找到:

https://docs.microsoft.com/en-us/azure/storage/blobs/security-recommendations