配置 Spring Cloud Vault Config 以从 /secret 以外的位置提取
Configuring Spring Cloud Vault Config to pull from a location other than /secret
我目前正在将 Spring Cloud Vault Config 集成到 Spring 启动应用程序中。来自主页:
Spring Cloud Vault Config reads config properties from Vaults using the application name and active profiles:
/secret/{application}/{profile}
/secret/{application}
/secret/{default-context}/{profile}
/secret/{default-context}
我想提供我自己的位置,从中提取不以 /secret 开头的 Vault 属性(例如 /deployments/prod)。我一直在查看参考文档,但无论如何我都没有找到具体说明——这可能吗?
我能够使用 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
等 Vault 位置,因此请注意不要在这些位置放置您不想被拾取的任何属性。
看起来有一个 desire (and an implementation) 允许以更多的编程方式指定这些路径。
应该这样做。
有配置class
@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);
}
};
}
}
这样您就可以扫描放置在自定义路径中的机密
问候
阿伦
我在 Kotlin
项目中解决了同样的问题。但它也适用于 Java。
问题
我想在 yaml 配置中指定保险库路径,所以我得到了以下解决方案,它允许您使用清晰的语法直接在 bootstrap.yml
中指定路径,如:
spring:
cloud:
vault:
paths: "secret/your-app"
解决方案:
- 在你的项目中创建
VaultConfig
class,内容如下:
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)
}
}
}
- 在
src/main/resources/META-INF/spring.factories
中创建 spring.factories
文件,内容为:
org.springframework.cloud.bootstrap.BootstrapConfiguration=com.your.app.configuration.VaultConfig
Don't forget to specify valid reference to your config instead of
com.your.app.configuration.VaultConfig
spring.factories
allows your VaultConfig
happen in the bootstrap context, as documentation says.
- 现在您可以在
bootstrap.yml
中指定所需的路径,如下所示:
spring:
cloud:
vault:
paths:
- "secret/application"
- "secret/your-app"
它应该可以工作。
我目前正在将 Spring Cloud Vault Config 集成到 Spring 启动应用程序中。来自主页:
Spring Cloud Vault Config reads config properties from Vaults using the application name and active profiles:
/secret/{application}/{profile}
/secret/{application}
/secret/{default-context}/{profile}
/secret/{default-context}
我想提供我自己的位置,从中提取不以 /secret 开头的 Vault 属性(例如 /deployments/prod)。我一直在查看参考文档,但无论如何我都没有找到具体说明——这可能吗?
我能够使用 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
等 Vault 位置,因此请注意不要在这些位置放置您不想被拾取的任何属性。
看起来有一个 desire (and an implementation) 允许以更多的编程方式指定这些路径。
应该这样做。
有配置class
@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);
}
};
}
}
这样您就可以扫描放置在自定义路径中的机密
问候 阿伦
我在 Kotlin
项目中解决了同样的问题。但它也适用于 Java。
问题
我想在 yaml 配置中指定保险库路径,所以我得到了以下解决方案,它允许您使用清晰的语法直接在 bootstrap.yml
中指定路径,如:
spring:
cloud:
vault:
paths: "secret/your-app"
解决方案:
- 在你的项目中创建
VaultConfig
class,内容如下:
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)
}
}
}
- 在
src/main/resources/META-INF/spring.factories
中创建spring.factories
文件,内容为:
org.springframework.cloud.bootstrap.BootstrapConfiguration=com.your.app.configuration.VaultConfig
Don't forget to specify valid reference to your config instead of
com.your.app.configuration.VaultConfig
spring.factories
allows your VaultConfighappen in the bootstrap context, as documentation says.
- 现在您可以在
bootstrap.yml
中指定所需的路径,如下所示:
spring:
cloud:
vault:
paths:
- "secret/application"
- "secret/your-app"
它应该可以工作。