首页 > 解决方案 > Azure kubernetes - java spring 应用程序和托管标识访问密钥库?

问题描述

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

由于此应用程序将在 AKS 上进行 Docker 化和部署,因此我想使用托管标识从 Azure Key Vault 读取连接字符串。

是否有任何可用的示例来演示上述场景?

标签: azurekubernetesazure-active-directoryazure-keyvaultazure-managed-identity

解决方案


您可以将连接存储为 keyvault 机密,然后使用 java sdk 获取它。

确保您已将MSI(托管标识)添加到 keyvault 访问策略,然后使用下面的代码。

1.创建秘密客户端

它用于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.找回秘密

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

有关更多详细信息,请参阅 -适用于 Java 的 Azure Key Vault Secret 客户端库 - 版本 4.2.0


推荐阅读