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

使用Python SDK访问Azure容器遇AuthorizationPermissionMismatch错误

解决Azure Storage Blob列表操作的AuthorizationPermissionMismatch错误

问题概述

作为Azure Storage容器所有者,通过Azure GUI可正常查看容器内容,但使用Python SDK结合DefaultAzureCredential调用list_blob_names()时,返回403错误,错误码为AuthorizationPermissionMismatch,且SDK已确认通过AzureCliCredential获取到身份。

解决步骤

1. 确认Azure CLI登录账户与订阅正确性

日志显示脚本使用AzureCliCredential认证,但可能CLI登录账户或订阅与目标存储账户不匹配:

  • 在PowerShell中执行:az account show,核对输出的订阅ID、账户名称是否与存储账户所在订阅一致。
  • 若不一致,执行az login重新登录正确账户,或用az account set --subscription <目标订阅ID>切换到正确订阅。

2. 检查存储账户RBAC权限配置

即使是容器所有者,也需确保账户拥有Blob列表操作的具体RBAC权限:

  • 登录Azure Portal,进入目标存储账户,选择访问控制(IAM) → 角色分配。
  • 搜索你的账户,确认是否分配了Storage Blob Data Reader或Storage Blob Data Contributor这类包含Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read权限的角色。
  • 若无对应权限,点击添加 → 添加角色分配,选择Storage Blob Data Reader角色,指定你的账户为成员后保存。

3. 排查存储账户防火墙/虚拟网络限制

若存储账户设置了网络访问限制,本地机器IP不在允许列表会导致权限拒绝:

  • 进入存储账户的网络设置,查看“允许访问的网络”配置:
    • 若为“选定的网络”,检查“防火墙”下的允许IP列表是否包含你的本地公网IP;
    • 可临时切换为“所有网络”测试脚本是否正常运行(测试完成后恢复原配置)。

4. 显式指定AzureCliCredential认证

避免DefaultAzureCredential尝试其他认证方式的干扰,修改代码直接使用AzureCliCredential:

from azure.identity import AzureCliCredential
from azure.storage.blob import ContainerClient

if __name__ == "__main__":
    client = ContainerClient(
        credential=AzureCliCredential(),
        account_url="https://satestblobaccess.blob.core.windows.net",
        container_name="stcnt-test-blob-access"
    )

    blob_names = client.list_blob_names()
    print([b for b in blob_names])

执行前确保已通过az login登录正确账户,并切换到目标订阅。

5. 验证认证令牌的权限范围

检查Azure CLI获取的令牌是否包含Blob列表权限:

  • 执行命令获取令牌:az account get-access-token --resource https://storage.azure.com/ --query "accessToken" -o tsv
  • 使用本地JWT解码工具(如Python的pyjwt库)解码令牌,查看scp或roles声明中是否包含storage:BlobContainers.List或相关权限。

内容的提问来源于stack exchange,提问作者Ytsen de Boer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:55:16