Azure Kubernetes-Java Spring应用程序和托管身份以访问密钥库吗?

问题描述

我正在尝试对java spring应用程序进行Docker化并将其部署在Azure kubernetes中。该应用程序已连接到数据库,当前正在从配置文件中读取连接字符串。

由于此应用程序将被Docker化并部署在AKS上,因此我想使用托管身份从Azure密钥保管库读取连接字符串。

是否有任何样本可以证明上述情况?

解决方法

您可以将连接存储为密钥库机密,然后使用java sdk进行获取。

确保您拥有added your MSI(managed identity) to the keyvault access policy,然后使用下面的代码。

1。Create secret client

它使用DefaultAzureCredential进行身份验证,不设置环境变量,那么它将使用您的MSI自动进行身份验证,您也可以使用ManagedIdentityCredentialBuilder代替DefaultAzureCredentialBuilder,指定clientId的MSI。

import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;

SecretClient secretClient = new SecretClientBuilder()
    .vaultUrl("<your-key-vault-url>")
    .credential(new DefaultAzureCredentialBuilder().build())
    .buildClient();

2。Retrieve a secret

KeyVaultSecret secret = secretClient.getSecret("<secret-name>");
System.out.printf("Retrieved secret with name \"%s\" and value \"%s\"%n",secret.getName(),secret.getValue());

有关更多详细信息,请参见-Azure Key Vault Secret client library for Java - Version 4.2.0