我正在创建一个与Azure keyvault连接的应用程序,以使用托管服务身份来检索其机密。
我尝试不使用托管身份与keyvault进行连接,并且可以正常工作,但与msi相连,我无法连接。 我尝试过的几件事:
1)这段代码正在超时:
MSICredentials credentials = new MSICredentials(AzureEnvironment.AZURE);
log.debug("Credentials acquired");
KeyVaultClient keyVaultClient = new KeyVaultClient(credentials);
log.debug("Key Vault client created");
String secret =
keyVaultClient.getSecret("https://<key-vault-name>.vault.azure.net/",
"<secret-name>").value();
2)这段代码在第一行本身抛出了错误,即endpoint == null。通过查看库,这意味着我需要提供MSI_ENDPOINT,我不确定它是什么。
AppServiceMSICredentials credentials =
new AppServiceMSICredentials(AzureEnvironment.AZURE);
log.debug("Credentials acquired");
KeyVaultClient keyVaultClient = new KeyVaultClient(credentials);
log.debug("Key Vault client created");
String secret =
keyVaultClient.getSecret("https://<key-vault-name>.vault.azure.net/",
"<secret-name>").value();
对此有任何帮助。
答案 0 :(得分:0)
我们可以使用AppServiceMsiCredential类来实现结果
您可以阅读有关参数here
的全部信息import com.microsoft.azure.AzureEnvironment;
import com.microsoft.azure.credentials.AppServiceMSICredentials;
import com.microsoft.azure.keyvault.KeyVaultClient;
import com.microsoft.azure.keyvault.models.KeyBundle;
AppServiceMSICredentials credentials = new AppServiceMSICredentials(AzureEnvironment.AZURE);
KeyVaultClient keyVaultClient = new KeyVaultClient(credentials);
keyVaultClient.getSecret("https://xxxx.vault.azure.net","secretName");
当为App Service /任何资源启用MSI时,两个环境变量MSI_ENDPOINT
和MSI_SECRET
可用(请注意,每次重新启动App Service时它们都会改变)。给定资源的访问令牌。
希望有帮助。
答案 1 :(得分:0)
我点击了此链接,从我的App Service中的Azure Key Vault中获取数据库凭据。使用的托管服务标识。像魅力一样工作
https://github.com/gandhirajan/Azure_AppService_ManagedIdentity