在Spring Cloud Config中存储Spring Cloud Vault令牌

时间:2017-12-07 05:34:15

标签: spring spring-cloud-config spring-cloud-vault-config

我正在运行带有两个配置服务器的微服务:

  • Spring Cloud Config(使用git后端)
  • Spring Cloud Vault

我将Vault令牌存储在Spring Cloud Config服务器中。启动微服务时,我希望它能够:

  1. 检索存储在Spring Cloud Config中的配置,包括Vault令牌。
  2. 使用Vault令牌连接到Spring Cloud Vault,然后检索存储在Spring Cloud Vault中的配置。
  3. bootstrap.properties:

    spring.application.name=my-app
    spring.cloud.config.uri=http://localhost:8888
    

    Spring Cloud配置服务器:

    spring.cloud.vault.token=19aefa97-cccc-bbbb-aaaa-225940e63d76
    

    但是,我遇到了异常,说spring.cloud.vault.token必须存在。

    Caused by: java.lang.IllegalArgumentException: Token (spring.cloud.vault.token) must not be empty
        at org.springframework.util.Assert.hasText(Assert.java:181)
        at org.springframework.cloud.vault.config.VaultBootstrapConfiguration.clientAuthentication(VaultBootstrapConfiguration.java:270)
        at org.springframework.cloud.vault.config.VaultBootstrapConfiguration$$EnhancerBySpringCGLIB$$473cc7b3.CGLIB$clientAuthentication$7(<generated>)
        at org.springframework.cloud.vault.config.VaultBootstrapConfiguration$$EnhancerBySpringCGLIB$$473cc7b3$$FastClassBySpringCGLIB$$5f991c47.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358)
        at org.springframework.cloud.vault.config.VaultBootstrapConfiguration$$EnhancerBySpringCGLIB$$473cc7b3.clientAuthentication(<generated>)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
        ... 88 common frames omitted
    

    问题:

    1. 在Spring Cloud Config中存储Vault令牌是否有效的用例,以便微服务稍后访问Spring Cloud Vault?

    2. 如果是,我们是否需要设置属性检索的顺序?即为Spring Cloud Vault设置spring.cloud.vault.config.order。 Spring Cloud Config是否有任何等效参数?

1 个答案:

答案 0 :(得分:2)

  1. 看起来这里使用Vault令牌无效。 根据文档,Spring Cloud Config Client应为服务器提供令牌以从Vault中检索值 - Spring Cloud Config - Vault。 因此,在Config Server中,您只需为git repos和Vault服务器提供配置即可。 它不会像从Git repos那样检索Vault中的所有配置。它将根据具有适当Vault令牌的配置客户端的请求检索敏感属性。

  2. 是的,有订单属性,

    spring:
      profiles:
        active: vault, git
      cloud:
        config:
          server:
            vault:
              order: 1
            git:
              order: 2  
              uri: https://some-git-repo.com/
              username: user 
              password: pass
    
  3. 我使用了来自this StackOverflow question的配置,它帮助我并且工作正常。