在Spring中,云服务器向现有环境添加其他属性

在Spring中,云服务器向现有环境添加其他属性,spring,spring-boot,spring-cloud-config,hashicorp-vault,spring-cloud-vault-config,Spring,Spring Boot,Spring Cloud Config,Hashicorp Vault,Spring Cloud Vault Config,我们使用SpringCloudConfigServer和一个支持的git存储库来提供测试概要文件的属性。我们收到一项要求,要求将密钥移动到vault(hashicorp),并像往常一样在属性文件中保留常规属性 在使用vault之前,我们通过一个系统属性传递密钥(使用-Dxxx=yyy),该属性作为常规属性源加载,并且应用程序正在按预期工作 现在,我必须有一个复合特性源,以便同时从特性文件和vault中获取。我不知道如何同时从vault和git中提取属性,并将它们提供给SpringCloudCon

我们使用SpringCloudConfigServer和一个支持的git存储库来提供测试概要文件的属性。我们收到一项要求,要求将密钥移动到vault(hashicorp),并像往常一样在属性文件中保留常规属性

在使用vault之前,我们通过一个系统属性传递密钥(使用
-Dxxx=yyy
),该属性作为常规属性源加载,并且应用程序正在按预期工作

现在,我必须有一个复合特性源,以便同时从特性文件和vault中获取。我不知道如何同时从vault和git中提取属性,并将它们提供给SpringCloudConfig客户端

我一直在深入研究,发现我们可以拥有复合环境存储库,但是我不能让vault和git同时工作

我尝试过多种方法,例如放置如下属性:

spring.cloud.config.server.git.uri=file:///E:/Project/git/myappdata

spring.cloud.config.server.vault.host=127.0.0.1
spring.cloud.config.server.vault.port=8200
spring.cloud.config.server.vault.scheme=http
spring.cloud.config.server.vault.backend=secret
spring.cloud.config.server.vault.defaultKey=myapp
还使用SpringCloudVault进行了测试,我可以获取这些秘密,但是它们没有提供给我的客户

已经尝试使用实现
环境存储库
界面,但这是为了创建一个新存储库(我只想在现有的基于git的存储库中添加1个vault属性)

将使用spring事件ApplicationEnvironmentPreparedEvent并尝试动态附加vault属性


我想我忽略了什么。您知道读取vault机密并将其附加为常规属性文件的属性的正确方法吗

这是可能的。您应该为Spring云配置服务使用一些配置文件

    spring:
      profiles:
        active: vault, git
      cloud:
        config:
          server:
            vault:
              order: 1
            git:
              order: 2  
              uri: https://some-git-repo.com/
              username: user 
              password: pass
有了这样的配置,Vault和Git将协同工作。您还需要在每个配置客户机中实现对的支持。 对于Vault,它的工作方式有点不同。它不会像Git那样获得所有属性。当客户要求某些带有令牌的属性时,它将转到Vault并检索该属性。如果它不存在,它将在git repo中搜索。您可以在配置中指定顺序

Spring以递归方式解析属性,所以您可以拥有一个属性文件,该文件将在git中存储属性占位符,并由配置服务器(application.yml)提供服务:

以及存储在Vault中的敏感属性,例如

vault write secret/clientAppName database.secure.password=SuperSecurePassword
SpringCloud将自动解析您的${database.password}属性

vault write secret/clientAppName database.secure.password=SuperSecurePassword