java - 访问 Azure Key Vault 进行本地开发

标签 java azure java-8 azure-keyvault azure-managed-identity

我正在尝试使用本地服务主体凭据从本地访问 Azure Key Vault 以进行开发。

但 Azure SDK 似乎始终在检查 IMDS 连接(“169.254.169.254”)

我用来检索 secret 的代码:

SecretClient secretClient = new SecretClientBuilder()
.vaultUrl(keyVaultUri)
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();

我还添加了以下变量作为环境变量:

  1. AZURE_CLIENT_ID
  2. AZURE_CLIENT_SECRET
  3. AZURE_TENANT_ID

有人可以帮我解决如何使用 java 中的服务原理从本地访问 Azure 资源(例如 key 保管库)

最佳答案

要使用服务主体在本地进行身份验证,只需使用 ClientSecretCredential .

示例:

import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ClientSecretCredentialBuilder;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;
import com.azure.security.keyvault.secrets.models.KeyVaultSecret;

public  class vacate {
    public static void main(String[] args) {
        String clientId="xxxxxx";
        String clientSecret="xxxxxx";
        String tenantId="xxxxxx";

        ClientSecretCredential credential1 = new ClientSecretCredentialBuilder()
                .tenantId(tenantId)
                .clientId(clientId)
                .clientSecret(clientSecret)
                .build();

        SecretClient secretClient = new SecretClientBuilder()
            .vaultUrl("<your-key-vault-url>")
            .credential(credential1)
            .buildClient();
            
        //do other things
    }
}

实际上,我认为您使用的 DefaultAzureCredential 也应该可以工作,它会尝试在 following order 中创建有效的凭据。 ,如果你已经正确设置了环境变量,它应该可以工作,如果没有,只需像上面那样使用 ClientSecretCredential ,它就会工作。

关于java - 访问 Azure Key Vault 进行本地开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66564623/

相关文章:

java - 在 Java 中绘制之字折线

Java:如何使用自定义 Ant build.xml 将 ProGuard 集成到 Jar 项目中

Java8使用流从类对象中提取多个字段

Java:如何检查二维列表/数组中的 boolean 条件?

java - 如何读取模板文件的内容进行更改并另存为新文件?

java - JAVA 中读取文件、操作其数据以及写入另一个文件的优化解决方案

Azure 服务总线 - JAVA 中的消息计数

具有 OCR 功能的 Azure 搜索无需多服务认知服务?

azure - Azure 网站可以跨多个可用区扩展吗

java - 使用 lambda 表达式反转字符串中的单词