对于最新稳定版本,请使用 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 的条目,将其设置为 https 或 http。 如果未配置方案且服务未作为安全服务暴露,则配置默认为 spring.cloud.vault.scheme,在未设置时为 https。spring-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 的 RestTemplate 或 WebClient 时,会在每个外出 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 类型包括 PEM。spring-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-strategy 将 LeaseStrategy (DropOnError, 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 seconds。spring-doc.cadn.net.cn

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