繁体   English   中英

带有 Spring 引导的 Keyvault MSI:如何配置 keyvault 以在本地运行时使用 Azure cli 凭据而不是托管身份?

[英]Keyvault MSI with Spring boot : How to config keyvault to use Azure cli credentials instead of managed identity while running on local?

我创建了一个简单的 spring 启动应用程序来从 keyvault 中检索机密。 我添加了以下依赖项来解决,

<dependency>
   <groupId>com.azure.spring</groupId>
   <artifactId>azure-spring-boot-starter-keyvault-secrets</artifactId>
   <version>3.5.0</version>
</dependency>

并在 application.properties 添加以下内容

azure.keyvault.enabled=true
azure.keyvault.uri=<URL>

#keys
mySecretProperty=secret

和我的主要应用程序,

@SpringBootApplication
public class KeyVaultSample implements CommandLineRunner {

    @Value("${mySecretProperty}")
    private String mySecretProperty;

    public static void main(String[] args) {
        SpringApplication.run(KeyVaultSample.class, args);
    }

    @Override
    public void run(String... args) {
        System.out.println("property your-property-name value is: " + mySecretProperty);
    }
}

但是每次我尝试在本地运行上述应用程序时,它都会尝试使用 ManagedIdentityCredential 进行连接。 所以我添加了一个配置 class 用于使用 AzureCliCredential 为 SecretClient 创建一个 bean,但是结果也是一样的。

我的配置 class,

@Configuration
public class AppConfiguration {

@Bean
public SecretClient secretClient() {
  AzureCliCredential az = new AzureCliCredentialBuilder().build();
  SecretClient sec = new SecretClientBuilder().vaultUrl("<url>")
  .credential(az).buildClient();
  return sec;
 }
}​

我正在寻找可以在本地使用/测试此密钥库的方法。 是否有任何配置可以放入属性文件中,使其使用 AzureCliCredential 而不是 ManagedIdentityCredential?

azure-spring-boot-starter-keyvault-secrets使用 MSI/托管身份。

如果您想使用 Azure CLI 进行身份验证,只需使用azure-identityazure-security-keyvault-secrets

public void getSecretWithAzureCliCredential() {
    AzureCliCredential cliCredential = new AzureCliCredentialBuilder().build();

    // Azure SDK client builders accept the credential as a parameter
    SecretClient client = new SecretClientBuilder()
        .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net")
        .credential(cliCredential)
        .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),您也可以尝试 Lowkey Vault。 它使用本地容器支持密钥和机密,您可以使用简单的基本身份验证来伪造身份验证。

项目主页: https://github.com/nagyesta/lowkey-vault

Java POC(虽然没有使用 Spring 启动启动器): https://github.com/nagyesta/lowkey-vault-example

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM