【问题标题】:Best practices for web app communicates to azure resources? [closed]Web 应用程序与 Azure 资源通信的最佳实践? [关闭]
【发布时间】:2021-08-11 11:24:00
【问题描述】:

Net core 应用程序和我的应用程序与各种 Azure 资源进行通信,例如 Storage Account V2。我的应用程序部署到 azure app 服务中。我有多种方式让我的网络应用程序连接到存储帐户。其中第一种方法是使用如下连接字符串

   CloudStorageAccount storageAccount = CloudStorageAccount.Parse(_azureStorageClient.AzureStorageAccount03ConnectionString);

在上面的代码中,我传递了连接字符串。我可以从 azure key vault 获取连接字符串,并且可以避免在 appsettings.json 中对连接字符串进行硬编码。我可以理解这是安全的,但如果有人意外更改或重新生成存储帐户中的访问密钥,那么我的应用程序将无法运行。

我发现了另一种使用在 azure 门户中注册的应用并在存储帐户中提供 RBAC 的方法。

 TokenCredential credential = new ClientSecretCredential(
        _authenticationConfig.TenantId, clientId, _authenticationConfig.ClientSecret, new TokenCredentialOptions()); 

通过这种方式,我也可以避免使用连接字符串,并且可以根据角色访问存储帐户。但在这种情况下,我最终也会在代码/密钥库中管理客户端机密和客户端 ID。

我找到了使用托管身份的最后一个选项。到目前为止,我觉得这是更可靠的方式。代码和密钥库中没有秘密。这就是我的全部理解,我的结论是第三种方式更可靠,我正在尝试在整个应用程序中实现。所以我想知道我所有的理解都是正确的,我可以摆脱前两种方法并采用第三种方法,它没有任何问题吗?有人可以帮助我了解我的正确理解吗,或者如果我以错误的方式理解了这些事情,那么有人可以帮助我设计最佳实践吗?任何帮助将不胜感激。非常感谢

【问题讨论】:

    标签: azure asp.net-core azure-keyvault azure-data-lake azure-managed-identity


    【解决方案1】:

    请尽可能使用managed identities,因为它们允许您访问 azure 资源而不必暴露秘密。微软早期的blog post 声明:

    您的代码需要凭据来向云服务进行身份验证,但您希望尽可能限制这些凭据的可见性。理想情况下,它们永远不会出现在开发人员的工作站上或签入源代码控制。 Azure Key Vault 可以安全地存储凭据,因此它们不在你的代码中,但要检索它们,你需要对 Azure Key Vault 进行身份验证。要向 Key Vault 进行身份验证,您需要一个凭据!一个经典的引导问题。通过 Azure 和 Azure AD 的魔力,MSI 提供了一个“引导标识”,使开始工作变得更加简单。

    Here 是支持服务的概述。如您所见,大多数服务都支持托管身份。

    Here 是一个分步教程,向您展示如何使用托管身份连接到 Azure 存储。

    【讨论】:

      猜你喜欢
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      相关资源
      最近更新 更多