我目前正在将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)。我一直在查阅参考文档,但我还没有找到指定这个 - 是否可能?
答案 0 :(得分:3)
我能够使用Generic Backend属性来按摩我想要的路径。类似的东西:
spring.cloud.vault:
generic:
enabled: true
backend: deployments
profile-separator: '/'
default-context: prod
application-name: my-app
不幸的是,我们还会选择deployments/my-app
和deployments/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"
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)
}
}
}
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中。
bootstrap.yml
中指定所需的路径,如下所示:spring:
cloud:
vault:
paths:
- "secret/application"
- "secret/your-app"
它应该可以工作。