使用Python操作Azure Blob Storage:创建容器正常但列取时遇授权错误
Azure Blob Storage 列取容器权限问题解决建议
问题场景
环境:Azure Blob Storage v12.13.1、Python 3.9.15
使用SAS URL创建BlobServiceClient后,可正常执行容器创建操作:
# Create the container blob_service_client = BlobServiceClient(account_url=sas_url) container_client = blob_service_client.create_container(container_name)
但执行容器列取操作时报错:
all_containers = blob_service_client.list_containers() for i,r in enumerate(all_containers): print(r)
错误信息:
HttpResponseError: This request is not authorized to perform this operation using this resource type. RequestId:a04349e6-b01e-0010-58ac-fa6495000000
原因分析
核心问题是你使用的SAS URL缺少容器列表权限:
- 创建容器操作需要
Create(c)权限,你的SAS已包含该权限,因此创建成功; - 列取所有容器操作需要
List(l)权限,当前SAS未授予该权限,触发授权错误。
解决步骤
1. 重新生成包含List权限的SAS URL
若通过Azure门户生成:
- 进入存储账户的「共享访问签名」页面;
- 在「权限」选项中勾选List权限(同时保留Create权限以维持原功能);
- 按需设置过期时间、资源类型等参数后,生成新的SAS URL。
若通过代码生成:
确保生成SAS令牌时,permission参数包含'l'和'c'权限,示例:
from azure.storage.blob import generate_account_sas, ResourceTypes, AccountSasPermissions sas_token = generate_account_sas( account_name="your_account_name", account_key="your_account_key", resource_types=ResourceTypes(service=True, container=True), permission=AccountSasPermissions(list=True, create=True), expiry="2024-12-31" ) sas_url = f"https://your_account_name.blob.core.windows.net/?{sas_token}"
2. 验证权限生效
用新生成的SAS URL替换原代码中的sas_url,重新执行列取容器的代码,确认操作正常。
内容的提问来源于stack exchange,提问作者Dirk Pitt
相关产品推荐
相关产品推荐

