读取Azure默认凭据失败,请求协助排查解决
问题:Azure DefaultAzureCredential 凭据获取失败
错误信息
DefaultAzureCredential failed to retrieve a token from the included credentials. 04:54:12.161 lrr-data-service-perf-green-x Attempted credentials: EnvironmentCredential: EnvironmentCredential authentication unavailable. Environment variables are not fully configured. ManagedIdentityCredential: ManagedIdentityCredential authentication unavailable. The requested identity has not been assigned to this resource. SharedTokenCacheCredential: Shared token cache unavailable VisualStudioCodeCredential: Failed to get Azure user details from Visual Studio Code. AzureCliCredential: Azure CLI not found on path AzurePowerShellCredential: PowerShell is not installed
相关代码
数据库URL生成逻辑
def __prepare_postgre_db_url(cfg): postgres_server_resource_id = cfg["postgres_server_resource_id"] db = Vault.get_postgres_creds(postgres_server_resource_id) return ( f"postgresql://{db['username']}:{db['password']}@{db['hostname']}:5432/postgres" )
Vault凭据获取逻辑
__vault = DefaultAzureCredential() @staticmethod def get_postgres_creds(postgres_server_resource_id): client = SecretClient( vault_url=f"https://{postgres_server_resource_id}.vault.azure.net", credential=Vault.__vault)
解决方案
1. 本地开发快速验证
- 安装Azure CLI,执行
az login完成账号登录,AzureCliCredential会自动复用该登录会话。 - 或安装Azure PowerShell,执行
Connect-AzAccount登录,让AzurePowerShellCredential生效。
2. Azure部署环境(如App Service、VM)
- 给应用所在的Azure资源分配系统分配/用户分配托管标识。
- 在Azure Key Vault的访问策略中,添加该托管标识的「机密读取」权限。
3. 非Azure环境/CI/CD场景
- 设置以下环境变量:
AZURE_CLIENT_ID:服务主体的客户端IDAZURE_CLIENT_SECRET:服务主体的密钥AZURE_TENANT_ID:服务主体所属租户ID
- 确保该服务主体已被授予Key Vault的机密读取权限。
4. Visual Studio Code开发场景
- 安装Azure Account扩展,打开命令面板(Ctrl+Shift+P)执行
Azure: Sign In,登录到目标Azure租户。
代码优化建议
- 开启日志便于排查凭据获取细节:
from azure.identity import DefaultAzureCredential import logging logging.basicConfig(level=logging.DEBUG) __vault = DefaultAzureCredential(logging_enable=True)
- 本地开发时可指定仅使用特定凭据(如AzureCliCredential),缩小排查范围:
from azure.identity import AzureCliCredential __vault = AzureCliCredential()
内容的提问来源于stack exchange,提问作者Mammu yedukondalu
相关产品推荐
相关产品推荐

