You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Python消费计划函数无法连接带防火墙的存储容器

解决Azure Python Function(消费计划)连接带防火墙的存储容器失败问题

问题分析

你的代码连接未配置防火墙的存储容器正常,但连接带防火墙的容器失败,核心原因是消费计划的Function没有固定出站IP,无法直接添加到存储账户的防火墙允许列表中。

解决方案

方案1:虚拟网络集成(推荐)

  • 给消费计划的Function开启虚拟网络集成,将Function接入指定虚拟网络
  • 在存储账户的防火墙设置中,允许该虚拟网络的访问
  • 注意:消费计划的虚拟网络集成需使用区域虚拟网络,且Function与存储账户必须处于同一区域

方案2:托管标识认证

  • 给Function分配系统分配或用户分配的托管标识
  • 在存储账户的IAM权限设置中,为该托管标识添加存储Blob数据读取者(或匹配需求的对应权限)角色
  • 修改代码,用托管标识替代密钥认证:
    from azure.identity import DefaultAzureCredential
    from azure.storage.blob import BlobClient
    
    credential = DefaultAzureCredential()
    blob = BlobClient(
        account_url=f"https://{StorageContName}.blob.core.windows.net",
        container_name=ContName,
        blob_name=f"mdhubinput/{filename}.csv",
        credential=credential
    )
    stream = blob.download_blob()
    
  • 这种方式无需配置防火墙IP,托管标识的请求会被存储账户直接信任

方案3:添加出站IP前缀(不推荐)

  • 消费计划的Function出站IP是动态的,但可获取对应区域的出站IP前缀
  • 在存储账户防火墙中添加这些前缀,但前缀数量多且微软可能更新,维护成本较高

代码修正提示

你的代码中container_name拼接了路径(ContName+"/"+"mdhubinput"),容器名不能包含斜杠,mdhubinput属于虚拟目录,正确写法是将虚拟目录并入blob_name:

blob = BlobClient(
    account_url=f"https://{StorageContName}.blob.core.windows.net",
    container_name=ContName,
    blob_name=f"mdhubinput/{filename}.csv",
    credential=storagecred
)

这个错误可能也会导致访问失败,建议先修正再排查防火墙配置

内容的提问来源于stack exchange,提问作者Anshul Dubey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 17:11:59