此版本仍在开发中,目前尚不稳定。如需最新稳定版本,请使用 Spring Cloud Config 5.0.1spring-doc.cadn.net.cn

Vault 后端

Spring Cloud Config Server 还支持 Vault 作为后端。spring-doc.cadn.net.cn

Vault 是一个用于安全访问密钥的工具。</p><p>密钥是指您希望严格控制访问权限的任何内容,例如 API 密钥、密码、证书及其他敏感信息。Vault 为各类密钥提供统一的访问接口,同时确保严格的访问控制并记录详尽的审计日志。spring-doc.cadn.net.cn

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

要启用配置服务器使用 Vault 后端,您可以使用 vault 配置文件运行您的配置服务器。例如,在您的配置服务器的 application.properties 中,您可以添加 spring.profiles.active=vaultspring-doc.cadn.net.cn

默认情况下,Spring Cloud Config Server 使用基于Tokens的认证方式从 Vault 中获取配置。Vault 还支持其他认证方式,例如 AppRole、LDAP、JWT、CloudFoundry 和 Kubernetes 认证。为了使用除 TOKEN 或 X-Config-Token 请求头之外的任何认证方式,我们需要在类路径中包含 Spring Vault Core,以便 Config Server 可以将认证委托给该库。请将以下依赖项添加到您的 Config Server 应用程序中。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。它还假定后端的名称为 secret,密钥为 application。所有这些默认值均可在您的配置服务器的 application.properties 中进行配置。下表描述了可配置的 Vault 属性: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

fullKeyPathspring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

defaultKeyspring-doc.cadn.net.cn

应用程序spring-doc.cadn.net.cn

defaultLabelspring-doc.cadn.net.cn

main(仅在将 enableLabel 设置为 true 时使用)spring-doc.cadn.net.cn

启用标签spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

个人资料分隔符spring-doc.cadn.net.cn

,spring-doc.cadn.net.cn

kvVersionspring-doc.cadn.net.cn

1spring-doc.cadn.net.cn

跳过SSL验证spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

timeoutspring-doc.cadn.net.cn

5spring-doc.cadn.net.cn

命名空间spring-doc.cadn.net.cn

nullspring-doc.cadn.net.cn

前面表格中的所有属性都必须以 spring.cloud.config.server.vault 为前缀,或放置在复合配置的正确 Vault 部分中。

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

Vault 0.10.0 引入了带版本控制的键值后端(k/v 后端版本 2),其暴露的 API 与早期版本不同,现在要求在挂载路径和实际上下文路径之间添加一个 data/,并将密钥封装在 data 对象中。设置 spring.cloud.config.server.vault.kv-version=2 将考虑此变化。

可选地,支持 Vault 企业版 X-Vault-Namespace 请求头。若要将该请求头发送至 Vault,请设置 namespace 属性。spring-doc.cadn.net.cn

在您的配置服务器运行后,您可以向该服务器发送 HTTP 请求,以从 Vault 后端检索值。要执行此操作,您需要一个用于 Vault 服务器的Tokens。spring-doc.cadn.net.cn

首先,将一些数据存入您的 Vault 中,如以下示例所示: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"
         }
      }
   ]
}

客户端向 Config Server 提供必要认证信息,以使 Config Server 能够与 Vault 进行通信的默认方式是设置 X-Config-Token 请求头。然而,您也可以选择不设置该请求头,并在服务器端进行认证配置,方法是使用与 Spring Cloud Vault 相同的配置属性。需要设置的属性是 spring.cloud.config.server.vault.authentication。该属性应设置为所支持的认证方式之一。根据所使用的认证方式,您可能还需要设置其他特定于该认证方式的属性,此时可使用与 spring.cloud.vault 文档中所述相同的属性名称,但前缀改为 spring.cloud.config.server.vault。更多详情请参见 Spring Cloud Vault 参考指南spring-doc.cadn.net.cn

如果省略 X-Config-Token 请求头,并使用服务器属性来设置认证,则 Config Server 应用需要额外依赖 Spring Vault,以启用其他认证选项。有关如何添加该依赖的详细信息,请参阅 Spring Vault 参考指南

多个属性源

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

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

写入 secret/application 的属性对所有使用配置服务器的应用程序均可用。所有使用配置服务器的应用程序。具有名称 myApp 的应用程序将可访问写入 secret/myAppsecret/application 的任何属性。当 myApp 启用了 dev 配置文件时,上述所有路径中写入的属性都将对其可用,其中列表中第一个路径的属性将优先于其他路径的属性。spring-doc.cadn.net.cn

disambiguating复合属性源

默认情况下,配置服务器根据 Vault 键生成属性源名称,例如上例中的vault:myApp。当复合 Vault 后端具有相同的 Vault 密钥时,配置服务器客户端会覆盖先前的属性源。spring-doc.cadn.net.cn

fullKeyPath 设置为 true,属性源将包含完整的后端路径, 例如 vault:secret/backendA/myAppvault:secret/backendB/myApp,防止覆盖先前的属性源。spring-doc.cadn.net.cn

spring.cloud.config.server.composite:
  - type: vault
    fullKeyPath: true
    # ...
    backend: secret/backendA
  - type: vault
    fullKeyPath: true
    # ...
    backend: secret/backendB

启用按标签搜索

默认情况下,Vault 后端在搜索密钥时不会使用标签。您可以通过将 enableLabel 功能标志设置为 true 来更改此行为,并且可选地设置 defaultLabel。当 defaultLabel 未提供时,将使用 mainspring-doc.cadn.net.cn

enableLabel 特性开关开启时,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.

解密 Vault 密钥在属性源中

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

配置步骤

所有与 Vault 集成的配置设置都应放置在您的 application.ymlapplication.properties 中。以下是激活 Vault 配置文件、连接到您的 Vault 服务器以及使用 {vault} 前缀格式化属性所需的特定配置。spring-doc.cadn.net.cn

启用 Vault 配置文件

为您的 Spring Cloud Config Server 激活 Vault 配置文件:spring-doc.cadn.net.cn

spring:
  profiles:
    active: vault

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

属性格式化

使用 {vault} 前缀定义属性,以指定用于检索密钥的 Vault 路径和密钥:spring-doc.cadn.net.cn

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

此格式直接映射到 Vault 中存储密钥的位置(path/to/secret)以及要检索的具体密钥键(key)。spring-doc.cadn.net.cn

错误处理

如果配置服务器在解密过程中遇到任何问题,例如路径不正确、访问问题或密钥缺失,受影响的属性将被加上前缀 invalid.,其值设为 <n/a>。此方法与处理以 {cipher} 开头的属性的方式类似,但专为与 Vault 集成而设计,可在解密失败时提供清晰的反馈。spring-doc.cadn.net.cn