对于最新稳定版本,请使用 Spring Cloud Vault 5.0.1!spring-doc.cadn.net.cn

服务注册表配置

You can use a DiscoveryClient (such as from Spring Cloud Consul) to locate a Vault server by setting spring.cloud.vault.discovery.enabled=true (default false). The net result of that is that your apps need a application.yml (or an environment variable) with the appropriate discovery configuration. The benefit is that the Vault can change its co-ordinates, as long as the discovery service is a fixed point. The default service id is vault but you can change that on the client with spring.cloud.vault.discovery.serviceId.spring-doc.cadn.net.cn

The discovery client implementations all support some kind of metadata map (e.g. for Eureka we have eureka.instance.metadataMap). 一些额外的 service 属性可能需要在其服务注册的 metadata 中进行配置,以便客户端能够正确连接。 不提供传输层安全详细信息的服务注册需要在 metadata 中提供一个值为 scheme 的条目,将其设置为 httpshttp。 如果未配置方案且服务未作为安全服务暴露,则配置默认为 spring.cloud.vault.scheme,在未设置时为 httpsspring-doc.cadn.net.cn

spring.cloud.vault.discovery:
    enabled: true
    service-id: my-vault-service

Vault 客户端立即失败

在某些情况下,可能希望在服务无法连接到Vault服务器时导致服务启动失败。 如果这是期望的行为,请将启动配置属性设置为 spring.cloud.vault.fail-fast=true,客户端将抛出异常并停止。spring-doc.cadn.net.cn

spring.cloud.vault:
    fail-fast: true

Vault Enterprise 命名空间支持

Vault Enterprise 允许使用命名空间来在单个 Vault 服务器上隔离多个 Vaults。 通过将 spring.cloud.vault.namespace=… 设置为启用命名空间头 X-Vault-Namespace ,当使用 Vault 的 RestTemplateWebClient 时,会在每个外出 HTTP 请求中包含该头。spring-doc.cadn.net.cn

请注意,该功能不受 Vault 社区版支持,对 Vault 的操作没有影响。spring-doc.cadn.net.cn

spring.cloud.vault:
    namespace: my-namespace

Vault Client SSL 配置

SSL 可通过设置各种属性进行声明式配置。 您可以设置 javax.net.ssl.trustStore 以配置 JVM 级别的 SSL 设置,或设置 spring.cloud.vault.ssl.trust-store 仅为 Spring Cloud Vault Config 配置 SSL 设置。spring-doc.cadn.net.cn

spring.cloud.vault:
    ssl:
        trust-store: classpath:keystore.jks
        trust-store-password: changeit
        trust-store-type: JKS
        enabled-protocols: TLSv1.2,TLSv1.3
        enabled-cipher-suites: TLS_AES_128_GCM_SHA256
  • trust-store 设置信任存储的资源。 SSL 加密的 Vault 通信将使用指定的信任存储验证 Vault 的 SSL 证书。spring-doc.cadn.net.cn

  • trust-store-password 设置信任存储库的密码spring-doc.cadn.net.cn

  • trust-store-type 设置信任存储的类型。支持的值包括所有支持的 KeyStore 类型包括 PEMspring-doc.cadn.net.cn

  • enabled-protocols 设置启用的 SSL/TLS 协议列表(自 3.0.2 起)。spring-doc.cadn.net.cn

  • enabled-cipher-suites 设置启用的 SSL/TLS 密码套件列表(自 3.0.2 起)。spring-doc.cadn.net.cn

请注意,当您的类路径上包含 Apache Http Components 或 OkHttp 客户端时,配置 spring.cloud.vault.ssl.* 才能适用。spring-doc.cadn.net.cn

租赁生命周期管理(续订和撤销)

随着每个秘密,Vault 创建一个租约: 元数据包含诸如持续时间、可续期性等信息。spring-doc.cadn.net.cn

Vault 承诺该数据在给定的持续时间(Time To Live,TTL)内是有效的。 一旦租约到期,Vault 可以撤销该数据,使用该密钥的消费者就无法再确定其有效性。spring-doc.cadn.net.cn

Spring Cloud Vault 维护着登录Tokens和机密的租约生命周期。 也就是说,与租约关联的登录Tokens和机密会在租约到期前安排续期,直到最终到期。 应用程序关闭会撤销已获得的登录Tokens和可续期租约。spring-doc.cadn.net.cn

秘密服务和数据库后端(如MongoDB或MySQL)通常会生成可续期的租约,因此生成的凭据在应用程序关闭时将被禁用。spring-doc.cadn.net.cn

静态Tokens不会刷新或撤销。

租约续期和撤销默认启用,可以通过将 false 设置为 spring.cloud.vault.config.lifecycle.enabled 来禁用。 不推荐这样做,因为租约会到期,Spring Cloud Vault 将无法再访问 Vault 或使用生成凭据的服务,且在应用程序关闭后,仍然会保留有效的凭据。spring-doc.cadn.net.cn

spring.cloud.vault:
    config.lifecycle:
    	enabled: true
    	min-renewal: 10s
    	expiry-threshold: 1m
    	lease-endpoints: Legacy
  • enabled 控制是否将与 secrets 相关联的租约视为续期,过期的 secrets 会进行轮换。 默认启用。spring-doc.cadn.net.cn

  • min-renewal 设置在续租前至少需要的持续时间。 此设置防止续租过于频繁。spring-doc.cadn.net.cn

  • expiry-threshold 设置过期阈值。 租约在其到期前配置的时间段后会自动续期。spring-doc.cadn.net.cn

  • lease-endpoints 设置续签和撤销端点。 适用于 vault 版本早于 0.8 的遗留配置,以及后续的 SysLeases。spring-doc.cadn.net.cn

  • lease-strategyLeaseStrategyDropOnError, RetainOnError, RetainOnIoError)设置为在续租时控制错误处理。spring-doc.cadn.net.cn

会话Tokens生命周期管理(续期、重新登录和撤销)

一个Vault会话Tokens(也称为 LoginToken)与租约很相似,因为它具有TTL、最大TTL,并且可能会过期。 一旦登录Tokens过期,就无法再使用它与Vault进行交互。 因此,Spring Vault提供了面向声明式和响应式使用的 SessionManager API。spring-doc.cadn.net.cn

Spring Cloud Vault 默认维护会话Tokens的生命周期。 会话Tokens是懒加载获取的,因此实际登录会延迟到首次使用与Vault绑定的会话时进行。 一旦Spring Cloud Vault获取到会话Tokens,它会保留该Tokens直到过期。 下一次使用与会话绑定的活动时,Spring Cloud Vault会重新登录到Vault并获取新的会话Tokens。 在应用程序关闭时,如果Tokens仍处于活动状态,Spring Cloud Vault会撤销该Tokens以终止会话。spring-doc.cadn.net.cn

会话生命周期默认启用,可通过将 false 设置为 spring.cloud.vault.session.lifecycle.enabled 来禁用。 禁用不被推荐,因为会话Tokens可能会过期,Spring Cloud Vault 将无法再访问 Vault。spring-doc.cadn.net.cn

spring.cloud.vault:
    session.lifecycle:
        enabled: true
        refresh-before-expiry: 10s
        expiry-threshold: 20s
  • enabled 控制是否启用会话生命周期管理以刷新会话Tokens。 默认启用。spring-doc.cadn.net.cn

  • refresh-before-expiry 控制会话Tokens在何时刷新。 刷新时间通过从Tokens过期时间减去 refresh-before-expiry 计算得出。 默认值为 5 secondsspring-doc.cadn.net.cn

  • expiry-threshold设置过期阈值。 该阈值表示考虑会话Tokens有效的最小TTL持续时间。 TTL较短的Tokens被视为已过期且不再使用。 应大于refresh-before-expiry以防止Tokens过期。 默认值为7 secondsspring-doc.cadn.net.cn