当前位置: 首页 > 知识库问答 >
问题:

配置Spring Cloud Vault Config以从/secret以外的位置提取

狄卓君
2023-03-14

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

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

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

相反,我想提供我自己的位置,从中从Vault中提取属性,该位置不以/secret开头(例如/deployments/prod)。我一直在查阅参考文档,但我还没有找到具体的方法——有可能吗?

共有3个答案

滕璞瑜
2023-03-14

我在我的静态编程语言项目中解决了同样的问题。但它也适用于Java。

我想在yaml配置中指定vault路径,所以我最终得到了以下解决方案,它允许您直接在引导中指定路径。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)
        }
    }
}
org.springframework.cloud.bootstrap.BootstrapConfiguration=com.your.app.configuration.VaultConfig

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

如文档所述,在引导上下文中发生。

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

它应该有效。

石正奇
2023-03-14

应该这样做。

@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);
            }
        };
    }
}

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

问候Arun

澹台博文
2023-03-14

我能够使用通用后端属性将路径转换为我要查找的路径。类似于:

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

不幸的是,这也会拾取Vault位置,如部署/my app和部署/prod/activeProfile,因此请小心不要在这些位置拾取任何您不想拾取的属性。

似乎有一种愿望(和一种实现)允许以更编程的方式指定这些路径。

 类似资料:
  • Secret 对象类型用来保存敏感信息,例如密码、OAuth 令牌和 ssh key。将这些信息放在 secret 中比放在 pod 的定义中或者 docker 镜像中来说更加安全和灵活。 Secret 概览 Secret 是一种包含少量敏感信息例如密码、token 或 key 的对象。这样的信息可能会被放在 Pod spec 中或者镜像中;将其放在一个 secret 对象中可以更好地控制它的用途

  • 但当我从另一个位置(如root或其他位置)运行时,它会抛出一个错误: 线程“main”java.lang.RuntimeException中出现异常:无法在org.apache.hadoop.hive.ql.util.ResourceDownLoader.ensureDirectory(resourceDownLoader.java:123)(org.apache.hadoop.hive.ql.u

  • 我是SpringBoot的新手,我正在尝试使用microservice-a从配置服务器获取配置,但在设置服务器并重新启动microservice-a后,我看不到相应的日志信息,似乎根本无法获取。 在microservice-a中,我更改了应用程序。属性到引导。属性 pom。xml 在配置服务器中,我添加了注释@EnableConfigServer和set应用程序。属性 application.pr

  • 但就是不管用。我也试过在-d中使用这个选项,但这也不起作用。 谢谢你的帮助

  • 问题内容: 我当然缺少有关喷油器的一些基本知识,但是我无法理解为什么 还有这个 按预期工作,而这 会抛出 错误:[$ injector:unpr]未知提供程序:$ provideProvider <-$ provide 如下所述,与提供者有一些特殊的关系,而与实例打交道时,我不确定使块如此特别的东西。 结果,是否没有办法到达外部块,例如,使用(尽管似乎也获得了提供者实例)? 除了好奇心外,这个问题