Vault Backend
Spring Cloud Config Server 还支持 Vault作为后端。
Vault 是一个安全访问机密的工具。机密是你希望对其访问进行严格控制的任何内容,例如 API 密钥、密码、证书和其他敏感信息。Vault 为任何机密提供统一的界面,同时提供严格的访问控制并记录详细的审计日志。
有关 Vault 的更多信息,请参阅 Vault quick start guide。
若要允许配置服务器使用 Vault 后端,你可以使用 vault
配置文件来运行配置服务器。例如,你可以在配置服务器的 application.properties
中添加 spring.profiles.active=vault
。
默认情况下,Spring Cloud Config Server 使用基于令牌的身份验证从 Vault 中获取配置。Vault 还支持其他身份验证方法,如 AppRole、LDAP、JWT、CloudFoundry、Kubernetes Auth。为了使用除令牌或 X-Config-Token 头文件以外的其他任何身份验证方法,我们需要在类路径中添加 Spring Vault Core,以便配置服务器可以将身份验证委托给该库。请将以下依赖项添加到你的配置服务器应用中。
Maven (pom.xml)
<dependencies> <dependency> <groupId>org.springframework.vault</groupId> <artifactId>spring-vault-core</artifactId> </dependency> </dependencies>
Gradle (build.gradle)
dependencies { implementation "org.springframework.vault:spring-vault-core" }
默认情况下,配置服务器假定你的 Vault 服务器在 http://127.0.0.1:8200
中运行。它还假定后端名称为 secret
且密钥为 application
。这些默认值都可以在配置服务器的 application.properties
中配置。下表描述了可配置的 Vault 属性:
Name | Default Value |
---|---|
host |
127.0.0.1 |
port |
8200 |
scheme |
http |
backend |
secret |
defaultKey |
application |
profileSeparator |
, |
kvVersion |
1 |
skipSslValidation |
false |
timeout |
5 |
namespace |
null |
前表中的所有属性都必须以 spring.cloud.config.server.vault
为前缀,或放置在复合配置的正确 Vault 部分中。
所有可配置属性均可以在 org.springframework.cloud.config.server.environment.VaultEnvironmentProperties
中找到。
Vault 0.10.0 引入了版本化的键值后端(k/v 后端版本 2),它公开了与早期版本不同的 API,现在它需要一个 data/
介于挂载路径和实际上下文路径之间,并将机密包装在 data
对象中。设置 spring.cloud.config.server.vault.kv-version=2
将考虑这一点。
还可以选择支持 Vault Enterprise X-Vault-Namespace
头文件。若要将其发送到 Vault,请设置 namespace
属性。
让配置服务器运行,你可以向服务器发出 HTTP 请求,以从 Vault 后端获取值。若要执行此操作,你需要服务器的令牌。
首先,将一些数据放入你的 Vault,如下例所示:
$ vault kv put secret/application foo=bar baz=bam
$ vault kv put secret/myapp foo=myappsbar
其次,按如下例所示向配置服务器发出 HTTP 请求以检索值:
$ curl -X "GET" "http://localhost:8888/myapp/default" -H "X-Config-Token: yourtoken"
您应该会看到类似于以下内容的响应:
{
"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.config.server.vault.authentication
。它应设置为支持的身份验证方法之一。您可能还需要使用与 spring.cloud.vault
文档中相同的属性名,同时使用 spring.cloud.config.server.vault
前缀,来设置特定于所使用身份验证方法的其他属性。请参阅 Spring Cloud Vault Reference Guide 了解更详细的内容。
如果您省略 X-Config-Token 标头并使用服务器属性来设置身份验证,那么 Config Server 应用程序需要一个对 Spring Vault 的其他依赖项来启用其他身份验证选项。有关如何添加该依赖项,请参阅 Spring Vault Reference Guide。
Multiple Properties Sources
使用 Vault 时,您可以为您的应用提供多个属性源。例如,假设您已将数据写入 Vault 中的以下路径:
secret/myApp,dev
secret/myApp
secret/application,dev
secret/application
写入到 secret/application
的属性可供 [使用配置服务器的所有应用_vault_server] 使用。名为 myApp
的应用可供具有写入到 secret/myApp
和 secret/application
的任何属性使用。当启用 myApp
的 dev
配置文件时,可供它使用的属性将写入到上述所有路径,且列表中第一个路径的属性优先于其他路径。