我正在尝试从本地运行的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
答案 0 :(得分:1)
因此,有什么方法可以通过本地运行的SpringBoot应用程序使用MSI连接到密钥库。 使用MSI_ENDPOINT和MSI_SECRET
我认为您无法使用MSI_ENDPOINT
和MSI_SECRET
在本地获取令牌,它仅在Web应用程序发布在云中时有效。
但是在我们的案例中,可能不允许创建Azure服务主体。
如您所知,您可以使用服务主体client id
和secret(key)
来访问密钥库。实际上,启用Web应用程序的MSI时,它将在您的Azure AD租户中自动创建一个服务主体。因此,您只需使用客户端ID和密码即可。
导航至门户-> Azure Active Directory
-> Enterprise applications
->搜索您的网络应用名称(用Application Type
选择All Applications
),然后得到{ {1}}。
注意:请记住,要与Web应用程序中的服务主体的对象ID进行检查-> client id(application id)
,请确保使用正确的对象ID。
对于服务主体机密,您可以通过如下所示的powershell创建它(您的帐户需要AAD租户中的管理员角色Identity
或Application administrator
)。
Global administrator
然后,您将可以使用客户端ID和密码访问密钥库。有关Java的详细信息,您可以参考此link。
答案 1 :(得分:0)
您无法使用这些变量获取它,因为在本地计算机上本地没有注册Azure AD身份,因此Microsoft没有构建任何MSI仿真器,因此不会设置任何变量。
我可以推荐Microsoft在其.NET库中所做的事情
在代码中检查变量,如果不存在,请运行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/