使用托管身份凭证通过 SecretClient 从 KeyVault 返回 Secret 的调用不会从 Java 调用返回

问题描述

使用托管身份凭证通过 SecretClient 从 keyvault 返回 Secret 的调用不会从 Java 调用返回

我在 Azure 云中的 Linux VM 上运行 Ubuntu。此 VM 的系统分配标识设置为“开启”。 我的密钥保管库已向我的 VM 授予“密钥保管库管理员”角色。

我下面的 Java 代码取自以下示例 https://github.com/Azure/azure-sdk-for-java/wiki/Azure-Identity-Examples 输出如下所示。 我为 com.azure 设置了调试。当它创建凭证时,我得到一行输出 从 Azure SDK 代码寻找环境变量。

LOGGER.debug("Retrieve Credentials from Azure");
keyvaultSecret keyvaultSecret = null;
try {
    String keyvaultURL = "https://" + uCCVMAttributesUpdate.getAzurekeyvault() + 
           AZURE_keyvAULT_SUFFIX;
    LOGGER.debug("keyvaultURL<" + keyvaultURL + ">");
    
    SecretClient secretClient = new SecretClientBuilder()
         .httplogoptions(new Httplogoptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
         .vaultUrl( keyvaultURL )
         .credential (new ManagedIdentityCredentialBuilder().build() )
         .buildClient();
    LOGGER.debug("SecretClient created");
    keyvaultSecret = secretClient.getSecret(AZURE_SECRET_NAME);
    LOGGER.debug("Secrets retrieved");
} catch (Exception e) {
    LOGGER.error("Caught exception reading Azure secrets",e);

}

输出

2021-03-22 15:21:48 - [pool-3-thread-1][DEBUG][com.impl.ServiceImpl] - 从 Azure 检索凭据 2021-03-22 15:21:48 - [pool-3-thread-1][DEBUG][com.impl.ServiceImpl] - keyvaultURLhttps://KeyVaultName.vault.azure.net/ 2021-03-22 15:21:48 - [pool-3-thread-1][DEBUG][com.azure.core.util.logging.ClientLogger] - Azure Identity => 找到以下环境变量:

有谁知道可能是什么问题,或者我还能做些什么来获得更多调试?

我需要弄清楚为什么调用没有返回、抛出异常或输出更多调试信息。 此外,由于我使用的是 ManagedIdentityCredentialBuilder,因此我不明白它何时在寻找环境变量。

顺便说一句,我使用 DefaultAzureCredential 得到了相同的结果,以下链接解释将尝试找到 首先托管身份然后回退使用环境变量的其他方法https://docs.microsoft.com/en-us/java/api/overview/azure/identity-readme?view=azure-java-stable

感谢您的帮助。

解决方法

代码看起来是正确的。您可以在某处使用 DefaultAzureCredential,只有 EnvironmentCredential 与环境变量相关。

注意: ManagedIdentityCredential 在本地环境中不起作用,请参阅 here

ManagedIdentityCredential 仅适用于 Azure 环境 支持托管身份验证的服务。它不起作用 在本地环境中。

,

这一行似乎只是一些登录 azure-identity 的内容,即使是 MSI。

但以上并不能解决您的问题。也许你可以试试最新的 azure-identity(我认为是 1.2.4),并将它放在你的第一个依赖项(以确保最新的 azure-core)。

此日志之后还有其他输出吗?