秘密后端
键值后端
Spring Cloud Vault 支持键值秘密后端,即有版本(v2)和无版本(v1)。
键值后端允许将任意值存储为键值存储。
单个上下文可以存储一个或多个键值元组。
上下文可以按层级组织。
Spring Cloud Vault 自行判断某个秘密是否使用了版本控制,并将路径映射到其合适的 URL。
Spring Cloud Vault 允许使用应用程序名称和默认上下文名称(应用)与主动配置文件结合使用。
/secret/{application}/{profile}
/secret/{application}
/secret/{default-context}/{profile}
/secret/{default-context}
应用程序名称由以下属性决定:
-
Spring.cloud.vault.kv.application-name -
Spring.cloud.vault.application-name -
spring.application.name
这些轮廓由以下属性决定:
-
Spring.cloud.vault.kv.profiles -
春季.档案.活跃
密钥可以通过将密钥值后端的其他上下文中的密钥加入应用名称,并用逗号分隔,从而获得密钥值后端的其他上下文。
例如,给定应用名称UsefulApp,MySQL 1,ProjectX/AWS,这些文件夹中的每个都将被使用:
-
/secret/有用应用 -
/secret/mysql1 -
/secret/projectx/aws
Spring Cloud Vault 会将所有活跃配置文件添加到可能的上下文路径列表中。 没有任何活跃的配置文件会跳过访问带有配置文件名称的上下文。
属性的暴露方式与存储相同(即没有额外的前缀)。
春云宝库增加了数据/挂载路径与实际上下文路径之间的上下文取决于挂载是否使用版本化键值后端。 |
spring.cloud.vault:
kv:
enabled: true
backend: secret
profile-separator: '/'
default-context: application
application-name: my-app
profiles: local, cloud
-
启用将该值设为false禁用秘密后端配置的使用。 -
后端设置秘密挂载路径以使用 -
默认上下文设置所有应用程序使用的上下文名称 -
应用程序名称覆盖应用程序名称以用于键值后端 -
配置 文件覆盖激活配置文件以用于键值后端 -
配置文件分隔符在带有配置文件的属性源中,将配置文件名称与上下文分离
| 密钥值秘密后端可以在版本化(v2)和非版本化(v1)模式下运行。 |
参见:
领事
Spring Cloud Vault 可以获取 HashiCorp Consul 的凭证。
领事整合需要Spring-cloud-vault-config-consulDependency。
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-vault-config-consul</artifactId>
<version>5.0.0</version>
</dependency>
</dependencies>
集成可以通过设置来启用spring.cloud.vault.consul.enabled=true(默认false)并赋予角色名称spring.cloud.vault.consul.role=....
获得的Tokens存储于spring.cloud.consul.token因此,使用 Spring Cloud Consul 可以直接获取生成的凭证,无需进一步配置。
你可以通过设置来配置属性名称Spring.cloud.vault.consul.token-property.
spring.cloud.vault:
consul:
enabled: true
role: readonly
backend: consul
token-property: spring.cloud.consul.token
-
启用将该值设为true启用 Consul 后端配置 -
角色设定领事角色定义的名称 -
后端设置Consul mount的路径 -
标记性质设置存储Consul ACLTokens的属性名称
兔子MQ
Spring Cloud Vault 可以获取 RabbitMQ 的凭证。
RabbitMQ 集成需要Spring-cloud-vault-config-rabbitmqDependency。
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-vault-config-rabbitmq</artifactId>
<version>5.0.0</version>
</dependency>
</dependencies>
集成可以通过设置来启用Spring.cloud.vault.rabbitmq.enabled=true(默认false)并赋予角色名称Spring.cloud.vault.rabbitmq.role=....
用户名和密码存储于spring.rabbitmq.username和spring.rabbitmq.password所以使用 Spring Boot 可以直接获取生成的凭证,无需额外配置。
你可以通过设置来配置属性名称spring.cloud.vault.rabbitmq.username-property和Spring.cloud.vault.rabbitmq.password-property.
spring.cloud.vault:
rabbitmq:
enabled: true
role: readonly
backend: rabbitmq
username-property: spring.rabbitmq.username
password-property: spring.rabbitmq.password
-
启用将该值设为true启用RabbitMQ后端配置的使用。 -
角色设置RabbitMQ角色定义的角色名称 -
后端设置RabbitMQ挂载路径以使用。 -
用户名-属性设置存储RabbitMQ用户名的属性名称 -
password-属性设置存储RabbitMQ密码的属性名称
AWS
Spring Cloud Vault 可以获取 AWS 的凭证。
AWS集成需要Spring-cloud-vault-config-awsDependency。
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-vault-config-aws</artifactId>
<version>5.0.0</version>
</dependency>
</dependencies>
集成可以通过设置来启用Spring.cloud.vault.aws=true(默认false)并赋予角色名称Spring.cloud.vault.aws.role=....
支持的AWS凭证类型:
-
iam_user(默认)
-
assumed_role(STS)
-
federation_token(STS)
访问密钥和秘密密钥存储于cloud.aws.credentials.accessKey和cloud.aws.credentials.secretKey.所以使用 Spring Cloud 时,AWS 会直接获取生成的凭证,无需额外配置。
你可以通过设置来配置属性名称spring.cloud.vault.aws.access-key-property和spring.cloud.vault.aws.secret-key-property.
对于STS安全Tokens,你可以通过设置来配置属性名称Spring.cloud.vault.aws.session-token-key-property.安全Tokens存储在cloud.aws.credentials.sessionToken(默认情况)。
示例:iam_user
spring.cloud.vault:
aws:
enabled: true
role: readonly
backend: aws
access-key-property: cloud.aws.credentials.accessKey
secret-key-property: cloud.aws.credentials.secretKey
示例:assumed_role(STS)
spring.cloud.vault:
aws:
enabled: true
role: sts-vault-role
backend: aws
credential-type: assumed_role
access-key-property: cloud.aws.credentials.accessKey
secret-key-property: cloud.aws.credentials.secretKey
session-token-key-property: cloud.aws.credentials.sessionToken
ttl: 3600s
role-arn: arn:aws:iam::${AWS_ACCOUNT}:role/sts-app-role
-
启用将该值设为true启用AWS后端配置使用权 -
角色设置AWS角色定义的名称 -
后端设置 AWS 挂载的路径 -
访问密钥属性设置存储 AWS 访问密钥的属性名称 -
秘密密钥属性设置存储AWS密钥的属性名称 -
会话Tokens密钥属性设置存储AWS STS安全Tokens的属性名称。 -
凭证类型将AWS凭证类型设置为该后端使用。默认iam_user -
TTL在使用时,设置STSTokens的TTLassumed_role或federation_token.默认使用vault角色指定的ttl。最小/最大值也受限于 AWS 支持 STS 的范围。 -
role-arn设置IAM角色,假设在使用时为vault角色配置了多个角色assumed_role.
数据库后端
Vault 支持多个数据库秘密后端,基于配置的角色动态生成数据库凭证。 这意味着需要访问数据库的服务不再需要配置凭证:他们可以向 Vault 请求凭证,并利用 Vault 的租赁机制更容易地进行密钥滚动。
Spring Cloud Vault 与以下后端集成:
使用数据库秘密后端需要在配置中启用后端,并且Spring-cloud-vault-config-databasesDependency。
Vault 自 0.7.1 版本以来配备专用的数据库隐藏后端,允许通过插件集成数据库。
你可以用通用数据库后端来使用那个特定的后端。
确保指定合适的后端路径,例如:Spring.cloud.vault.mysql.role.backend=database.
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-vault-config-databases</artifactId>
<version>5.0.0</version>
</dependency>
</dependencies>
| 启用多个符合 JDBC 的数据库会生成凭证并默认存储在相同的属性键中,因此 JDBC 秘密的属性名称需要单独配置。 |
数据库
Spring Cloud Vault 可以获取 www.vaultproject.io/api/secret/databases/index.html 上列出的任何数据库的凭证。
集成可以通过设置来启用spring.cloud.vault.database.enabled=true(默认false)并赋予角色名称spring.cloud.vault.database.role=....
虽然数据库后端是通用的,Spring.cloud.vault.database特别针对JDBC数据库。
用户名和密码可从以下网站获取spring.datasource.username和spring.datasource.password(春.datasource.password)性能
所以使用 Spring Boot 会获取生成的凭证,你的数据来源无需进一步配置。
你可以通过设置来配置属性名称spring.cloud.vault.database.username-property和spring.cloud.vault.database.password-property.
spring.cloud.vault:
database:
enabled: true
role: readonly
backend: database
username-property: spring.datasource.username
password-property: spring.datasource.password
多数据库
有时,单个数据库的凭证不足以实现,因为应用程序可能连接两个或多个同类数据库。
从3.0.5版本开始,Spring Vault 支持在Spring.cloud.vault.databases.*Namespace。
该配置允许多个数据库后端,将凭据实现到指定的属性中。一定要配置好用户名-属性和password-属性适当地。
spring.cloud.vault:
databases:
primary:
enabled: true
role: readwrite
backend: database
username-property: spring.primary-datasource.username
password-property: spring.primary-datasource.password
other-database:
enabled: true
role: readonly
backend: database
username-property: spring.secondary-datasource.username
password-property: spring.secondary-datasource.password
-
<名字>数据库配置的描述性名称。 -
<name>.enabled将该值设为true启用数据库后端配置的使用 -
<姓名>.角色设置数据库角色定义的名称 -
<name>.backend设置数据库挂载的路径 -
<name>.username-property设置存储数据库用户名的属性名称。务必使用独特的物业名称,以避免物业影子效应。 -
<name>.password-property设置存储数据库密码的属性名称,确保使用唯一的属性名称以避免属性阴影。
Spring Cloud Vault 不支持获取新的凭据和配置你的数据来源当租赁期限达到最大时,与他们合作。
也就是说,如果max_ttlVault 中数据库角色的 设置为24小时这意味着应用启动24小时后,它就无法再与数据库进行身份验证。 |
阿帕奇·卡桑德拉
这CassandraVault 0.7.1 中后端已被弃用,建议使用数据库后端并挂载为Cassandra. |
Spring Cloud Vault 可以获取 Apache Cassandra 的凭证。
集成可以通过设置来启用spring.cloud.vault.cassandra.enabled=true(默认false)并赋予角色名称Spring.cloud.vault.cassandra.role=....
用户名和密码可从以下网站获取spring.data.cassandra.username和spring.data.cassandra.password(春.数据.cassandra.password)属性,因此使用 Spring Boot 即可获取生成的凭证,无需进一步配置。
你可以通过设置来配置属性名称spring.cloud.vault.cassandra.username-property和spring.cloud.vault.cassandra.password-property.
spring.cloud.vault:
cassandra:
enabled: true
role: readonly
backend: cassandra
username-property: spring.data.cassandra.username
password-property: spring.data.cassandra.password
-
启用将该值设为true启用Cassandra后端配置 -
角色设置Cassandra角色定义的角色名称 -
后端设定Cassandra安装路径以使用 -
用户名-属性设置Cassandra用户名存储的属性名称 -
password-属性设置Cassandra密码存储的属性名称
Couchbase 数据库
Spring Cloud Vault 可以获取 Couchbase 的凭证。
集成可以通过设置来启用Spring.cloud.vault.couchbase.enabled=true(默认false)并赋予角色名称spring.cloud.vault.couchbase.role=....
用户名和密码可从以下网站获取spring.couchbase.username和spring.couchbase.password(Spring)的属性,因此使用 Spring Boot 即可获取生成的凭证,无需进一步配置。
你可以通过设置来配置属性名称spring.cloud.vault.couchbase.username-property和Spring.cloud.vault.couchbase.password-property.
spring.cloud.vault:
couchbase:
enabled: true
role: readonly
backend: database
username-property: spring.couchbase.username
password-property: spring.couchbase.password
-
启用将该值设为true启用 Couchbase 后端配置 -
角色设置 Couchbase 角色定义的名称 -
后端设置沙发底座安装路径 -
用户名-属性设置了存储 Couchbase 用户名的属性名称 -
password-属性设置存储 Couchbase 密码的属性名称
弹性搜索
Spring Cloud Vault 可以从 3.0 版本起获取 Elasticsearch 的凭证。
集成可以通过设置来启用spring.cloud.vault.elasticsearch.enabled=true(默认false)并赋予角色名称Spring.cloud.vault.elasticsearch.role=....
用户名和密码可从以下网站获取spring.elasticsearch.rest.username和spring.elasticsearch.rest.password属性,因此使用 Spring Boot 即可获取生成的凭证,无需进一步配置。
你可以通过设置来配置属性名称spring.cloud.vault.elasticsearch.username-property(Spring:cloud.vault.elasticsearch.username-property)和spring.cloud.vault.elasticsearch.password-property.
spring.cloud.vault:
elasticsearch:
enabled: true
role: readonly
backend: mongodb
username-property: spring.elasticsearch.rest.username
password-property: spring.elasticsearch.rest.password
-
启用将该值设为true启用 Elasticsearch 数据库后端配置的使用 -
角色设置Elasticsearch角色定义的职称 -
后端设置Elasticsearch安装路径以使用。 -
用户名-属性设置Elasticsearch用户名存储的属性名称 -
password-属性设置存储 Elasticsearch 密码的属性名称
MongoDB
这蒙戈德Vault 0.7.1 中后端已被弃用,建议使用数据库后端并挂载为蒙戈德. |
Spring Cloud Vault 可以获取 MongoDB 的凭证。
集成可以通过设置来启用Spring.cloud.vault.mongodb.enabled=true(默认false)并赋予角色名称Spring.cloud.vault.mongodb.role=....
用户名和密码存储于spring.data.mongodb.username和spring.data.mongodb.password(春.数据.mongodb.password)所以使用 Spring Boot 可以直接获取生成的凭证,无需额外配置。
你可以通过设置来配置属性名称spring.cloud.vault.mongodb.username-property和spring.cloud.vault.mongodb.password-property.
spring.cloud.vault:
mongodb:
enabled: true
role: readonly
backend: mongodb
username-property: spring.data.mongodb.username
password-property: spring.data.mongodb.password
-
启用将该值设为true启用MongodB后端配置的使用。 -
角色设定MongoDB角色定义的职称 -
后端设置MongoDB挂载路径以使用 -
用户名-属性设置MongoDB用户名存储的属性名称 -
password-属性设置MongoDB密码存储的属性名称
MySQL
这MySQLVault 0.7.1 中后端已被弃用,建议使用数据库后端并挂载为MySQL.
配置Spring.cloud.vault.mysql将在未来版本中移除。 |
Spring Cloud Vault 可以获取 MySQL 的凭证。
集成可以通过设置来启用spring.cloud.vault.mysql.enabled=true(默认false)并赋予角色名称Spring.cloud.vault.mysql.role=....
用户名和密码可从以下网站获取spring.datasource.username和spring.datasource.password(春.datasource.password)属性,因此使用 Spring Boot 即可获取生成的凭证,无需进一步配置。
你可以通过设置来配置属性名称Spring.cloud.vault.mysql.username-property和Spring.cloud.vault.mysql.password-property.
spring.cloud.vault:
mysql:
enabled: true
role: readonly
backend: mysql
username-property: spring.datasource.username
password-property: spring.datasource.password
-
启用将该值设为true启用MySQL后端配置的使用。 -
角色设置MySQL角色定义的职称 -
后端设置MySQL挂载的路径 -
用户名-属性设置存储MySQL用户名的属性名称 -
password-属性设置存储 MySQL 密码的属性名称
PostgreSQL
这PostgreSQLVault 0.7.1 中后端已被弃用,建议使用数据库后端并挂载为PostgreSQL.
配置Spring.cloud.vault.postgresql将在未来版本中移除。 |
Spring Cloud Vault 可以获取 PostgreSQL 的凭证。
集成可以通过设置来启用spring.cloud.vault.postgresql.enabled=true(默认false)并赋予角色名称Spring.cloud.vault.postgresql.role=....
用户名和密码可从以下网站获取spring.datasource.username和spring.datasource.password(春.datasource.password)属性,因此使用 Spring Boot 即可获取生成的凭证,无需进一步配置。
你可以通过设置来配置属性名称Spring.cloud.vault.postgresql.username-property和Spring.cloud.vault.postgresql.password-property.
spring.cloud.vault:
postgresql:
enabled: true
role: readonly
backend: postgresql
username-property: spring.datasource.username
password-property: spring.datasource.password
-
启用将该值设为true启用PostgreSQL后端配置的使用。 -
角色设置PostgreSQL角色定义的名称 -
后端设置PostgreSQL挂载路径以使用 -
用户名-属性设置存储PostgreSQL用户名的属性名称 -
password-属性设置 PostgreSQL 密码存储的属性名称
自定义哪些秘密后端要以PropertySource形式公开
Spring Cloud Vault 使用基于属性的配置来创建地产来源s 代表键值和发现的秘密后端。
发现的后端提供VaultSecretBackendDescriptor用 BEANS 来描述配置状态,以便使用秘密后端地产来源.
一个SecretBackendMetadataFactory是创建SecretBackendMetadata包含路径、名称和属性转换配置的对象。
SecretBackendMetadata用于支持某一特定地产来源.
你可以注册VaultConfigurer为了定制。
如果您提供VaultConfigurer.
不过你可以用SecretBackendConfigurer.registerDefaultKeyValueSecretBackends()和SecretBackendConfigurer.registerDefaultDiscoveredSecretBackends().
public class CustomizationBean implements VaultConfigurer {
@Override
public void addSecretBackends(SecretBackendConfigurer configurer) {
configurer.add("secret/my-application");
configurer.registerDefaultKeyValueSecretBackends(false);
configurer.registerDefaultDiscoveredSecretBackends(true);
}
}
SpringApplication application = new SpringApplication(MyApplication.class);
application.addBootstrapper(VaultBootstrapper.fromConfigurer(new CustomizationBean()));
自定义秘密后端实现
Spring Cloud Vault 自带了最常见后端集成的秘密后台支持。
你可以通过提供一个实现来与任何类型的后端集成,描述如何从你想使用的后端获取数据,以及如何通过提供PropertyTransformer.
为后端添加自定义实现需要实现两个接口:
-
org.springframework.cloud.vault.config.VaultSecretBackendDescriptor -
org.springframework.cloud.vault.config.SecretBackendMetadataFactory
VaultSecretBackendDescriptor通常是存储配置数据的对象,例如VaultDatabaseProperties.Spring Cloud Vault 要求你的类型被注释为@ConfigurationProperties以实现从配置中实现该类。
SecretBackendMetadataFactory接受VaultSecretBackendDescriptor以创造实际的SecretBackendMetadata包含你Vault服务器内上下文路径的对象,解析参数化上下文路径所需的路径变量,以及PropertyTransformer.
双VaultSecretBackendDescriptor和SecretBackendMetadataFactory类型必须注册于Spring。工厂这是 Spring 提供的扩展机制,类似于 Java 的 ServiceLoader。