禁用存储公网访问时Azure存储密钥轮换私网部署问题
存储账户禁用公网访问场景下落地Azure存储密钥自动轮换架构方案
问题描述
- 落地目标:在所属租户内部署Azure存储密钥自动轮换架构,核心逻辑为:将存储账户访问密钥存入Key Vault并配置过期时间,密钥临近过期时,Event Grid筛选对应事件发送至Function App,由Function App完成密钥轮换后将新密钥重新存入Key Vault。
- 合规约束:租户策略强制要求所有存储账户不得启用公网访问,包括承载Function App日志、触发器的关联存储账户。
- 已完成配置:
- 将Function App关联存储账户的网络设置从
Enabled from all networks调整为Enabled from selected virtual networks and IP addresses - 创建独立VNet,为存储账户创建私有终结点
- 将Function App托管在Premium应用服务计划中,完成VNet集成配置
- 在存储账户网络配置的资源实例规则中添加
Microsoft.EventGrid/systemTopics - 参考Azure Functions私有存储配置最佳实践,为Function App添加以下应用参数:
WEBSITE_VNET_ROUTE_ALL=1 WEBSITE_CONTENTOVERVNET=1 WEBSITE_DNS_SERVER=168.63.129.16
- 将Function App关联存储账户的网络设置从
- 故障现象:配置完成后Event Grid无法将事件成功投递至Function App,初步判断为Event Grid系统主题无法访问Function App端点,无法定位通信链路故障根因,需要在所有存储账户不启用公网访问的前提下完成架构落地。
根因说明
Event Grid到Azure Functions的事件投递默认走公网HTTPS通道,直接调用Function App的公网HTTP触发端点,不会自动路由到VNet内部链路。
已完成的配置仅覆盖了「Function App访问关联存储账户」「Event Grid访问存储账户」两条链路,未对「Event Grid投递事件到Function App」这条核心链路做私网适配,导致Event Grid发出的公网投递请求被网络规则拦截,投递失败。
落地步骤
按以下顺序配置即可满足全链路私网访问要求,无需开放任何存储账户公网权限:
- 锁定Function App公网访问入口
- 进入Function App网络配置的访问限制页,将默认公网访问规则设置为拒绝,不要添加任何公网IP或服务标签允许规则。
- 为Event Grid系统主题配置私有终结点
- 进入对应Event Grid系统主题的网络配置页,新建私有终结点,关联到已创建的VNet,选择与Function App集成子网互通的子网,目标子资源选择
topic。配置完成后系统主题的事件投递会自动优先走VNet私网通道,不再走公网。
- 进入对应Event Grid系统主题的网络配置页,新建私有终结点,关联到已创建的VNet,选择与Function App集成子网互通的子网,目标子资源选择
- 为Function App配置私有终结点
- 进入Function App的私有终结点配置页,新建私有终结点关联到同VNet下,目标子资源选择
sites。配置完成后VNet内部资源(包括同VNet下配置了私有终结点的Event Grid系统主题)可直接通过私网访问Function触发端点,无需经过公网。
- 进入Function App的私有终结点配置页,新建私有终结点关联到同VNet下,目标子资源选择
- 补全全链路服务的网络规则
- 为Key Vault配置同VNet下的私有终结点,禁用公网访问,将Function App集成的子网加入Key Vault、存储账户的网络允许列表。
- 在存储账户、Key Vault的防火墙配置页,勾选「允许受信任的Microsoft服务访问此账户」,兜底覆盖跨服务控制面操作的访问需求,避免因私有终结点路由不全导致的操作失败。
- 校验DNS解析与链路连通性
- 在VNet中绑定Azure专用DNS区域,确认
privatelink.azurewebsites.net、privatelink.eventgrid.azure.net、privatelink.vaultcore.azure.net、privatelink.blob.core.windows.net几个专用DNS区域已正确关联对应私有终结点的A记录,避免私网域名解析失败。 - 手动触发一次密钥轮换测试,在Event Grid系统主题的监控页查看投递成功指标,同时核对Function App执行日志,确认事件正常触发、密钥轮换成功、新密钥正常写入Key Vault即可。
- 在VNet中绑定Azure专用DNS区域,确认
注意:不要通过在Function访问限制中添加Event Grid出站IP段的方式绕过私网要求,该方案依赖公网链路,不符合零公网访问的合规要求,且Event Grid出站IP会动态调整,存在长期运行稳定性风险。
内容的提问来源于stack exchange,提问作者AzUser1
相关产品推荐
相关产品推荐

