8. 数据库后端
Vault 支持多种数据库秘密后端,可以根据配置的角色动态生成数据库凭据。 这意味着需要访问数据库的服务不再需要配置凭据:它们可以从 Vault 请求凭据,并使用 Vault 的租约机制更轻松地滚动密钥。
Spring Cloud Vault 集成这些后端:
使用数据库秘密后端需要在配置中启用后端并包含spring-cloud-vault-config-databases依赖项。
Vault 自 0.7.1 版本起就包含了一个专用的 database 秘密后端,允许通过插件集成数据库。你可以使用该特定后端,通过使用通用数据库后端。
请确保指定适当的后端路径,例如 spring.cloud.vault.mysql.role.backend=database。
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-vault-config-databases</artifactId>
<version>3.1.3</version>
</dependency>
</dependencies>
| 启用多个JDBC兼容数据库将生成凭据,并默认使用相同的属性键存储,因此JDBC密钥的属性名称需要分别配置。 |
8.1. 数据库
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属性获取,因此使用Spring Boot将自动获取为DataSource的生成凭据,无需进一步配置。
可以通过设置
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
8.2. 多个数据库
有时,单个数据库的凭据可能不够,因为应用程序可能会连接到两个或更多的相同类型的数据库。
从3.0.5版本开始,Spring Vault支持在spring.cloud.vault.databases.*命名空间下配置多个数据库秘密后端。
配置可接受多个数据库后端,用于将凭据材料化到指定的属性中。请确保适当配置 username-property 和 password-property。
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>描述性的数据库配置名称。 -
<name>.enabled将此值设置为true可启用数据库后端配置的使用 -
<name>.role设置数据库角色定义的角色名称 -
<name>.backend设置要使用的数据库挂载路径 -
<name>.username-property设置存储数据库用户名的属性名称。请确保使用唯一的属性名称以避免属性遮蔽。 -
<name>.password-property设置存储数据库密码的属性名称,请确保使用唯一的属性名称以避免属性遮蔽。
Spring Cloud Vault 不支持在最大租约时间已达到时获取新凭据,并用 DataSource 与它们进行配置。
也就是说,如果 Vault 中 Database 角色的 max_ttl 设置为 24h,这意味着在应用程序启动后24小时,它将无法再与数据库进行身份验证。 |
8.3. Apache Cassandra
The cassandra 后端在 Vault 0.7.1 中已被弃用,并推荐使用 database 后端并将其挂载为 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属性中获取,因此使用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
-
将此值设置为
enabled;将其设置为true会启用 Cassandra 后端配置的使用 -
role设置 Cassandra 角色定义的角色名称 -
backend设置将使用的 Cassandra 挂载路径 -
username-property设置存储 Cassandra 用户名的属性名称 -
password-property设置属性名,用于存储Cassandra的密码
8.4. Couchbase 数据库
Spring Cloud Vault 可以获取 Couchbase 的凭据。
集成可以通过将 spring.cloud.vault.couchbase.enabled=true(默认值为 false)进行设置,并通过 spring.cloud.vault.couchbase.role=… 提供角色名称。
用户名和密码可以从spring.couchbase.username
和spring.couchbase.password属性中获取,因此使用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
-
enabledsetting this value totrueenables the Couchbase backend config usage -
role设置 Couchbase 角色定义的角色名称 -
backendsets the path of the Couchbase mount to use -
username-property设置属性名,用于存储 Couchbase 的用户名 -
password-property设置Couchbase密码存储的属性名称
见 also: Couchbase 数据库插件文档
8.5. Elasticsearch
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.password-property
来配置属性名称。
spring.cloud.vault:
elasticsearch:
enabled: true
role: readonly
backend: mongodb
username-property: spring.elasticsearch.rest.username
password-property: spring.elasticsearch.rest.password
-
enabled;将此值设置为true即可启用Elasticsearch数据库后端配置的使用 -
role设置 Elasticsearch 角色定义的角色名称 -
backend设置要使用的 Elasticsearch 挂载路径 -
username-property"0" 设置Elasticsearch用户名存储的属性名称 -
password-property设置Elasticsearch密码存储的属性名称
8.6. MongoDB
The mongodb 后端在 Vault 0.7.1 中已被弃用,并推荐使用 database 后端并将其挂载为 mongodb。 |
Spring Cloud Vault 可以获取 MongoDB 的凭据。
集成可以通过将 spring.cloud.vault.mongodb.enabled=true(默认值为 false)进行设置,并通过提供角色名称使用 spring.cloud.vault.mongodb.role=… 来启用。
用户名和密码存储在spring.data.mongodb.username
和spring.data.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
-
enabled将此值设置为true以启用 MongoDB 后端配置的使用 -
role设置 MongoDB 角色定义的角色名称 -
backend设置要使用的 MongoDB 挂载路径 -
username-property设置存储 MongoDB 用户名的属性名称 -
password-property设置属性名称,用于存储 MongoDB 密码
见 also: Vault 文档: 使用 Vault 配置 MongoDB
8.7. MySQL
The mysql 后端在 Vault 0.7.1 中已被弃用,并推荐使用 database 后端并将其挂载为 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属性中获取,因此使用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
-
enabled将此值设置为true会启用 MySQL 后端配置的使用 -
role设置 MySQL 角色定义的角色名称 -
backend设置要使用的 MySQL 挂载路径 -
username-property设置属性名,用于存储MySQL用户名 -
password-property设置属性名称,用于存储MySQL密码
见 also: Vault 文档: 使用 Vault 设置 MySQL
8.8. PostgreSQL
The postgresql 后端在 Vault 0.7.1 中已被弃用,并推荐使用 database 后端并将其挂载为 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属性中获取,因此使用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
-
enabled将此值设置为true会启用 PostgreSQL 后端配置的使用 -
role设置PostgreSQL角色定义的角色名称 -
backend设置要使用的 PostgreSQL 挂载路径 -
username-property设置存储PostgreSQL用户名的属性名 -
password-property用于存储PostgreSQL密码的属性名设置