当前位置: 首页 > 知识库问答 >
问题:

使用托管身份凭据通过SecretClient从KeyVault返回机密的调用不会从Java调用返回

宰父夕
2023-03-14

使用托管身份凭据通过SecretClient从KeyVault返回机密的调用不会从Java调用返回

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

下面我的Java代码取自https://github.com/Azure/azure-sdk-for-java/wiki/Azure-Identity-Examples输出如下所示。我已经为com设置了调试。蔚蓝色的当它创建凭证时,我从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.serviceempl]-从Azure 2021-03-22 15:21:48-[pool-3-thread-1][DEBUG][com.impl.serviceempl]-检索凭据https://KeyVaultName.vault.azure.net/2021-03-22 15:21:48-[pool-3-thread-1][DEBUG][com.azure.core.util.logging.ClientLogger]-azure标识=

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

我需要找出为什么调用没有返回、抛出异常或输出更多调试。此外,我不明白它什么时候在寻找环境变量,因为我使用的是ManagedIdtyCredonalBuilder。

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

谢谢你的帮助。

共有2个答案

阚乐湛
2023-03-14

这行代码似乎只是一些登录azure身份的代码,即使是MSI。

但是上面不会解决你的问题。也许你可以尝试最新的Azure标识(我认为是1.2.4),并把它放在你的第一个依赖项上(以确保最新的Azure核心)。

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

孙德本
2023-03-14

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

注意:ManagedIdtyCredential在本地环境中不起作用,请参阅此处。

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

 类似资料:
  • 问题内容: 谁能告诉我如何将值作为函数的返回值返回。 当您点击注册表格中的提交时,上述功能就会触发(很明显)。问题是,无论响应是什么,此表单都将提交,并且警告框有时不显示任何内容(空白),有时根本不显示。但是,如果我将结尾更改为手动[即用] 替换,则正确的值将显示在警报框中。 PS我比JavaScript的菜鸟还差,因此也欢迎提出一般性改进代码的建议。 问题答案: 问题是,直到……等待……状态改变

  • 问题内容: 我试图在我自己的函数中使用jQuery ajax调用的返回值,但它始终返回未定义的值。 ajax调用绝对有效,因为当我取消注释警报时,我得到了正确的返回,并且可以在firebug中看到它。我在做蠢事吗? 问题答案: AJAX调用是异步的-这意味着AJAX请求是按常规程序执行顺序发出的,并且在您的程序中这意味着不会将数据返回警报。 您不能以这种方式使用调用的返回值,而是将利用AJAX返回

  • 问题内容: 我正在Windows上的Go 1.6中工作,尝试将证书容器导出到PFX(此处的最终目标是从证书存储区访问可导出的私钥)。 我已经打开了一个内存存储并将证书插入到存储中: 现在,我想生成该商店的PFX。我已经定义了一个用于包含数据blob的结构,并希望使用PFXExportCertStoreEx来获取商店的PFX: 这 一半 有效。 填充了看起来像一个适当的值(即,如果我增加更多的证书商

  • 问题内容: 我正在使用jQuery的网页上工作。我有一个Ajax调用,它从服务器获取数据并更新div。在该数据内部有一个jQuery函数,但是在将数据加载到页面中之后未调用该函数。我已经在页面中包含了正确的js文件。 这是从Ajax调用返回并放入div的内容: 将html插入页面后,如何使返回的javascript运行? (我将Rails与jRails插件结合使用) 问题答案: 如果要对具有htm

  • 我正在尝试修改一些嵌入在Java中的Javascript代码,以将多个值返回给调用Java代码。 Java代码(调用Javascript): Javascript代码(由Java调用): 我希望返回多个值。 我尝试修改Javascript以返回HashMap,如下所示: 但是当我在Java端进行强制转换时,我得到了一个ClassCastException: 结果: 我不喜欢在HashMap中返回它

  • 在我片段中,我从图库中选择了照片 在manifest.xml中 在此之前,我的应用程序显示权限对话框。我按允许 此处请求权限对话框: