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

时间:2019-08-12 11:20:41

标签: java azure spring-boot azure-functions azure-keyvault

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

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

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

在application.properties中进行连接。

但是在我们的案例中,可能不允许创建Azure服务主体。因此,有什么方法可以通过本地运行的SpringBoot应用程序使用MSI连接到密钥库。

使用MSI_ENDPOINT  和MSI_SECRET

2 个答案:

答案 0 :(得分:1)

  

因此,有什么方法可以通过本地运行的SpringBoot应用程序使用MSI连接到密钥库。   使用MSI_ENDPOINT和MSI_SECRET

我认为您无法使用MSI_ENDPOINTMSI_SECRET在本地获取令牌,它仅在Web应用程序发布在云中时有效。

  

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

如您所知,您可以使用服务主体client idsecret(key)来访问密钥库。实际上,启用Web应用程序的MSI时,它将在您的Azure AD租户中自动创建一个服务主体。因此,您只需使用客户端ID和密码即可。

导航至门户-> Azure Active Directory-> Enterprise applications->搜索您的网络应用名称(用Application Type选择All Applications),然后得到{ {1}}。

注意:请记住,要与Web应用程序中的服务主体的对象ID进行检查-> client id(application id),请确保使用正确的对象ID。

enter image description here

对于服务主体机密,您可以通过如下所示的powershell创建它(您的帐户需要AAD租户中的管理员角色IdentityApplication administrator)。

Global administrator

enter image description here

然后,您将可以使用客户端ID和密码访问密钥库。有关Java的详细信息,您可以参考此link

答案 1 :(得分:0)

您无法使用这些变量获取它,因为在本地计算机上本地没有注册Azure AD身份,因此Microsoft没有构建任何MSI仿真器,因此不会设置任何变量。

我可以推荐Microsoft在其.NET库中所做的事情

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

    az account get-access-token --resource 'https://vault.azure.net'
    

在CLI中,只需登录主体或您的帐户即可。确保将此帐户/您的帐户添加到KeyVault策略中。

我知道这很奇怪,但是我什至可以检查它HERE on their GitHub

如果您需要更多详细信息,我可能会提供一篇文章为您提供帮助

https://marczak.io/posts/2019/07/securing-websites-with-msi/