在Spring Boot应用程序中使用Azure KeyVault作为数据库密码

时间:2019-10-08 08:08:59

标签: azure spring-boot configuration azure-keyvault

我正在研究应该部署到Azure的Spring Boot应用程序。 通过使用以下依赖性,我设法将KeyVault的机密用于敏感的应用程序属性:

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

通过设置属性azure.keyvault.uri=https://my-vault.vault.azure.net和配置托管服务身份,我只需像这样从KeyVault注入秘密名称:

@Value("${ServerPassphrase}")
String serverPassphrase;

现在我已建立数据库连接,并且密码具有常规密钥spring.datasource.password。不幸的是,Azure KeyVault中的秘密名称中不允许使用点。 :-(

是否有一种简单的方法将点替换为在KeyVault中允许使用字符的破折号,还是我必须编写一个自定义属性解析器作为包装器?

3 个答案:

答案 0 :(得分:0)

  

秘密名称只能包含字母数字字符和破折号。

秘密名称只是一个名称,我们需要的是它的值。我用破折号代替了点。

@Value("${spring-datasource-password}")
private String dataSourcePassword;

enter image description here

更新

  

我想知道是否有一种简单的方法告诉spring使用破折号   而不是点,因此无需编写额外的代码。

据我所知,没有办法。

答案 1 :(得分:0)

因此,毕竟,似乎没有简单的方法告诉Spring Boot使用破折号而不是点。 最后,我最终在MainConfig中编写了一个自定义re.sub("[^0-9]", "", ctext) 和一个自定义DataSource来为tomcat设置所有ssl属性。 对于有人到这里来的情况,寻找解决此问题或类似问题的方法,我将发布一些可能有用的代码段。

数据源代码(我使用点符号从应用程序属性中读取所有常见属性,仅从KeyVault中读取用户名和密码)

ServletWebServerFactory

ServletWebServerFactory的代码(所有使用的值都使用@Value("${db-user}") String dbUser; @Value("${db-password}") String dbPwd; @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource getDataSource() { DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(); dataSourceBuilder.username(dbUser); dataSourceBuilder.password(dbPwd); return dataSourceBuilder.build(); } -注解如上注入):

@Value

在其他一些地方,我不得不使用类似的东西,但是由于这是专门针对我们的解决方案,因此我不会在此处发布。我认为您可能会从发布的代码中了解如何解决此类问题。

答案 2 :(得分:0)

this problem中,他们不需要使用属性文件的技巧,只需将'-'用作'。进行密钥保险,API似乎会自动将“-”替换为“。”。 经过测试并可以使用azure-keyvault-secrets-spring-boot-starter的2.3.2版本


“ Azure Key Vault Secrets Spring启动启动器”的官方文档中 有关于create new policy的部分 您必须在属性文件中使用不兼容的属性。 但这对我不起作用

spring.datasource.password=${spring-datasource-password}