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

新Databricks集群遇CredentialUnavailableError,需执行az login?

解决新集群运行命令时的CredentialUnavailableError问题

核心结论

不需要在本地Azure CLI执行az login,旧集群正常运行说明脚本逻辑无问题,故障根源是新集群缺少访问Azure资源(如Key Vault)的身份验证配置。

报错堆栈

/databricks/python/lib/python3.8/site-packages/azure/keyvault/secrets/_shared/challenge_auth_policy.py in _handle_challenge(self, request, challenge)
    135             # azure-identity credentials require an AADv2 scope but the challenge may specify an AADv1 resource
    136             scope = challenge.get_scope() or challenge.get_resource() + "/.default"
--> 137             self._token = self._credential.get_token(scope)
    138 
    139         # ignore mypy's warning because although self._token is Optional, get_token raises when it fails to get a token

/databricks/python/lib/python3.8/site-packages/azure/identity/_internal/decorators.py in wrapper(*args, **kwargs)
     25         [0;32mdef wrapper(*args, **kwargs):
     26             try:
--> 27                 token = fn(*args, **kwargs)
     28                 _LOGGER.info("%s succeeded", qualified_name)
     29                 return token

/databricks/python/lib/python3.8/site-packages/azure/identity/_credentials/azure_cli.py in get_token(self, *scopes, **kwargs)
     56         output, error = _run_command(COMMAND_LINE.format(resource))
     57         if error:
--> 58             raise error
     59 
     60         token = parse_token(output)

CredentialUnavailableError: Please run 'az login' to set up an account

解决方案

1. 配置集群托管身份(推荐)

旧集群大概率已启用托管身份并获得资源访问权限,给新集群做相同配置:

  • 登录Azure Portal,找到目标Databricks集群
  • 进入高级选项 > 身份,启用“托管身份”
  • 前往对应的Key Vault,在访问策略中添加该托管身份,授予所需权限(如“秘密读取”)
  • 脚本无需修改,DefaultAzureCredential会自动优先使用托管身份获取令牌

2. 使用服务主体身份验证

若无法使用托管身份,可通过服务主体实现:

  • 创建Azure AD服务主体,记录客户端ID、客户端密钥、租户ID
  • 在Databricks集群的环境变量中添加以下配置:
    AZURE_CLIENT_ID=<你的客户端ID>
    AZURE_CLIENT_SECRET=<你的客户端密钥>
    AZURE_TENANT_ID=<你的租户ID>
    
  • 脚本中的DefaultAzureCredential会自动读取这些变量完成身份验证

3. 检查Credential代码实现

确保脚本使用DefaultAzureCredential而非AzureCliCredential:

from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient

# 正确用法:自动优先使用托管身份/服务主体,而非依赖Azure CLI
credential = DefaultAzureCredential()
secret_client = SecretClient(vault_url="https://your-vault.vault.azure.net/", credential=credential)

如果脚本显式指定了AzureCliCredential,会强制依赖集群环境中的Azure CLI登录状态,这在Databricks集群中通常不可行,建议替换为DefaultAzureCredential

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:13:33