我正在尝试对java spring应用程序进行Docker化并将其部署在Azure kubernetes中。该应用程序已连接到数据库,当前正在从配置文件中读取连接字符串。
由于此应用程序将被Docker化并部署在AKS上,因此我想使用托管身份从Azure密钥保管库读取连接字符串。
是否有任何样本可以证明上述情况?
答案 0 :(得分:2)
您可以将连接存储为密钥库机密,然后使用java sdk进行获取。
确保您拥有added your MSI(managed identity) to the keyvault access policy,然后使用下面的代码。
它使用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();
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