Spring Cloud Config Server 还支持将 Vault 作为后端。Spring中文文档

保险柜是一种用于安全访问机密的工具。 机密是指要严格控制访问权限的任何内容,例如 API 密钥、密码、证书和其他敏感信息。保险柜为任何密钥提供统一的接口,同时提供严格的访问控制并记录详细的审核日志。Spring中文文档

有关 Vault 的详细信息,请参阅 Vault 快速入门指南Spring中文文档

要使配置服务器能够使用 Vault 后端,您可以使用配置文件运行配置服务器。 例如,在配置服务器的 中,可以添加 .vaultapplication.propertiesspring.profiles.active=vaultSpring中文文档

默认情况下,Spring Cloud Config Server使用基于令牌的身份验证从Vault获取配置。 Vault 还支持其他身份验证方法,如 AppRole、LDAP、JWT、CloudFoundry、Kubernetes Auth。 为了使用 TOKEN 或 X-Config-Token 标头以外的任何身份验证方法,我们需要在类路径上具有 Spring Vault Core,以便 Config Server 可以将身份验证委托给该库。请将以下依赖项添加到您的 Config Server App。Spring中文文档

Maven (pom.xml)Spring中文文档

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

Gradle (build.gradle)Spring中文文档

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

默认情况下,配置服务器假定您的 Vault 服务器在 下运行。 它还假定后端的名称是,键是 。 所有这些默认值都可以在配置服务器的 . 下表描述了可配置的 Vault 属性:127.0.0.1:8200secretapplicationapplication.propertiesSpring中文文档

名字 默认值

主机Spring中文文档

127.0.0.1Spring中文文档

港口Spring中文文档

8200Spring中文文档

方案Spring中文文档

网址Spring中文文档

后端Spring中文文档

秘密Spring中文文档

defaultKeySpring中文文档

应用Spring中文文档

profileSeparatorSpring中文文档

,Spring中文文档

kv版本Spring中文文档

1Spring中文文档

skipSslValidationSpring中文文档

Spring中文文档

超时Spring中文文档

5Spring中文文档

命名空间Spring中文文档

Spring中文文档

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

所有可配置属性都可以在 中找到。org.springframework.cloud.config.server.environment.VaultEnvironmentPropertiesSpring中文文档

Vault 0.10.0 引入了一个版本控制键值后端(k/v 后端版本 2),它公开了与早期版本不同的 API,它现在需要在挂载路径和实际上下文路径之间有一个,并将密钥包装在对象中。设置将考虑到这一点。data/dataspring.cloud.config.server.vault.kv-version=2

(可选)支持 Vault Enterprise 标头。要将其发送到保险柜,请设置属性。X-Vault-NamespacenamespaceSpring中文文档

在配置服务器运行的情况下,您可以向服务器发出 HTTP 请求以检索 Vault 后端中的值。 为此,您需要 Vault 服务器的令牌。Spring中文文档

首先,将一些数据放入 Vault 中,如以下示例所示:Spring中文文档

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

其次,向配置服务器发出 HTTP 请求以检索值,如以下示例所示:Spring中文文档

$ curl -X "GET" "http://localhost:8888/myapp/default" -H "X-Config-Token: yourtoken"Spring中文文档

您应看到类似于以下内容的响应:Spring中文文档

{
   "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 与 Vault 通信的默认方法是设置 X-Config-Token 标头。 但是,您可以通过设置与 Spring Cloud Vault 相同的配置属性来省略标头并在服务器中配置身份验证。 要设置的属性是 。 应将其设置为受支持的身份验证方法之一。 您可能还需要设置特定于所使用的身份验证方法的其他属性,方法是使用与所记录的相同的属性名称,但改用前缀。 有关详细信息,请参阅 Spring Cloud Vault 参考指南spring.cloud.config.server.vault.authenticationspring.cloud.vaultspring.cloud.config.server.vaultSpring中文文档

如果省略 X-Config-Token 标头并使用服务器属性来设置身份验证,则 Config Server 应用程序需要对 Spring Vault 的额外依赖才能启用其他身份验证选项。 请参阅 Spring Vault 参考指南,了解如何添加该依赖项。
名字 默认值

主机Spring中文文档

127.0.0.1Spring中文文档

港口Spring中文文档

8200Spring中文文档

方案Spring中文文档

网址Spring中文文档

后端Spring中文文档

秘密Spring中文文档

defaultKeySpring中文文档

应用Spring中文文档

profileSeparatorSpring中文文档

,Spring中文文档

kv版本Spring中文文档

1Spring中文文档

skipSslValidationSpring中文文档

Spring中文文档

超时Spring中文文档

5Spring中文文档

命名空间Spring中文文档

Spring中文文档

上表中的所有属性都必须以复合配置的正确 Vault 部分为前缀或放置在该部分中。spring.cloud.config.server.vault
Vault 0.10.0 引入了一个版本控制键值后端(k/v 后端版本 2),它公开了与早期版本不同的 API,它现在需要在挂载路径和实际上下文路径之间有一个,并将密钥包装在对象中。设置将考虑到这一点。data/dataspring.cloud.config.server.vault.kv-version=2
如果省略 X-Config-Token 标头并使用服务器属性来设置身份验证,则 Config Server 应用程序需要对 Spring Vault 的额外依赖才能启用其他身份验证选项。 请参阅 Spring Vault 参考指南,了解如何添加该依赖项。

多个属性源

使用 Vault 时,您可以为应用程序提供多个属性源。 例如,假设您已将数据写入 Vault 中的以下路径:Spring中文文档

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

写入的属性可供所有使用 Config Server 的应用程序使用。 名称为 的应用程序将具有写入和可用的任何属性。 启用配置文件后,写入上述所有路径的属性将可供其使用,列表中第一个路径中的属性优先于其他属性。secret/applicationmyAppsecret/myAppsecret/applicationmyAppdevSpring中文文档

解密属性源中的 Vault 机密

Spring Cloud Config Server 支持使用特殊的占位符前缀从 Vault 解密属性。此功能允许在运行时直接从 Vault 动态解析敏感配置属性。{vault}Spring中文文档

配置步骤

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

启用 Vault 配置文件

激活 Spring Cloud Config Server 的 Vault 配置文件:Spring中文文档

spring:
  profiles:
    active: vault

Vault 配置

使用必要的身份验证详细信息设置与保险柜服务器的连接:Spring中文文档

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 所需的令牌。Spring中文文档

属性格式

使用前缀定义属性,以指定用于检索机密的 Vault 路径和密钥:{vault}Spring中文文档

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

此格式直接映射到 Vault 中存储密钥的位置 () 和要检索的特定密钥 ()。path/to/secretkeySpring中文文档

错误处理

如果 Config Server 在解密过程中遇到任何问题,例如路径不正确、访问问题或缺少密钥,则受影响的属性将以前缀为前缀,其值将设置为 。此方法类似于处理以 为前缀的属性,但它是专门为与 Vault 集成而定制的,可在解密失败时提供清晰的反馈。invalid.<n/a>{cipher}Spring中文文档