Vault 后端

Spring Cloud 配置服务器也支持 Vault 作为后端。spring-doc.cadn.net.cn

Vault 是一个用于安全访问秘密的工具。 秘密是指任何你希望严格控制访问的物品,比如API密钥、密码、证书以及其他敏感信息。Vault 为任何秘密提供统一接口,同时提供严格的访问控制并记录详细的审计日志。spring-doc.cadn.net.cn

有关Vault的更多信息,请参阅Vault快速入门指南spring-doc.cadn.net.cn

要让配置服务器使用Vault后端,你可以用轮廓。 比如,在你的配置服务器中application.properties,你可以添加Spring.Profiles.active=vault.spring-doc.cadn.net.cn

默认情况下,Spring Cloud 配置服务器使用基于Tokens的认证来从 Vault 获取配置。 Vault 还支持额外的认证方法,如 AppRole、LDAP、JWT、CloudFoundry、Kubernetes Auth。 为了使用除 TOKEN 或 X-Config-Token 头以外的任何认证方法,我们需要将 Spring Vault Core 放在类路径上,这样配置服务器才能将认证委派给该库。请将以下依赖添加到您的配置服务器应用中。spring-doc.cadn.net.cn

Maven(pom.xml)spring-doc.cadn.net.cn

<dependencies>
	<dependency>
		<groupId>org.springframework.vault</groupId>
		<artifactId>spring-vault-core</artifactId>
	</dependency>
</dependencies>

Gradle(build.gradle)spring-doc.cadn.net.cn

dependencies {
    implementation "org.springframework.vault:spring-vault-core"
}

默认情况下,配置服务器假设你的Vault服务器运行在127.0.0.1:8200. 它还假设后端名称为秘密密钥为应用. 所有这些默认设置都可以在你的配置服务器中配置application.properties. 下表描述了可配置的保险库属性:spring-doc.cadn.net.cn

名称 默认值

主机spring-doc.cadn.net.cn

127.0.0.1spring-doc.cadn.net.cn

端口spring-doc.cadn.net.cn

8200spring-doc.cadn.net.cn

方案spring-doc.cadn.net.cn

httpspring-doc.cadn.net.cn

后端spring-doc.cadn.net.cn

秘密spring-doc.cadn.net.cn

defaultKeyspring-doc.cadn.net.cn

应用spring-doc.cadn.net.cn

默认标签spring-doc.cadn.net.cn

主要(仅在enable标签设置为true)spring-doc.cadn.net.cn

enable标签spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

profileSepacatorspring-doc.cadn.net.cn

,spring-doc.cadn.net.cn

kv版本spring-doc.cadn.net.cn

1spring-doc.cadn.net.cn

skipSsl验证spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

超时spring-doc.cadn.net.cn

5spring-doc.cadn.net.cn

Namespacespring-doc.cadn.net.cn

spring-doc.cadn.net.cn

前表中的所有性质都必须以Spring.cloud.config.server.vault或放置在复合配置的正确拱顶部分。

所有可配置属性均可在org.springframework.cloud.config.server.environment.VaultEnvironmentProperties.spring-doc.cadn.net.cn

Vault 0.10.0引入了版本化键值后端(k/v后端2版),它暴露了与早期版本不同的API,现在需要数据/挂载路径与实际上下文路径之间,并将秘密包裹在数据对象。设置Spring.cloud.config.server.vault.kv-version=2我会考虑这些。

可选地,也支持Vault Enterprise。X-金库命名空间页眉。要把它发送到Vault,设置Namespace财产。spring-doc.cadn.net.cn

配置服务器运行时,你可以向服务器发送HTTP请求以获取 Vault 后端的值。 为此,你需要一个Vault服务器的Tokens。spring-doc.cadn.net.cn

首先,将一些数据放入你的保险库,如下示例所示:spring-doc.cadn.net.cn

$ vault kv put secret/application foo=bar baz=bam
$ vault kv put secret/myapp foo=myappsbar

其次,向你的配置服务器发送HTTP请求以获取这些值,如下示例所示:spring-doc.cadn.net.cn

$ curl -X “GET” “http://localhost:8888/myapp/default” -H “X-Config-Token: yourtoken”spring-doc.cadn.net.cn

你应该会看到类似以下回复:spring-doc.cadn.net.cn

{
   "name":"myapp",
   "profiles":[
      "default"
   ],
   "label":null,
   "version":null,
   "state":null,
   "propertySources":[
      {
         "name":"vault:myapp",
         "source":{
            "foo":"myappsbar"
         }
      },
      {
         "name":"vault:application",
         "source":{
            "baz":"bam",
            "foo":"bar"
         }
      }
   ]
}

客户端提供必要的认证,让配置服务器与 Vault 通信的默认方式是设置 X-Config-Token 头部。不过,你也可以省略头部,在服务器端配置认证,方法是设置与 Spring Cloud Vault 相同的配置属性。需要设置的属性是spring.cloud.config.server.vault.authentication. 它应该设置为支持的认证方法之一。你可能还需要设置其他针对你所用认证方法的属性,使用与文档中描述的属性相同的名称春云.vault而是使用Spring.cloud.config.server.vault前缀。 详情请参见春云金库参考指南spring-doc.cadn.net.cn

如果你省略了 X-Config-Token 头部,而是用服务器属性设置认证,配置服务器应用程序需要对 Spring Vault 有额外的依赖来启用额外的认证选项。请参阅 Spring Vault 参考指南了解如何添加该依赖。

多重属性来源

使用 Vault 时,你可以为应用程序提供多个属性源。例如,假设你在 Vault 中写入了以下路径的数据:spring-doc.cadn.net.cn

secret/myApp,dev
secret/myApp
secret/application,dev
secret/application

属性写入秘密/应用所有使用配置服务器的应用程序均可使用。一个名为myApp,将具有写入的任意属性secret/myApp秘密/应用它能被利用。 什么时候myApp具有开发启用配置文件后,写入上述路径的属性将被调用,列表中第一个路径的属性优先于其他路径。spring-doc.cadn.net.cn

启用标签搜索

默认情况下,Vault 后端在搜索密钥时不会使用该标签。你可以通过设置enable标签特征标志true并且可选地,设置默认标签. 什么时候默认标签未提供主要将被使用。spring-doc.cadn.net.cn

什么时候enable标签功能标志已开启,Vault 中的秘密路径中应始终包含三个段(应用名称、配置文件和标签)。所以上一节示例中启用功能标志的示例是:spring-doc.cadn.net.cn

secret/myApp,dev,myLabel
secret/myApp,default,myLabel       # default profile
secret/application,dev,myLabel     # default application name
secret/application,default,myLabel # default application name and default profile.

在财产源中解密保险库秘密

Spring Cloud 配置服务器支持通过使用特殊的占位前缀解密 Vault 属性{金库}. 该功能允许在运行时直接从Vault动态解析敏感配置属性。spring-doc.cadn.net.cn

配置步骤

所有与Vault集成的配置都应该放在你的application.ymlapplication.properties. 以下是激活Vault配置文件、连接Vault服务器以及使用以下方式格式化属性所需的具体配置。{金库}前缀。spring-doc.cadn.net.cn

启用保险库配置文件

激活您的 Spring Cloud 配置服务器的 Vault 配置文件:spring-doc.cadn.net.cn

spring:
  profiles:
    active: vault

保险库配置

设置与你的Vault服务器的连接,并填写必要的认证信息:spring-doc.cadn.net.cn

spring:
  cloud:
    config:
      server:
        vault:
          host: vault.example.com
          port: 8200
          scheme: https
          backend: secret
          defaultKey: application
          kvVersion: 2
          authentication: TOKEN
          token: ${VAULT_TOKEN}
          skipSslValidation: true

这些设置指定了Vault服务器地址、认证方式以及访问Vault所需的Tokens。spring-doc.cadn.net.cn

属性格式化

定义性质,其中{金库}前缀用于指定检索密钥的保险库路径和密钥:spring-doc.cadn.net.cn

some:
  sensitive:
    value: '{vault}:path/to/secret#key'

该格式直接映射到存放密钥的 Vault 位置(路径/去/秘密)以及特定的秘密密钥(钥匙)将被取回。spring-doc.cadn.net.cn

错误处理

如果配置服务器在解密过程中遇到任何问题,如路径错误、访问问题或密钥缺失,受影响属性将以无效。其值将被设置为<无此意>. 这种方法类似于处理以{密码}但它专门为与Vault集成而设计,解密失败时能提供清晰反馈。spring-doc.cadn.net.cn