Azure 功能:访问存储帐户时出现 403 错误

Posted

技术标签:

【中文标题】Azure 功能:访问存储帐户时出现 403 错误【英文标题】:Azure functions : Getting 403 error while accessing the storage account 【发布时间】:2020-05-09 19:45:20 【问题描述】:

我一直在我的项目中使用基于 azure timer 的功能。 自从我开始使用该功能后,我收到了与 Azure 存储帐户禁止访问相关的错误 403。

我尝试在函数配置中添加 AzureWebJobsStorage Key 我尝试添加 Azure 存储帐户的允许 IP 范围的出站 IP 我尝试检查允许 Azure 托管服务进入存储帐户的选项。

但是,我的函数应用的特定计时器功能仍然出现错误。其他功能正常运行。

虽然,如果我在存储帐户防火墙和 VN 设置中允许所有网络,我的功能运行正常。

函数和存储帐户在同一区域。

我想以某种方式启用它,我不需要选择允许所有网络。可以做什么?

【问题讨论】:

【参考方案1】:

关于这个问题已经有一些答案了,你可以看看here和here。

简而言之,如果functionstorage account在同一个区域,则它们以内部方式进行通信,无需经过outboundIpAddresses

解决方法是在不同的区域创建它们。

【讨论】:

我的函数和存储帐户在同一个区域。它仍然无法正常工作。我已经在这两个答案中完成了解决方案。我也不能改变它们的区域。 :| @MaulikModi,它似乎只在它们位于不同区域时才有效。 但是如果它们属于同一个区域,相同的订阅,即使我把 webjobstorage 字符串放在了为什么它不起作用? @MaulikModi,对于您的关注,您最好提出用户反馈here。【参考方案2】:

如果其他人正在搜索这个...我遇到了类似的问题。我有一个函数应用程序,我创建了一个专用终结点和区域 VNet 集成,该 VNet 与一个存储帐户交互,该存储帐户也具有一个具有相同 VNet 的专用终结点。存储帐户的网络/防火墙设置仅允许来自 VNet 的连接(不允许外部流量)。存储帐户和函数应用位于同一区域。

尝试修复 #1(不理想):

我添加了code 以确定函数应用从哪个 IP 运行。这导致我在功能应用程序 --> 属性 --> Additional Outbound IP Addresses 下的门户中添加所有 IP。如果使用它,Terraform 会公开它。

尝试修复 #2(更好):

解决方法是确保您设置了正确的功能应用设置。

见:Microsoft documentation

Setting Suggested value Description
WEBSITE_CONTENTOVERVNET 1 Create this app setting. A value of 1 enables your function app to scale when your storage account is restricted to a virtual network.
WEBSITE_DNS_SERVER 168.63.129.16 Create this app setting. When your app integrates with a virtual network, it will use the same DNS server as the virtual network. Your function app needs this setting so it can work with Azure DNS private zones. It's required when you use private endpoints. This setting and WEBSITE_VNET_ROUTE_ALL will send all outbound calls from your app into your virtual network.
WEBSITE_VNET_ROUTE_ALL 1 Create this app setting. When your app integrates with a virtual network, it uses the same DNS server as the virtual network. Your function app needs this setting so it can work with Azure DNS private zones. It's required when you use private endpoints. This setting and WEBSITE_DNS_SERVER will send all outbound calls from your app into your virtual network.

注意:168.63.129.16 是 Azure DNS 的静态值。

设置完所有这些后,我的函数应用能够按预期通过 VNet 连接到存储帐户。

【讨论】:

以上是关于Azure 功能:访问存储帐户时出现 403 错误的主要内容,如果未能解决你的问题,请参考以下文章

创建 Azure 存储 Blob 容器时出现错误 403(已启用存储防火墙

Azure 函数无法访问 Azure Blob

为 Azure 存储帐户创建专用终结点连接时出现 ResourceNotFound 错误

尝试在 Web API 请求上检索 Azure Blob 时出现 403 错误

Azure 函数访问存储帐户

Azure 存储帐户 - 错误 403 被禁止