使用托管身份凭证通过 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
感谢您的任何帮助。