Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用MSI从SpringBoot应用程序连接到Azure keyvault进行本地开发_Java_Azure_Spring Boot_Azure Functions_Azure Keyvault - Fatal编程技术网

Java 如何使用MSI从SpringBoot应用程序连接到Azure keyvault进行本地开发

Java 如何使用MSI从SpringBoot应用程序连接到Azure keyvault进行本地开发,java,azure,spring-boot,azure-functions,azure-keyvault,Java,Azure,Spring Boot,Azure Functions,Azure Keyvault,我正在尝试从本地运行的Spring Boot应用程序连接到Azure KeyVault。在开发过程中,我无法在不同的属性或yaml中保存要保存在keyvault中的机密,因为我的应用程序将在运行时生成和删除要保存在keyvault中的大量机密和令牌 我知道我们可以从您的应用程序注册创建Azure服务主体的过程。和使用 azure.keyvault.client-id azure.keyvault.client-key 在application.properties中进行连接 但在我们的案例中,可

我正在尝试从本地运行的Spring Boot应用程序连接到Azure KeyVault。在开发过程中,我无法在不同的属性或yaml中保存要保存在keyvault中的机密,因为我的应用程序将在运行时生成和删除要保存在keyvault中的大量机密和令牌

我知道我们可以从您的应用程序注册创建Azure服务主体的过程。和使用

azure.keyvault.client-id azure.keyvault.client-key

在application.properties中进行连接

但在我们的案例中,可能不允许创建Azure服务主体。所以,有没有办法从本地运行的SpringBoot应用程序使用MSI连接到密钥库

使用MSI_端点 还有MSI_的秘密

所以,有没有办法从本地运行的SpringBoot应用程序使用MSI连接到密钥库。 使用MSI_端点和MSI_密钥

我不认为你可以使用MSI_ENDPOINT和MSI_SECRET在本地获取令牌,它只在web应用在云中发布时起作用

但在我们的案例中,可能不允许创建Azure服务主体

如您所知,您可以使用服务主体客户端id和secretkey访问keyvault。实际上,当启用web应用程序的MSI时,它会自动在Azure AD租户中创建服务主体。因此,您可以只使用客户端id和它的秘密

导航到门户->Azure Active Directory->企业应用程序->搜索您的web应用程序名称选择包含所有应用程序的应用程序类型,然后获取客户端id应用程序id

注意:请记住在web app->Identity中检查服务主体的对象id,确保使用正确的id

对于服务主体机密,您可以通过powershell(如Belowy)创建。您的帐户需要管理员角色应用程序管理员或AAD租户中的全局管理员

New-AzureADServicePrincipalPasswordCredential -ObjectId <service principal object id>

然后,您将能够使用客户端id和密码访问keyvault。有关java的详细信息,您可以参考此内容。

您无法使用这些变量获取它,因为本地计算机上没有注册Azure AD标识,因此Microsoft没有构建任何MSI emulator,因此不会设置任何变量

我可以推荐微软在他们的.NET库中所做的事情

运行Azure CLI并登录 在代码中检查变量,如果变量不存在,则运行CLI命令

az account get-access-token --resource 'https://vault.azure.net'
在CLI中,只需登录主体或您的帐户。确保将此帐户/您的帐户添加到KeyVault策略

我知道这很奇怪,但我想你甚至可以检查一下

我可能有一篇文章可以帮助你,如果你想了解更多细节


如果有人尝试使用REST进行连接,那么共享代码片段将是非常值得的。如果我创建了一个Azure webApp,你会这样做吗。。。。。并将其添加到keyvault的访问策略中,并为webapp生成一个密码……现在将能够从本地运行的springboot应用程序连接到keyvault,使用它们作为客户端密钥和客户端id……不是吗?@ArnavKarformaa是的,您可以。请注意,我的意思是服务负责人的秘密,而不是密钥库中的秘密。这听起来可能很愚蠢……但我对云服务的了解不多。。。。。。那么,使用Azure应用程序也可以吗Service@ArnavKarforma是的,使用web appapp服务是可能的,只需按照我的步骤操作即可。如果您不熟悉Azure,我建议您先了解一下Azure AD。@ArnavKarforma如果有帮助,您可以接受我的回复吗?但是我需要经常读写我的密钥库…从我在本地运行的web应用程序…通过这种方式我会得到任何帮助吗?是的,这也适用于该场景。但是,如果你使用令牌,那么经常使用缓存,这样你就不会生成令牌这么多,它是有效的30分钟。请考虑标记这是一个答案,如果这对你有帮助。