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

使用Python SDK获取Azure Key Vault机密时DefaultAzureCredential告警如何消除

问题原因说明

这些告警不是错误,也不是多订阅直接导致的,是DefaultAzureCredential的默认认证链逻辑导致的:它会按顺序尝试环境凭证、托管身份凭证、共享缓存凭证、CLI凭证等多种认证方式,每一种尝试失败都会输出对应的日志,直到找到可用的认证方式为止,你的代码能正常运行就是最后匹配到了可用的凭证(比如你本地已经用az login登录过的Azure CLI凭证)。其中SharedTokenCacheCredential的报错是因为本地缓存里存了多个Azure账号,无法自动选择,和多订阅属于关联问题。

解决方法

1. 消除告警(无多余失败日志)

直接关闭你用不到的凭证类型,从源头砍掉失败日志,两种方案可选:

方案A:明确指定实际使用的凭证(最推荐,无多余逻辑)

比如本地开发用Azure CLI认证,就直接用AzureCliCredential,不会尝试其他无关凭证:

import os
from azure.keyvault.secrets import SecretClient
from azure.identity import AzureCliCredential

keyvault_url = f'https://<Keyvaultname>.vault.azure.net/'
KeyVaultName = "<Keyvaultname>"
# 直接指定用CLI凭证,无多余尝试,自然无失败日志
credential = AzureCliCredential()
client = SecretClient(vault_url=keyvault_url, credential=credential)

print(" done.")
print(f"Retrieving your secret from {KeyVaultName}.")
retrieved_secret = client.get_secret("test")
print(f"Your secret is '{retrieved_secret.value}'.")

如果是部署到Azure服务用托管身份认证,就直接用ManagedIdentityCredential,同理不会产生多余日志。

方案B:保留DefaultAzureCredential,关闭不需要的凭证类型

如果需要保留DefaultAzureCredential的多环境适配能力,就把你肯定不用的凭证类型禁用:

credential = DefaultAzureCredential(
    # 按需禁用不需要的凭证类型
    exclude_environment_credential=True,
    exclude_managed_identity_credential=True,
    exclude_imds_credential=True,
    exclude_shared_token_cache_credential=True # 直接禁用共享缓存,避免多账号报错
)

2. 配置为仅针对单个租户/订阅生效

指定租户ID即可固定认证范围,只会对该租户下的资源生效,自然只能访问该租户下对应订阅的Key Vault,如果有多账号冲突可以额外指定用户名:

# 替换为你要使用的Azure租户ID,可在Azure门户的Azure AD页面查询
TENANT_ID = "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# 如果需要指定具体账号,补充账号邮箱参数
USERNAME = "your-email@example.com"

# 用DefaultAzureCredential的配置示例
credential = DefaultAzureCredential(
    exclude_environment_credential=True,
    exclude_managed_identity_credential=True,
    exclude_imds_credential=True,
    tenant_id=TENANT_ID,
    username=USERNAME
)

# 用AzureCliCredential的配置示例
credential = AzureCliCredential(tenant_id=TENANT_ID)

可选:直接屏蔽日志输出

如果不想修改凭证逻辑,也可以直接调整日志级别,屏蔽azure.identity的info级日志:

import logging
# 日志级别调整为WARNING以上,就不会输出info级的失败提示
logging.getLogger("azure.identity").setLevel(logging.WARNING)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:36:04