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

Azure Databricks通过Key Vault访问Blob Storage遇权限拒绝问题求助

解决Azure Databricks访问Key Vault的权限拒绝问题

问题概述

在Azure Databricks Notebook(Python)中通过Azure Key Vault获取Blob Storage凭证时,触发权限拒绝错误:

(Forbidden) The user, group or application 'appid=-" ;iss=https://sts.windows.net//' does not have secrets get permission on key vault 'Key;location=eastus'.
Code: Forbidden
Message: The user, group or application 'appid=
;oid=*****;iss=https://sts.windows.net/
***/' does not have secrets get permission on key vault '****Key;location=eastus'.
Inner error: {
"code": "AccessDenied"
}

已在Databricks中配置Secret Scope,访问策略截图如下:
访问策略截图

使用的Python代码:

from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient
import pandas as pd
import io
import pyspark.sql
from datetime import datetime, timedelta

# Key Vault配置
key_vault_name = '***key'
secret_name = '******'

credential = DefaultAzureCredential()
secret_client = SecretClient(vault_url=f"https://{key_vault_name}.vault.azure.net/", credential=credential)

# 获取Blob Storage凭证
storage_account_name = secret_client.get_secret('storage-account-name').value
storage_account_access_key = secret_client.get_secret('storage-account-access-key').value
container_name = '****'
refined_container_name = '****'
connection_string = secret_client.get_secret(secret_name).value

print('storage_account_name = ',storage_account_name)
print('storage_account_access_key = ',storage_account_access_key)
print('connection_string = ', connection_string)

解决步骤

1. 为错误中的身份配置Key Vault访问权限

错误信息中的appid/oid是当前访问Key Vault的身份,需为其添加**机密读取(Get)**权限:

  • 登录Azure门户,进入目标Key Vault
  • 进入「访问策略」→「添加访问策略」
  • 在「机密权限」中勾选「Get」(按需添加其他必要权限)
  • 在「选择主体」中搜索错误里的appid或oid对应的身份(可能是Databricks工作区服务主体或当前用户)
  • 保存配置

2. 验证Databricks Secret Scope配置

若使用的是Azure Key Vault-backed Secret Scope:

  • 在Databricks工作区进入「管理控制台」→「Secret Scopes」
  • 确认Scope关联的Key Vault名称、资源ID正确
  • 检查Scope的权限设置,确保执行Notebook的身份有访问该Scope的权限

3. 改用Databricks内置方式获取凭证(推荐)

无需直接调用Key Vault SDK,通过dbutils直接读取Secret Scope中的凭证,简化权限管理:

# 替换为你的Secret Scope名称
scope_name = "your-secret-scope"

storage_account_name = dbutils.secrets.get(scope=scope_name, key="storage-account-name")
storage_account_access_key = dbutils.secrets.get(scope=scope_name, key="storage-account-access-key")
connection_string = dbutils.secrets.get(scope=scope_name, key=secret_name)

4. 等待权限同步并验证

修改访问策略后,等待1-2分钟让Azure权限同步,重新运行Notebook确认问题是否解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:22:05