0

使用托管身份凭证通过 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] - keyVaultURL https://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

感谢您的任何帮助。

4

2 回答 2

0

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

注意: ManagedIdentityCredential在本地环境中不起作用,请参见此处

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

于 2021-03-24T09:15:43.617 回答
0

即使对于 MSI ,这条线似乎也只是一些登录azure-identity 。

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

以及此日志之后的任何其他输出?

于 2021-03-25T03:41:34.887 回答