【发布时间】:2021-11-08 07:24:50
【问题描述】:
我有一个分配有托管标识的应用服务,以简化与 Azure 资源的连接。我想使用 DataProtection,应用程序将 xml-keys 存储在 Azure 存储帐户(blob)中以在部署之间持久保存它们。
每当我启动应用程序时,我都会收到身份验证错误:
Microsoft.Azure.Storage.StorageException: This request is not authorized to perform this operation.
at Microsoft.Azure.Storage.Core.Executor.Executor.ExecuteAsync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext, CancellationToken token)
at Microsoft.Azure.Storage.Core.Executor.Executor.<>c__DisplayClass0_0`1.<ExecuteSync>b__0()
at Microsoft.Azure.Storage.Core.Util.CommonUtility.RunWithoutSynchronizationContext[T](Func`1 actionToRun)
我已为应用服务分配了多个不同的 RBAC 角色,但均未成功,包括:
存储数据所有者 存储数据贡献者 存储数据阅读器 所有者
存储帐户已连接到 VNET,并且未向 Internet 开放。应用服务未连接到同一个 VNET。
然后,我尝试在存储帐户网络部分中将应用服务的许多传出 IP 地址列入白名单,其中指出“添加 IP 范围以允许从 Internet 或您的本地网络进行访问。”
还激活了“允许受信任服务列表中的 Azure 服务访问此存储帐户”。
有什么想法缺少吗?仅当在应用程序服务中时才会发生这种情况,从我的调试本地主机我可以连接,所以似乎与天蓝色网络有关。
【问题讨论】:
-
如果您提供了用于获取 Azure 凭据的代码以及此问题是在本地发生、在云中发生还是在两者中发生,这将有所帮助。还有您尝试针对存储帐户分配应用服务托管标识的角色列表。
-
如果应用服务连接到一个 VNET,而存储帐户连接到另一个 VNET,您希望如何从应用访问存储?
-
对于同一区域的存储和webapps,ip白名单将不起作用,因为连接是通过azure内部网络而不是公共网络完成的
-
您分配了哪个角色?根据现有的错误信息,如果不是网络的原因,很可能是角色的角色有问题。请更改为所有者或贡献者,然后重试。
-
我已经更新了更多细节!如果我在存储帐户中将我的 IP 列入白名单,它可以在本地调试中进行连接。但在生产/登台中它不会连接。
标签: azure asp.net-core .net-core azure-web-app-service azure-blob-storage