【发布时间】: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