在 Azure Batch 中使用托管标识在批处理池中使用 Python 对 Key Vault 进行身份验证

Posted

技术标签:

【中文标题】在 Azure Batch 中使用托管标识在批处理池中使用 Python 对 Key Vault 进行身份验证【英文标题】:Using Managed Identity in Azure Batch to Authenticate with Key Vault using Python in a Batch Pool 【发布时间】:2021-01-05 22:32:13 【问题描述】:

我正在尝试使用系统分配的 Azure Batch 托管标识来访问 Azure Key Vault。我在网上找到了一些代码,但我不知道这是否可能或证书路由是唯一的可能性。我已为批处理帐户启用托管标识并将其添加到密钥库中。但是,当我尝试从批处理池中的 python sdk 获取托管标识时,它会失败并且我无法连接到密钥保管库。

我已经尝试过旧的azure-keyvault 包(版本 1.1.0)和更新的版本 4.0。

这是使用较旧的密钥保管库包,它会给出HTTPRequest 错误:

from azure.keyvault import KeyVaultClient
from msrestazure.azure_active_directory import MSIAuthentication

credentials = MSIAuthentication(resource='https://vault.azure.net')

kvclient = KeyVaultClient(credentials)
res = kvclient.get_secret("https://kv.vault.azure.net/", "secret", "").value

对于较新的 azure keyvault 包,我使用了这个:

import os
import cmd
from azure.keyvault.secrets import SecretClient
from azure.identity import ManagedIdentityCredential

keyVaultName = "kv"
KVUri = f"https://keyVaultName.vault.azure.net"

credential = DefaultAzureCredential()
client = SecretClient(vault_url=KVUri, credential=credential)

secretName = "secret"
retrieved_secret = client.get_secret(secretName)

但它找不到ManagedIdentityCredential。这是错误的一部分:

SharedTokenCacheCredential.get_token failed: Shared token cache unavailable
VisualStudioCodeCredential.get_token failed: Failed to get Azure user details from Visual Studio Code.
AzureCliCredential.get_token failed: Please run 'az login' to set up an account
DefaultAzureCredential failed to retrieve a token from the included credentials.
Attempted credentials:
    EnvironmentCredential: EnvironmentCredential authentication unavailable. Environment variables are not fully configured.
    ManagedIdentityCredential: ManagedIdentityCredential authentication unavailable. No identity has been assigned to this resource.
    SharedTokenCacheCredential: Shared token cache unavailable
    VisualStudioCodeCredential: Failed to get Azure user details from Visual Studio Code.
    AzureCliCredential: Please run 'az login' to set up an account
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>

【问题讨论】:

【参考方案1】:

2021-02-17 更新答案:

批处理池上的托管标识现已在部分区域提供公共预览版。请参阅this doc。

原答案:

目前不支持此方案。请阅读documentation关于此功能的信息以及文档底部的特定常见问题解答项目。

另请参阅UserVoice request。

【讨论】:

谢谢,我找不到任何地方提供了如何支持它的例子,所以这清楚地回答了目前它不是并且正在工作中。

以上是关于在 Azure Batch 中使用托管标识在批处理池中使用 Python 对 Key Vault 进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

如何使用服务托管标识在 Azure 中使用 Terraform 预配资源

使用托管标识在 Azure 中应用服务到应用服务身份验证

在 Azure Pipelines 中使用托管标识:GetUserAccessToken:无法获取标识的访问令牌。 AAD 返回静默失败

将 Azure 托管标识用于部署到 Azure 的应用程序?

是否可以在 Azure 函数和 Azure Web API 之间启用托管标识?

使用托管标识从 Azure Logic 应用向 Azure Function 进行身份验证