我遵循Microsoft文档使用python sdk从密钥库检索秘密。
微软提供的代码和解释导致以下代码:
import os
import cmd
from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential
keyvault_name = f'https://<Keyvaultname>.vault.azure.net/'
KeyVaultName = "<Keyvaultname>"
credential = DefaultAzureCredential()
client = SecretClient(vault_url=keyvault_name, 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}'.")
根据我的理解,DefaultCredentials
是在az login
中配置的,这很好,我的代码运行得很好,但我一直在终端中得到这个消息。
done.
Retrieving your secret from <KeyvaultName>.
EnvironmentCredential.get_token failed: EnvironmentCredential authentication unavailable. Environment variables are not fully configured.
ImdsCredential.get_token failed: ManagedIdentityCredential authentication unavailable, no managed identity endpoint found.
ManagedIdentityCredential.get_token failed: ManagedIdentityCredential authentication unavailable, no managed identity endpoint found.
SharedTokenCacheCredential.get_token failed: SharedTokenCacheCredential authentication unavailable. Multiple accounts
were found in the cache. Use username and tenant id to disambiguate.
我认为这个warnings
是由于我在我的azure门户中有多个订阅的事实。
我想知道,我如何才能摆脱这些,并设置凭据,只有一个订阅?
非常感谢您对我的帮助和解释。
一般来说,我不会担心这个警告。当您使用DefaultAzureCredential
时,SDK按该顺序(Reference
)尝试以下凭据选项:
- EnvironmentCredential
- ManagedIdentityCredential
- SharedTokenCacheCredential
- VisualStudioCredential
- VisualStudioCodeCredential
- AzureCliCredential
- AzurePowerShellCredential
- InteractiveBrowserCredential
如果凭据选项失败,SDK将从一个凭据选项移动到另一个。警告消息只是SDK告诉您它尝试了哪些所有凭据选项的一种方式。
然而,如果你仍然想摆脱这个消息,有几个选项可供您使用:
- 排除您不希望SDK在使用
DefaultAzureCredential
时尝试的凭据选项。您可以通过构造函数中的exclude_xxx_credential
选项指定这些。例如,如果要排除EnvironmentCredential
,可以在DefaultAzureCredential
构造函数中指定exclude_environment_credential=True
。SDK将跳过那些凭据方法。关于所有的构造器选项,请参阅link
。 - 使用特定的凭证选项。例如,如果你总是想使用Azure CLI凭据,那么你可以使用
AzureCliCredential
而不是使用DefaultAzureCredential。