新Databricks集群遇CredentialUnavailableError,需执行az login?
核心结论
不需要在本地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
相关产品推荐
相关产品推荐

