0

我们正在使用带有支持 git 存储库的 spring 云配置服务器来为测试配置文件提供属性。我们收到了将我们的密钥移动到保险库 (hashicorp) 并在我们的属性文件中像往常一样保留常规属性的要求。

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

现在我必须有一个复合属性源来同时从属性文件和保险库中获取。我不确定如何同时从 Vault 和 git 中提取属性并将它们提供给 spring 云配置客户端。

我一直在研究文档,发现我们可以拥有复合环境存储库,但是我不能让 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

还使用 spring cloud vault 进行了测试,我可以获取秘密,但是它们没有提供给我的客户。

曾尝试使用实现一个EnvironmentRepository接口,但这是为了创建一个新的存储库(我只想将 1 个保险库属性添加到基于 git 的现有提供的存储库)。

并打算使用春季事件 ApplicationEnvironmentPreparedEvent 并尝试动态附加保险库属性。

我想我忽略了一些东西。您知道读取保管库机密并将其附加为常规属性文件的属性的正确方法是什么吗?

4

1 回答 1

1

这是可能的。您应该为 Spring Cloud Config Service 使用一些配置文件。

    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 Token的支持,并将其包含在每个配置客户端中。使用 Vault,它的工作方式会有所不同。它不会像使用 Git 那样获取所有属性。当客户要求一些带有令牌的财产时,它将去 Vault 并检索它。如果它不存在,它将去 git repo 中搜索。您可以在配置中指定顺序。

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

database:
  password: ${database.secure.password}

和存储在 Vault 中的敏感财产,例如

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

Spring Cloud 将自动解析您的${database.password}属性。

于 2018-02-28T10:50:25.640 回答