如何用private endpoints和VNet集成实现Azure Function访问存储账户
跨区域Azure Function经VNet Integration访问启用防火墙的存储账户(私有端点模式)配置指南
按这个步骤配,能省至少4天无意义的排查时间,别套VM场景加公网IP的老思路,App Service Plan的路由逻辑和VM完全不一样。
核心认知先对齐
- 不要尝试把Function的出站公网IP加到存储防火墙规则里,跨区域VNet Integration场景下,发往存储的流量根本不会走公网出站通道,加公网IP完全无效,这是和VM场景最本质的区别。
- 不要用旧版需要虚拟网关的VNet Integration,必须用标准SKU的区域虚拟网络集成,才支持跨全局VNet对等的流量转发。
分步配置流程
1. 存储账户侧私有端点预配置
- 给US West区域的存储账户创建私有端点,部署到存储所在VNet的独立子网,提前关闭该子网的私有端点网络策略(默认开启,会导致私有端点路由不通)。
- 按需添加对应子资源的私有端点:要访问Blob就选blob子资源,要访问队列/表/文件就对应选queue/table/file子资源,别只配blob导致其他服务访问不通,关联的私有DNS区域统一用
privatelink.<存储服务类型>.core.windows.net格式。 - 临时放开本地客户端IP到存储防火墙,先在本地测通私有端点本身的连通性,确认私有IP分配正常再锁防火墙。
2. Function侧VNet Integration配置
- 给North Central US区域的Function启用VNet Integration,关联到Function所在区域的独立子网,子网地址段别和存储侧VNet段冲突。
- 打开VNet Integration配置里的
Route All开关,必须全开,不然发往存储的流量会默认走公网,直接撞存储防火墙被拦。 - 给VNet Integration关联的子网配NSG出站规则,允许443端口出站到存储所在VNet的地址段,别开强制隧道把私有链路流量导去第三方NVA导致丢包。
3. 跨区域链路与DNS配置(90%的人卡在这里)
- 两个区域的VNet建立全局VNet对等,对等链路双向开启「允许虚拟网络访问」「允许转发流量」,不需要开网关传输选项。
- 把Function侧VNet的自定义DNS服务器改成能解析存储私有端点的地址:要么是存储侧VNet内部署的Azure DNS私有解析器入站IP,要么是自建的DNS转发器地址,绝对不能用默认的Azure公共DNS,不然会把存储域名解析到公网IP,根本走不到私有链路。
- 配置完DNS重启下Function,进Kudu控制台执行
nameresolver <你的存储账户名>.blob.core.windows.net,如果返回的是私有端点的10.x/172.x/192.x段内网IP,说明DNS配置正确;如果返回公网IP,回头查DNS配置,不用往下走。 - Kudu里执行
tcping <刚才解析到的存储私有IP> 443,如果能通,说明跨区域链路已经打通。
4. 存储防火墙收尾
- 把存储防火墙公网访问切到「选定网络」,不需要加任何公网IP规则,也不需要加跨区域VNet的防火墙规则:私有端点流量会绕过公网防火墙校验,只要链路通、DNS解析对,默认就能访问。
- 删掉之前临时加的本地客户端IP规则,锁死公网访问即可。
高频踩坑排错
- 配完所有规则等10分钟再测,VNet路由、私有端点、DNS配置的传播有延迟,刚配完不通就反复改配置只会越排越乱。
- Consumption/Elastic Premium版Function别尝试用服务端点连跨区域存储,服务端点不支持跨区域生效,必须走私有端点+全局对等的方案。
- 如果开启了Function的公网访问限制,别把VNet Integration的子网段拦了,会导致VNet通道本身断连。
内容的提问来源于stack exchange,提问作者bmukes
相关产品推荐
相关产品推荐

