配置Spring Cloud Vault配置以从/ secret

时间:2017-05-15 15:43:43

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

我目前正在将Spring Cloud Vault Config集成到Spring Boot应用程序中。从主页:

  

Spring Cloud Vault配置使用应用程序名称和活动配置文件从Vaults读取配置属性:

/secret/{application}/{profile}
/secret/{application}
/secret/{default-context}/{profile}
/secret/{default-context}

我想提供自己的位置,从Vault中提取不以/ secret开头的属性(例如/ deployments / prod)。我一直在查阅参考文档,但我还没有找到指定这个 - 是否可能?

3 个答案:

答案 0 :(得分:3)

我能够使用Generic Backend属性来按摩我想要的路径。类似的东西:

spring.cloud.vault:
    generic:
        enabled: true
        backend: deployments
        profile-separator: '/'
        default-context: prod
        application-name: my-app

不幸的是,我们还会选择deployments/my-appdeployments/prod/activeProfile这样的保险柜位置,因此请注意不要在这些地方拥有您不想接听的任何属性。

看起来有desire (and an implementation)允许以编程方式更多地指定这些路径。

答案 1 :(得分:1)

应该以这种方式完成。

具有配置类

@Configuration
public class VaultConfiguration {

    @Bean
    public VaultConfigurer configurer() {
        return new VaultConfigurer() {
            @Override
            public void addSecretBackends(SecretBackendConfigurer configurer) {
                configurer.add("secret/my-app/path-1");
                configurer.add("secret/my-app/path-2");

                configurer.registerDefaultGenericSecretBackends(false);
            }
        };
    }
}

这样,您可以扫描放置在自定义路径中的秘密

问候 阿伦

答案 2 :(得分:1)

我在Kotlin项目中解决了相同的问题。但是它也可以在Java中使用。

问题

我想在yaml config中指定文件库路径,所以我得到了以下解决方案,该解决方案允许您使用清晰的语法直接在bootstrap.yml中指定路径,例如:

spring:
  cloud:
    vault:
      paths: "secret/your-app"

解决方案:

  1. 在项目中创建VaultConfig类,其内容如下:
package com.your.app.configuration

import org.springframework.beans.factory.annotation.Value
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.cloud.vault.config.VaultConfigurer
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration
@ConditionalOnProperty(
    prefix = "spring.cloud.vault", value = ["paths"],
    matchIfMissing = false
)
class VaultConfig {

    @Value("\${spring.cloud.vault.paths}")
    private lateinit var paths: List<String>

    @Bean
    fun configurer(): VaultConfigurer {
        return VaultConfigurer { configurer ->
            paths.forEach {
                configurer.add(it)
            }
            configurer.registerDefaultGenericSecretBackends(false)
            configurer.registerDefaultDiscoveredSecretBackends(false)
        }
    }
}
  1. spring.factories中使用内容创建src/main/resources/META-INF/spring.factories文件:
org.springframework.cloud.bootstrap.BootstrapConfiguration=com.your.app.configuration.VaultConfig

不要忘记为配置指定有效的引用,而不是 com.your.app.configuration.VaultConfig

spring.factories允许您的VaultConfig

发生在引导上下文as documentation says中。

  1. 现在,您可以在bootstrap.yml中指定所需的路径,如下所示:
spring:
  cloud:
    vault:
      paths: 
        - "secret/application"
        - "secret/your-app"

它应该可以工作。