【问题标题】:Accessing Azure Key Vault for local development访问 Azure Key Vault 以进行本地开发
【发布时间】:2021-06-08 09:19:45
【问题描述】:

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

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

我用来检索秘密的代码:

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 资源,例如密钥库

【问题讨论】:

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


    【解决方案1】:

    它解决我的问题的方式(可能也会帮助其他人):

    1. 确实如 Joy 的回答中提到的,您需要使用 ClientSecretCredential 或者您也可以使用 Azure Toolkit for IntelliJ 进行身份验证

    2. 我使用的是旧的 azure 身份,该身份将转到旧的身份验证端点 login.microsoftonline.com/{{tenant_id}},在升级到最新版本 (1.2.3) 后得到修复。现在它转到 login.microsoftonline.com/common/oauth2 的新端点

    3. 对我来说,我也遇到了很多 SSL 错误。要修复它,将以下证书添加到受信任的证书中:

      • DigiCert 全球根 CA
      • DigiCert SHA2 安全服务器 CA
    4. 如果您的网络在代理之后,您还需要配置代理并将相应的 CA Root 证书添加到您的密钥库和信任库。

    【讨论】:

      【解决方案2】:

      要使用服务主体在本地进行身份验证,只需使用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中创建一个有效的凭证,如果你已经正确设置了环境变量,它应该可以工作,如果没有,只需使用@ 987654326@ 就像上面一样,它会工作的。

      【讨论】:

        猜你喜欢
        • 2019-06-09
        • 2020-03-10
        • 2023-02-16
        • 2020-08-27
        • 2020-08-08
        • 1970-01-01
        • 1970-01-01
        • 2019-03-09
        • 1970-01-01
        相关资源
        最近更新 更多