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

使用dbutils获取密钥访问Azure Blob存储失败,如何解决?

解决dbutils.secrets获取SAS Token访问Azure Blob失败的问题

常见问题原因

  • SAS Token开头包含多余的?:密钥库中保存的Token如果带了?,拼接URL时会出现??,导致请求无效
  • Token包含隐藏字符(空格、换行):dbutils获取的密钥可能带有不经意添加的空白字符,破坏Token格式

解决方案1:修正Token格式后拼接URL

先对获取到的SAS Token做格式清理,再构建URL:

from azure.storage.blob import ContainerClient

storage_account_name ='storage_account_name'
storage_container_name = 'storage_container_name'
# 获取Token并清理空白字符
sas_token = dbutils.secrets.get(scope=secret_scope, key='some_key').strip()
# 移除开头的?(如果存在)
if sas_token.startswith('?'):
    sas_token = sas_token[1:]

account_url = f"https://{storage_account_name}.blob.core.windows.net/{storage_container_name}?{sas_token}"
container_client = ContainerClient.from_container_url(container_url=account_url)

blobs = container_client.list_blobs()
for blob in blobs:
    print(blob)

解决方案2:使用SDK的规范传参方式(更推荐)

避免手动拼接URL,直接将SAS Token作为credential传入ContainerClient,由SDK处理格式:

from azure.storage.blob import ContainerClient

storage_account_name ='storage_account_name'
storage_container_name = 'storage_container_name'
sas_token = dbutils.secrets.get(scope=secret_scope, key='some_key').strip()

# 仅传入存储账户基础URL,Token作为credential参数
account_url = f"https://{storage_account_name}.blob.core.windows.net"
container_client = ContainerClient(
    account_url=account_url,
    container_name=storage_container_name,
    credential=sas_token
)

blobs = container_client.list_blobs()
for blob in blobs:
    print(blob)

额外验证步骤

  1. 临时打印清理后的Token(仅排查用,生产环境不要保留):print(repr(sas_token)),确认没有多余字符
  2. 检查密钥库中保存的SAS Token是否和硬编码时的内容完全一致(去掉可能的首尾空格或换行)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 14:38:21