键值后端

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

/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

  • spring.profiles.active

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

  • /secret/usefulapp

  • /secret/mysql1

  • /secret/projectx/aws

Spring Cloud Vault 将所有活动配置文件添加到可能的上下文路径列表中。 任何活动配置文件都不会跳过访问具有配置文件名称的上下文。

属性像存储一样公开(即没有额外的前缀)。

Spring Cloud Vault 根据挂载是否使用版本化的键值后端,在挂载路径和实际上下文路径之间添加上下文。data/
spring.cloud.vault:
    kv:
        enabled: true
        backend: secret
        profile-separator: '/'
        default-context: application
        application-name: my-app
        profiles: local, cloud
  • enabled设置此值以禁用机密后端配置用法false

  • backend设置要使用的密钥挂载的路径

  • default-context设置所有应用程序使用的上下文名称

  • application-name覆盖应用程序名称以在键值后端中使用

  • profiles覆盖活动配置文件以在键值后端中使用

  • profile-separator使用配置文件将配置文件名称与属性源中的上下文分开

键值密钥后端支持版本化(v2)和非版本化(v1)模式运行。

另请参阅:

Spring Cloud Vault 根据挂载是否使用版本化的键值后端,在挂载路径和实际上下文路径之间添加上下文。data/
键值密钥后端支持版本化(v2)和非版本化(v1)模式运行。

领事

Spring Cloud Vault 可以获取 HashiCorp Consul 的凭据。 Consul 集成需要依赖项。spring-cloud-vault-config-consul

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

可以通过设置(默认)并提供角色名称来启用集成。spring.cloud.vault.consul.enabled=truefalsespring.cloud.vault.consul.role=…

获取的令牌存储在其中,因此使用 Spring Cloud Consul 无需进一步配置即可获取生成的凭据。 您可以通过设置 来配置属性名称。spring.cloud.consul.tokenspring.cloud.vault.consul.token-property

spring.cloud.vault:
    consul:
        enabled: true
        role: readonly
        backend: consul
        token-property: spring.cloud.consul.token
  • enabled设置此值以启用 Consul 后端配置用法true

  • role设置领事角色定义的角色名称

  • backend设置要使用的 Consul 挂载的路径

  • token-property设置存储 Consul ACL 令牌的属性名称

兔子MQ

Spring Cloud Vault 可以获取 RabbitMQ 的凭据。

RabbitMQ 集成需要依赖项。spring-cloud-vault-config-rabbitmq

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

可以通过设置(默认)并提供角色名称来启用集成。spring.cloud.vault.rabbitmq.enabled=truefalsespring.cloud.vault.rabbitmq.role=…

用户名和密码存储在其中,因此使用 Spring Boot 将获取生成的凭据,而无需进一步配置。 您可以通过设置 和 来配置属性名称。spring.rabbitmq.usernamespring.rabbitmq.passwordspring.cloud.vault.rabbitmq.username-propertyspring.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
  • enabled设置此值以启用 RabbitMQ 后端配置用法true

  • role设置 RabbitMQ 角色定义的角色名称

  • backend设置要使用的 RabbitMQ 挂载的路径

  • username-property设置存储 RabbitMQ 用户名的属性名称

  • password-property设置存储 RabbitMQ 密码的属性名称

AWS系统

Spring Cloud Vault 可以获取 AWS 的凭证。

AWS 集成需要依赖项。spring-cloud-vault-config-aws

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

可以通过设置(默认)并提供角色名称来启用集成。spring.cloud.vault.aws=truefalsespring.cloud.vault.aws.role=…

支持的 AWS 凭证类型:

  • iam_user(默认值)

  • assumed_role (STS)

  • federation_token (STS)

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

您可以通过设置 和 来配置属性名称。spring.cloud.vault.aws.access-key-propertyspring.cloud.vault.aws.secret-key-property

对于 STS 安全令牌,可以通过设置 来配置属性名称。安全令牌存储在 (defaults) 下。spring.cloud.vault.aws.session-token-key-propertycloud.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
  • enabled设置此值以启用 AWS 后端配置用法true

  • role设置 AWS 角色定义的角色名称

  • backend设置要使用的 AWS 挂载的路径

  • access-key-property设置存储 AWS 访问密钥的属性名称

  • secret-key-property设置存储 AWS 私有密钥的属性名称

  • session-token-key-property设置存储 AWS STS 安全令牌的属性名称。

  • credential-type设置用于此后端的 AWS 凭证类型。默认值为iam_user

  • ttl使用 或 时设置 STS 令牌的 ttl。默认为 vault 角色指定的 ttl。最小值/最大值也仅限于 AWS 对 STS 的支持值。assumed_rolefederation_token

  • role-arn在使用 时,如果为文件库角色配置了多个文件库角色,则将 IAM 角色设置为代入。assumed_role

数据库后端

保险柜支持多个数据库密钥后端,以便根据配置的角色动态生成数据库凭据。 这意味着需要访问数据库的服务不再需要配置凭据:它们可以从 Vault 请求凭据,并使用 Vault 的租用机制更轻松地滚动密钥。

Spring Cloud Vault 与以下后端集成:

使用数据库密钥后端需要在配置和依赖项中启用后端。spring-cloud-vault-config-databases

Vault 从 0.7.1 开始提供专用的秘密后端,允许通过插件集成数据库。 您可以使用通用数据库后端来使用该特定后端。 确保指定适当的后端路径,例如 .databasespring.cloud.vault.mysql.role.backend=database

pom.xml
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-vault-config-databases</artifactId>
        <version>4.1.2</version>
    </dependency>
</dependencies>
启用多个符合 JDBC 的数据库将生成凭据,并默认将它们存储在相同的属性键中,因此需要单独配置 JDBC 密钥的属性名称。
启用多个符合 JDBC 的数据库将生成凭据,并默认将它们存储在相同的属性键中,因此需要单独配置 JDBC 密钥的属性名称。

数据库

Spring Cloud Vault 可以获取 www.vaultproject.io/api/secret/databases/index.html 中列出的任何数据库的凭据。 可以通过设置(默认)并提供角色名称来启用集成。spring.cloud.vault.database.enabled=truefalsespring.cloud.vault.database.role=…

虽然数据库后端是通用的,但专门针对 JDBC 数据库。 用户名和密码可从 和 属性 因此,使用 Spring Boot 将为您获取生成的凭据,而无需进一步配置。 您可以通过设置 和 来配置属性名称。spring.cloud.vault.databasespring.datasource.usernamespring.datasource.passwordDataSourcespring.cloud.vault.database.username-propertyspring.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.*

该配置接受多个数据库后端,以将凭据具体化到指定的属性中。确保配置和适当。username-propertypassword-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 不支持在达到最长租用时间时获取新凭据并使用它们进行配置。 也就是说,如果 Vault 中的数据库角色设置为 that 表示在应用程序启动 24 小时后,它无法再向数据库进行身份验证。DataSourcemax_ttl24h
Spring Cloud Vault 不支持在达到最长租用时间时获取新凭据并使用它们进行配置。 也就是说,如果 Vault 中的数据库角色设置为 that 表示在应用程序启动 24 小时后,它无法再向数据库进行身份验证。DataSourcemax_ttl24h

Apache Cassandra

后端在 Vault 0.7.1 中已弃用,建议使用后端并将其挂载为 .cassandradatabasecassandra

Spring Cloud Vault 可以获取 Apache Cassandra 的凭据。 可以通过设置(默认)并提供角色名称来启用集成。spring.cloud.vault.cassandra.enabled=truefalsespring.cloud.vault.cassandra.role=…

用户名和密码可从 和 属性获得,因此使用 Spring Boot 将获取生成的凭据,而无需进一步配置。 您可以通过设置 和 来配置属性名称。spring.data.cassandra.usernamespring.data.cassandra.passwordspring.cloud.vault.cassandra.username-propertyspring.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设置此值以启用 Cassandra 后端配置用法true

  • role设置 Cassandra 角色定义的角色名称

  • backend设置要使用的 Cassandra 装载的路径

  • username-property设置存储 Cassandra 用户名的属性名称

  • password-property设置存储 Cassandra 密码的属性名称

后端在 Vault 0.7.1 中已弃用,建议使用后端并将其挂载为 .cassandradatabasecassandra

Couchbase 数据库

Spring Cloud Vault 可以获取 Couchbase 的凭据。 可以通过设置(默认)并提供角色名称来启用集成。spring.cloud.vault.couchbase.enabled=truefalsespring.cloud.vault.couchbase.role=…

用户名和密码可从 和 属性获得,因此使用 Spring Boot 将获取生成的凭据,而无需进一步配置。 您可以通过设置 和 来配置属性名称。spring.couchbase.usernamespring.couchbase.passwordspring.cloud.vault.couchbase.username-propertyspring.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
  • enabled设置此值以启用 Couchbase 后端配置用法true

  • role设置 Couchbase 角色定义的角色名称

  • backend设置要使用的 Couchbase 挂载的路径

  • username-property设置存储 Couchbase 用户名的属性名称

  • password-property设置存储 Couchbase 密码的属性名称

Смотритетакже: Couchbase 数据库插件文档

Elasticsearch 的

Spring Cloud Vault 可以获取 Elasticsearch 的 3.0 版本凭据。 可以通过设置(默认)并提供角色名称来启用集成。spring.cloud.vault.elasticsearch.enabled=truefalsespring.cloud.vault.elasticsearch.role=…

用户名和密码可从 和 属性获得,因此使用 Spring Boot 将获取生成的凭据,而无需进一步配置。 您可以通过设置 和 来配置属性名称。spring.elasticsearch.rest.usernamespring.elasticsearch.rest.passwordspring.cloud.vault.elasticsearch.username-propertyspring.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设置此值以启用 Elasticsearch 数据库后端配置用法true

  • role设置 Elasticsearch 角色定义的角色名称

  • backend设置要使用的 Elasticsearch 挂载的路径

  • username-property设置存储 Elasticsearch 用户名的属性名称

  • password-property设置存储 Elasticsearch 密码的属性名称

MongoDB的

后端在 Vault 0.7.1 中已弃用,建议使用后端并将其挂载为 .mongodbdatabasemongodb

Spring Cloud Vault 可以获取 MongoDB 的凭据。 可以通过设置(默认)并提供角色名称来启用集成。spring.cloud.vault.mongodb.enabled=truefalsespring.cloud.vault.mongodb.role=…

用户名和密码存储在其中,因此使用 Spring Boot 将获取生成的凭据,而无需进一步配置。 您可以通过设置 和 来配置属性名称。spring.data.mongodb.usernamespring.data.mongodb.passwordspring.cloud.vault.mongodb.username-propertyspring.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设置此值以启用 MongodB 后端配置用法true

  • role设置MongoDB角色定义的角色名称

  • backend设置要使用的 MongoDB 挂载的路径

  • username-property设置存储MongoDB用户名的属性名称

  • password-property设置存储 MongoDB 密码的属性名称

后端在 Vault 0.7.1 中已弃用,建议使用后端并将其挂载为 .mongodbdatabasemongodb

MySQL的

后端在 Vault 0.7.1 中已弃用,建议使用后端并将其挂载为 . 的配置将在将来的版本中删除。mysqldatabasemysqlspring.cloud.vault.mysql

Spring Cloud Vault可以获取MySQL的凭证。 可以通过设置(默认)并提供角色名称来启用集成。spring.cloud.vault.mysql.enabled=truefalsespring.cloud.vault.mysql.role=…

用户名和密码可从 和 属性获得,因此使用 Spring Boot 将获取生成的凭据,而无需进一步配置。 您可以通过设置 和 来配置属性名称。spring.datasource.usernamespring.datasource.passwordspring.cloud.vault.mysql.username-propertyspring.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设置此值以启用 MySQL 后端配置用法true

  • role设置 MySQL 角色定义的角色名称

  • backend设置要使用的 MySQL 挂载的路径

  • username-property设置存储MySQL用户名的属性名称

  • password-property设置存储MySQL密码的属性名称

后端在 Vault 0.7.1 中已弃用,建议使用后端并将其挂载为 . 的配置将在将来的版本中删除。mysqldatabasemysqlspring.cloud.vault.mysql

PostgreSQL的

后端在 Vault 0.7.1 中已弃用,建议使用后端并将其挂载为 . 的配置将在将来的版本中删除。postgresqldatabasepostgresqlspring.cloud.vault.postgresql

Spring Cloud Vault 可以获取 PostgreSQL 的凭据。 可以通过设置(默认)并提供角色名称来启用集成。spring.cloud.vault.postgresql.enabled=truefalsespring.cloud.vault.postgresql.role=…

用户名和密码可从 和 属性获得,因此使用 Spring Boot 将获取生成的凭据,而无需进一步配置。 您可以通过设置 和 来配置属性名称。spring.datasource.usernamespring.datasource.passwordspring.cloud.vault.postgresql.username-propertyspring.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设置此值以启用 PostgreSQL 后端配置用法true

  • role设置 PostgreSQL 角色定义的角色名称

  • backend设置要使用的 PostgreSQL 挂载的路径

  • username-property设置存储 PostgreSQL 用户名的属性名称

  • password-property设置存储 PostgreSQL 密码的属性名称

后端在 Vault 0.7.1 中已弃用,建议使用后端并将其挂载为 . 的配置将在将来的版本中删除。postgresqldatabasepostgresqlspring.cloud.vault.postgresql

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

Spring Cloud Vault 使用基于属性的配置为键值和发现的密钥后端创建 s。PropertySource

发现的后端提供 Bean 来描述使用机密后端的配置状态。 创建一个包含路径、名称和属性转换配置的对象是必需的。VaultSecretBackendDescriptorPropertySourceSecretBackendMetadataFactorySecretBackendMetadata

SecretBackendMetadata用于支持特定的 .PropertySource

您可以注册一个进行自定义。 如果提供 . 但是,您可以使用 和 启用默认注册。VaultConfigurerVaultConfigurerSecretBackendConfigurer.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通常是保存配置数据的对象,例如 。Spring Cloud Vault 要求您的类型带有注释,以便从配置中具体化类。VaultDatabaseProperties@ConfigurationProperties

SecretBackendMetadataFactoryaccept 创建实际对象,该对象保存 Vault 服务器中的上下文路径、解析参数化上下文路径所需的任何路径变量和 .VaultSecretBackendDescriptorSecretBackendMetadataPropertyTransformer

两者都必须注册,其中 Spring 提供了一种扩展机制,类似于 Java 的 ServiceLoader。VaultSecretBackendDescriptorSecretBackendMetadataFactoryspring.factories