Azure 从密钥保管库中检索机密

Azure Retrieve Secret from key vault

我正在按照 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):

  • 环境证书
  • 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