我正在尝试从本地运行的 Spring Boot 应用程序连接到 Azure KeyVault。在开发过程中,我无法将这些 secret 保存在不同属性或 yaml 中的 keyvault 中,因为我的应用程序将在运行时生成和删除如此多的 secret 和 token ,以保存在 keyvault 中。
我了解我们可以通过您的应用程序注册创建 Azure 服务主体的过程。并使用
azure.keyvault.client-id azure.keyvault.client-key
在 application.properties 中进行连接。
但在我们的示例中可能不允许创建 Azure 服务主体。那么有没有办法从本地运行的 SpringBoot 应用程序使用 MSI 连接到 key 保管库。
使用 MSI_ENDPOINT 和 MSI_SECRET
最佳答案
So is there any way to connect to key vault using MSI from locally running SpringBoot application. using MSI_ENDPOINT and MSI_SECRET
我认为您不能使用 MSI_ENDPOINT
和 MSI_SECRET
在本地获取 token ,它仅在 Web 应用程序在云端发布时有效。
But it may not be allowed to be created Azure service principal in our case.
如您所知,您可以使用服务主体客户端 ID
和 secret(key)
来访问 keyvault。实际上,当启用Web应用程序的MSI时,它会自动在您的Azure AD租户中创建一个服务主体。所以你可以只使用客户端 ID 和它的 secret 。
导航到门户 -> Azure Active Directory
-> 企业应用程序
-> 搜索您的 Web 应用程序名称(选择应用程序类型
与所有应用程序
),然后您将获得客户端ID(应用程序ID)
。
注意:请记住将服务主体的对象 ID 与您的 Web 应用程序 -> Identity
中的对象 ID 进行检查,确保使用正确的对象 ID。
对于服务主体 key ,您可以通过 powershell 创建它,如下所示(您的帐户需要 AAD 租户中的管理员角色应用程序管理员
或全局管理员
)。
New-AzureADServicePrincipalPasswordCredential -ObjectId <service principal object id>
然后您将能够使用客户端 ID 和 key 访问 keystore 。 java方面的详细可以引用这个link .
关于java - 如何使用 MSI 从 Spring Boot 应用程序连接到 Azure key 保管库以进行本地开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57460223/