8. 数据库后端

Vault 支持多种数据库秘密后端,可以根据配置的角色动态生成数据库凭据。 这意味着需要访问数据库的服务不再需要配置凭据:它们可以从 Vault 请求凭据,并使用 Vault 的租约机制更轻松地滚动密钥。spring-doc.cadn.net.cn

Spring Cloud Vault 集成这些后端:spring-doc.cadn.net.cn

使用数据库秘密后端需要在配置中启用后端并包含spring-cloud-vault-config-databases依赖项。spring-doc.cadn.net.cn

Vault 自 0.7.1 版本起就包含了一个专用的 database 秘密后端,允许通过插件集成数据库。你可以使用该特定后端,通过使用通用数据库后端。 请确保指定适当的后端路径,例如 spring.cloud.vault.mysql.role.backend=databasespring-doc.cadn.net.cn

示例 36. pom.xml
<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-doc.cadn.net.cn

而数据库后端是通用的,spring.cloud.vault.database 则专门针对JDBC数据库。 用户名和密码可以从spring.datasource.usernamespring.datasource.password属性获取,因此使用Spring Boot将自动获取为DataSource的生成凭据,无需进一步配置。 可以通过设置 spring.cloud.vault.database.username-propertyspring.cloud.vault.database.password-property 来配置属性名称。spring-doc.cadn.net.cn

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.*命名空间下配置多个数据库秘密后端。spring-doc.cadn.net.cn

配置可接受多个数据库后端,用于将凭据材料化到指定的属性中。请确保适当配置 username-propertypassword-propertyspring-doc.cadn.net.cn

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
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-doc.cadn.net.cn

用户名和密码可以从spring.data.cassandra.usernamespring.data.cassandra.password属性中获取,因此使用Spring Boot时无需进一步配置即可拾取生成的凭据。 您可以通过设置 spring.cloud.vault.cassandra.username-propertyspring.cloud.vault.cassandra.password-property 来配置属性名称。spring-doc.cadn.net.cn

spring.cloud.vault:
    cassandra:
        enabled: true
        role: readonly
        backend: cassandra
        username-property: spring.data.cassandra.username
        password-property: spring.data.cassandra.password

8.4. Couchbase 数据库

Spring Cloud Vault 可以获取 Couchbase 的凭据。 集成可以通过将 spring.cloud.vault.couchbase.enabled=true(默认值为 false)进行设置,并通过 spring.cloud.vault.couchbase.role=… 提供角色名称。spring-doc.cadn.net.cn

用户名和密码可以从spring.couchbase.usernamespring.couchbase.password属性中获取,因此使用Spring Boot时无需进一步配置即可拾取生成的凭据。 您可以通过设置 spring.cloud.vault.couchbase.username-propertyspring.cloud.vault.couchbase.password-property 来配置属性名称。spring-doc.cadn.net.cn

spring.cloud.vault:
    couchbase:
        enabled: true
        role: readonly
        backend: database
        username-property: spring.couchbase.username
        password-property: spring.couchbase.password

8.5. Elasticsearch

Spring Cloud Vault 可从 3.0 版本开始获取 Elasticsearch 的凭据。 集成可通过将 spring.cloud.vault.elasticsearch.enabled=true(默认值为 false)设置,并使用 spring.cloud.vault.elasticsearch.role=… 提供角色名来启用。spring-doc.cadn.net.cn

用户名和密码可以从spring.elasticsearch.rest.usernamespring.elasticsearch.rest.password属性中获取,因此使用Spring Boot时无需进一步配置即可拾取生成的凭据。 您可以通过设置 spring.cloud.vault.elasticsearch.username-propertyspring.cloud.vault.elasticsearch.password-property 来配置属性名称。spring-doc.cadn.net.cn

spring.cloud.vault:
    elasticsearch:
        enabled: true
        role: readonly
        backend: mongodb
        username-property: spring.elasticsearch.rest.username
        password-property: spring.elasticsearch.rest.password

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-doc.cadn.net.cn

用户名和密码存储在spring.data.mongodb.usernamespring.data.mongodb.password,因此使用Spring Boot将无需进一步配置即可拾取生成的凭据。 你可以通过设置 spring.cloud.vault.mongodb.username-propertyspring.cloud.vault.mongodb.password-property 来配置属性名称。spring-doc.cadn.net.cn

spring.cloud.vault:
    mongodb:
        enabled: true
        role: readonly
        backend: mongodb
        username-property: spring.data.mongodb.username
        password-property: spring.data.mongodb.password

8.7. MySQL

The mysql 后端在 Vault 0.7.1 中已被弃用,并推荐使用 database 后端并将其挂载为 mysqlspring.cloud.vault.mysql 的配置将在未来版本中移除。

Spring Cloud Vault 可以获取 MySQL 的凭据。 集成可以通过将 spring.cloud.vault.mysql.enabled=true(默认值为 false)进行设置,并通过提供角色名称使用 spring.cloud.vault.mysql.role=… 来启用。spring-doc.cadn.net.cn

用户名和密码可以从spring.datasource.usernamespring.datasource.password属性中获取,因此使用Spring Boot时无需进一步配置即可拾取生成的凭据。 您可以通过设置 spring.cloud.vault.mysql.username-propertyspring.cloud.vault.mysql.password-property 来配置属性名称。spring-doc.cadn.net.cn

spring.cloud.vault:
    mysql:
        enabled: true
        role: readonly
        backend: mysql
        username-property: spring.datasource.username
        password-property: spring.datasource.password

8.8. PostgreSQL

The postgresql 后端在 Vault 0.7.1 中已被弃用,并推荐使用 database 后端并将其挂载为 postgresqlspring.cloud.vault.postgresql 的配置将在未来版本中移除。

Spring Cloud Vault 可以获取 PostgreSQL 的凭据。 集成可以通过将 spring.cloud.vault.postgresql.enabled=true(默认值为 false)进行设置,并通过提供角色名称使用 spring.cloud.vault.postgresql.role=… 来启用。spring-doc.cadn.net.cn

用户名和密码可以从spring.datasource.usernamespring.datasource.password属性中获取,因此使用Spring Boot时无需进一步配置即可拾取生成的凭据。 您可以通过设置 spring.cloud.vault.postgresql.username-propertyspring.cloud.vault.postgresql.password-property 来配置属性名称。spring-doc.cadn.net.cn

spring.cloud.vault:
    postgresql:
        enabled: true
        role: readonly
        backend: postgresql
        username-property: spring.datasource.username
        password-property: spring.datasource.password