Databricks访问Azure Blob存储报Authorization授权失败错误
问题原因
- 核心错误是将SAS共享访问签名令牌误作为存储账户访问密钥传入了
account_key参数。AppendBlobService的account_key参数仅接受存储账户生成的512位Base64格式主/辅助访问密钥,你传入的字符串以?开头、包含sv/sig/se等SAS标准字段,属于典型的SAS令牌,传入后SDK会按照共享密钥认证规则生成签名,和服务端预期的认证格式完全不匹配,直接触发签名校验失败。 - 你传入的SAS令牌本身已过期:令牌标注的到期时间为2022-06-14,早已超出有效期限,即使传参方式正确也无法通过认证。
- 老版本
azure-storage-blobSDK的AppendBlobService本身不支持通过account_key参数传入SAS令牌完成认证,没有对应兼容逻辑。
修复方案
- 方案一(推荐,适配你当前代码逻辑):使用存储账户正式访问密钥初始化客户端。到Azure门户对应存储账户的「访问密钥」页面,复制完整的主密钥/辅助密钥,替换
account_key位置的现有SAS串即可,注意不要保留?前缀或其他多余字符。
修正后的初始化代码示例:from azure.storage.blob import AppendBlobService # 替换为存储账户实际访问密钥,为无特殊前缀的Base64字符串 abs = AppendBlobService( account_name='azdevstoreforlogs', account_key='<替换为你的存储账户访问密钥>' ) - 方案二:如果必须使用SAS令牌认证,首先重新生成有效期覆盖当前操作时间的新SAS令牌,不要使用已过期的旧令牌;其次不要通过
account_key参数传SAS,要么将SAS拼入存储连接字符串初始化客户端,要么升级到新版Azure Blob Storage SDK后使用专门的SAS凭证类完成认证。 - 额外代码修正:你代码中
re.match(filter, blob.name)直接使用了Python内置关键字filter作为匹配规则变量,会触发运行时报错,需提前自定义好正则匹配规则后再传入re.match。
内容的提问来源于stack exchange,提问作者ZZZSharePoint
相关产品推荐
相关产品推荐

