秘密后端

键值后端

Spring Cloud Vault 支持键值密钥后端,即版本控制 (v2) 和未版本控制 (v1)。 键值后端允许将任意值存储为键值存储。 单个上下文可以存储一个或多个键值元组。 上下文可以按层次结构组织。 Spring Cloud Vault 自行确定 secret 是否使用版本控制,并将路径映射到其适当的 URL。 Spring Cloud Vault 允许使用应用程序名称和默认上下文名称(application) 与活动配置文件结合使用。spring-doc.cadn.net.cn

/secret/{application}/{profile}
/secret/{application}
/secret/{default-context}/{profile}
/secret/{default-context}

应用程序名称由以下属性决定:spring-doc.cadn.net.cn

配置文件由属性决定:spring-doc.cadn.net.cn

可以通过将密钥的路径添加到应用程序名称(以逗号分隔)中,从键值后端中的其他上下文中获取密钥。 例如,给定应用程序名称usefulapp,mysql1,projectx/aws,将使用以下每个文件夹:spring-doc.cadn.net.cn

Spring Cloud Vault 将所有活动配置文件添加到可能的上下文路径列表中。 没有活动配置文件将跳过访问具有配置文件名称的上下文。spring-doc.cadn.net.cn

属性像存储一样公开(即没有额外的前缀)。spring-doc.cadn.net.cn

Spring Cloud Vault 将data/挂载路径和实际上下文路径之间的上下文,具体取决于挂载是否使用版本化的键值后端。
spring.cloud.vault:
    kv:
        enabled: true
        backend: secret
        profile-separator: '/'
        default-context: application
        application-name: my-app
        profiles: local, cloud
键值密钥后端可以在版本化 (v2) 和非版本化 (v1) 模式下运行。

领事

Spring Cloud Vault 可以获取 HashiCorp Consul 的凭据。 Consul 集成需要spring-cloud-vault-config-consulDependency。spring-doc.cadn.net.cn

pom.xml
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-vault-config-consul</artifactId>
        <version>4.3.0</version>
    </dependency>
</dependencies>

可以通过将spring.cloud.vault.consul.enabled=true(默认false) 并为角色名称提供spring.cloud.vault.consul.role=….spring-doc.cadn.net.cn

获得的Tokens存储在spring.cloud.consul.token因此,使用 Spring Cloud Consul 无需进一步配置即可获取生成的凭据。 您可以通过设置spring.cloud.vault.consul.token-property.spring-doc.cadn.net.cn

spring.cloud.vault:
    consul:
        enabled: true
        role: readonly
        backend: consul
        token-property: spring.cloud.consul.token

兔子MQ

Spring Cloud Vault 可以获取 RabbitMQ 的凭据。spring-doc.cadn.net.cn

RabbitMQ 集成需要spring-cloud-vault-config-rabbitmqDependency。spring-doc.cadn.net.cn

pom.xml
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-vault-config-rabbitmq</artifactId>
        <version>4.3.0</version>
    </dependency>
</dependencies>

可以通过将spring.cloud.vault.rabbitmq.enabled=true(默认false) 并为角色名称提供spring.cloud.vault.rabbitmq.role=….spring-doc.cadn.net.cn

用户名和密码存储在spring.rabbitmq.usernamespring.rabbitmq.password因此,使用 Spring Boot 将获取生成的凭据,而无需进一步配置。 您可以通过设置spring.cloud.vault.rabbitmq.username-propertyspring.cloud.vault.rabbitmq.password-property.spring-doc.cadn.net.cn

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

AWS

Spring Cloud Vault 可以获取 AWS 的凭据。spring-doc.cadn.net.cn

AWS 集成需要spring-cloud-vault-config-awsDependency。spring-doc.cadn.net.cn

pom.xml
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-vault-config-aws</artifactId>
        <version>4.3.0</version>
    </dependency>
</dependencies>

可以通过将spring.cloud.vault.aws=true(默认false) 并为角色名称提供spring.cloud.vault.aws.role=….spring-doc.cadn.net.cn

支持的 AWS 凭证类型:spring-doc.cadn.net.cn

访问密钥和密钥存储在cloud.aws.credentials.accessKeycloud.aws.credentials.secretKey.因此,使用 Spring Cloud AWS 将获取生成的凭据,而无需进一步配置。spring-doc.cadn.net.cn

您可以通过设置spring.cloud.vault.aws.access-key-propertyspring.cloud.vault.aws.secret-key-property.spring-doc.cadn.net.cn

对于 STS 安全Tokens,您可以通过设置spring.cloud.vault.aws.session-token-key-property.安全Tokens存储在cloud.aws.credentials.sessionToken(默认值)。spring-doc.cadn.net.cn

示例:iam_userspring-doc.cadn.net.cn

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

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

数据库后端

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

Spring Cloud Vault 与以下后端集成:spring-doc.cadn.net.cn

使用数据库密钥后端需要在配置中启用后端,并且spring-cloud-vault-config-databasesDependency。spring-doc.cadn.net.cn

Vault 从 0.7.1 开始附带一个专用的database允许通过插件进行数据库集成的秘密后端。 您可以使用通用数据库后端来使用该特定后端。 确保指定适当的后端路径,例如spring.cloud.vault.mysql.role.backend=database.spring-doc.cadn.net.cn

pom.xml
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-vault-config-databases</artifactId>
        <version>4.3.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-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

多个数据库

有时,单个数据库的凭据是不够的,因为应用程序可能会连接到两个或多个相同类型的数据库。 从 3.0.5 版本开始,Spring Vault 支持在spring.cloud.vault.databases.*Namespace。spring-doc.cadn.net.cn

该配置接受多个数据库后端,以将凭据具体化到指定的属性中。确保配置username-propertypassword-property适当地。spring-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当达到最长租赁时间时,与他们合作。 也就是说,如果max_ttlVault 中的数据库角色设置为24h这意味着在应用程序启动 24 小时后,它无法再向数据库进行身份验证。

Apache Cassandra

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

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

弹性搜索

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

Mongo数据库

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

MySQL

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-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

PostgreSQL

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-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

自定义要公开为 PropertySource 的机密后端

Spring Cloud Vault 使用基于属性的配置来创建PropertySources 表示键值和发现的机密后端。spring-doc.cadn.net.cn

发现的后端提供VaultSecretBackendDescriptorbean 来描述配置状态,以将 secret 后端用作PropertySource. 一个SecretBackendMetadataFactory需要创建一个SecretBackendMetadata包含路径、名称和属性转换配置的对象。spring-doc.cadn.net.cn

SecretBackendMetadata用于支持特定的PropertySource.spring-doc.cadn.net.cn

您可以注册一个VaultConfigurer以进行自定义。如果您提供VaultConfigurer. 但是,您可以使用SecretBackendConfigurer.registerDefaultKeyValueSecretBackends()SecretBackendConfigurer.registerDefaultDiscoveredSecretBackends().spring-doc.cadn.net.cn

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

为后端添加自定义实现需要实现两个接口:spring-doc.cadn.net.cn

VaultSecretBackendDescriptor通常是保存配置数据的对象,例如VaultDatabaseProperties. Spring Cloud Vault 要求您的类型使用@ConfigurationProperties从配置中具体化类。spring-doc.cadn.net.cn

SecretBackendMetadataFactory接受VaultSecretBackendDescriptor创建实际的SecretBackendMetadata对象,用于保存 Vault 服务器中的上下文路径,解析参数化上下文路径所需的任何路径变量,以及PropertyTransformer.spring-doc.cadn.net.cn

VaultSecretBackendDescriptorSecretBackendMetadataFactory类型必须在spring.factories这是 Spring 提供的扩展机制,类似于 Java 的 ServiceLoader。spring-doc.cadn.net.cn