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

向Azure Blob Storage上传Blob时出现Authentication Error问题求助

解决Azure Blob Storage上传认证失败问题

针对你遇到的上传时AuthenticationFailed错误,结合代码和错误信息,整理以下排查方向和解决建议:

可能的原因及排查步骤

1. 账户密钥/SAS令牌有效性问题

  • 确认账户密钥是否正确:前往Azure门户存储账户的「访问密钥」页面,重新复制完整的key1或key2,避免复制时遗漏字符或带入空格、换行。
  • 若使用SAS令牌:确保生成时勾选了**写入(w)**权限,过期时间晚于当前时间,IP范围包含你的当前公网IP,资源类型覆盖Blob(b)或容器(c)。

2. IP防火墙配置不匹配

  • 访问https://api.ipify.org/获取当前设备的公网IP,对比Azure存储账户防火墙中配置的IP地址,确保两者完全一致。如果使用VPN、代理网络,出口IP会变化,导致请求被拦截(这类拦截有时会伪装成签名错误)。

3. Azure Storage SDK版本问题

旧版本SDK可能存在签名计算逻辑的bug,建议升级到最新稳定版:

pip install --upgrade azure-storage-blob

4. 认证方式不一致

你的下载函数未传入账户密钥,实际使用的是默认Azure AD凭证(比如本地Azure CLI登录的身份),而上传函数使用账户密钥,两者权限可能不匹配。可以统一认证方式,修改上传函数使用默认凭证:

from azure.identity import DefaultAzureCredential

def reuploadBlob(container_name, account_name, local_file_path):
    account_url = f"https://{account_name}.blob.core.windows.net"
    # 使用默认Azure AD凭证,与下载函数认证方式一致
    blob_service_client = BlobServiceClient(account_url, credential=DefaultAzureCredential())
    container_client = blob_service_client.get_container_client(container=container_name)
    blob_name = os.path.basename(local_file_path)

    with open(local_file_path, "rb") as data:
        blob_client = container_client.get_blob_client(blob_name)
        blob_client.upload_blob(data, overwrite=True)

    return f"File {local_file_path} uploaded to Azure Blob Storage."

5. 请求头被篡改

错误信息中服务器显示的签名字符串不完整(截断至application/octet-stream),可能是本地代理或安全软件篡改了请求头。尝试关闭代理、防火墙软件后重新测试。

额外验证步骤

  • 用Azure CLI测试上传:执行以下命令验证账户权限,排除代码逻辑问题:
az storage blob upload --account-name <你的账户名> --account-key <你的账户密钥> --container-name <容器名> --name <Blob名> --file <本地文件路径>

如果CLI上传成功,说明问题出在代码或SDK环境;如果CLI也失败,确认账户权限、防火墙配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:57:03