Java中是否有可用的代码与Azure Keyvault连接,以使用托管服务身份来检索机密

时间:2019-05-02 11:45:06

标签: java azure

我正在创建一个与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(); 

对此有任何帮助。

2 个答案:

答案 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_ENDPOINTMSI_SECRET可用(请注意,每次重新启动App Service时它们都会改变)。给定资源的访问令牌。

希望有帮助。

答案 1 :(得分:0)

我点击了此链接,从我的App Service中的Azure Key Vault中获取数据库凭据。使用的托管服务标识。像魅力一样工作

https://github.com/gandhirajan/Azure_AppService_ManagedIdentity
相关问题