向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
相关产品推荐
相关产品推荐

