Service Registry Configuration

您可以使用 DiscoveryClient(例如来自 Spring Cloud Consul)通过设置 spring.cloud.vault.discovery.enabled=true(默认 false)来找到 Vault 服务器。最终结果是您的应用程序需要一个 application.yml(或一个环境变量)带有适当的发现配置。这样做的好处是只要发现服务是一个固定点,Vault 就可以更改其坐标。默认服务 ID 是 vault,但您可以使用`spring.cloud.vault.discovery.serviceId`在客户端上更改它。 所有发现客户端实现都支持某种元数据映射(例如,对于 Eureka,我们有 eureka.instance.metadataMap)。服务的某些附加属性可能需要在其服务注册元数据中进行配置,以便客户端可以正常连接。不提供传输层安全性详细信息的服务注册表需要提供一个 scheme 元数据条目,将其设置为 httpshttp。如果未配置方案并且服务未公开为安全服务,则配置默认为 spring.cloud.vault.scheme,在未设置时为 https

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

Vault Client Fail Fast

在某些情况下,如果无法连接到 Vault 服务器,可能需要让服务的启动失败。如果是这种期望的行为,请设置引导配置属性`spring.cloud.vault.fail-fast=true`,客户端将停止并引发异常。

spring.cloud.vault:
    fail-fast: true

Vault Enterprise Namespace Support

Vault Enterprise 可以使用命名空间将多个 Vault 隔离在单个 Vault 服务器上。通过设置`spring.cloud.vault.namespace=…`配置命名空间可以在使用 Vault `RestTemplate`或 `WebClient`时对每个传出 HTTP 请求启用`X-Vault-Namespace`标题。

请注意,此功能不受 Vault 社区版支持,并且不会对 Vault 操作产生任何影响。

spring.cloud.vault:
    namespace: my-namespace

Vault Client SSL configuration

可以通过设置各种属性来以声明方式配置 SSL。您可以设置 `javax.net.ssl.trustStore`以配置全 JVM SSL 设置,也可以设置`spring.cloud.vault.ssl.trust-store`仅为 Spring Cloud Vault Config 设置 SSL 设置。

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 证书。

  • trust-store-password 设置信托库密码

  • trust-store-type 设置信托库类型。支持的值是所有受支持的 KeyStore 类型包括 PEM

  • enabled-protocols 设置启用的 SSL/TLS 协议的列表(自 3.0.2 起)。

  • enabled-cipher-suites 设置已启用 SSL/TLS 密码套件的列表(自 3.0.2 起)。

请注意,配置 `spring.cloud.vault.ssl.*`仅当 Apache Http Components 或 okhttp 客户端位于您的类路径中时才能应用。

Lease lifecycle management (renewal and revocation)

对于每个机密,Vault 都会创建一个租赁:包含时段、可续期性和更多信息等数据的元数据。

Vault 承诺数据在给定的期限内或生存时间 (TTL) 内有效。一旦租赁期满,Vault 就可以撤销数据,并且机密的使用者将不再确定它是否有效。

Spring Cloud Vault 在创建登录令牌和机密之外维护租赁生命周期。也就是说,与租赁关联的登录令牌和机密计划在租赁到期之前续订,直至最终到期。应用程序关闭将撤销已获得的登录令牌和可续期租赁。

机密服务和数据库后端(如 MongoDB 或 MySQL)通常会生成可续期租赁,因此在应用程序关闭时会禁用生成的证书。

静态标记不会被更新或撤销。

租赁续订和吊销默认情况下处于启用状态,可以通过设置 `spring.cloud.vault.config.lifecycle.enabled`为 `false`来禁用。不建议这样做,因为租赁可能会过期,并且 Spring Cloud Vault 无法再使用生成的证书访问 Vault 或服务,且有效的证书在应用程序关闭后仍处于活动状态。

spring.cloud.vault:
    config.lifecycle:
    	enabled: true
    	min-renewal: 10s
    	expiry-threshold: 1m
    	lease-endpoints: Legacy
  • enabled 控制与机密关联的租赁是否被认为已续订,以及过期的机密是否已轮换。默认情况下已启用。

  • min-renewal 设置更新租约前至少所需持续时间。此设置可防止续订过于频繁。

  • expiry-threshold 设置到期阈值。租赁续订在到期前配置的时间段内进行。

  • lease-endpoints 设置用于续订和吊销的端点。适用于 0.8 之前的保险库版本以及适用于更高版本的 SysLeases。

  • lease-strategy 设置 LeaseStrategy (DropOnError, RetainOnError, RetainOnIoError) 以控制租约续订时的错误处理。

Session token lifecycle management (renewal, re-login and revocation)

Vault 会话令牌(也称为`LoginToken`)与租赁非常相似,因为它有 TTL、最大 TTL,并且可能会过期。一旦登录令牌过期,就无法再使用它与 Vault 交互。因此,Spring Vault 附带了一个用于命令式和响应式用途的`SessionManager` API。

Spring Cloud Vault 默认情况下维护会话令牌生命周期。会话令牌是惰性获取的,因此实际登录被延迟,直到第一次会话绑定使用 Vault。一旦 Spring Cloud Vault 获得会话令牌,它就会保留它,直到它过期。下次使用会话绑定活动时,Spring Cloud Vault 将重新登录到 Vault 并获取一个新的会话令牌。在应用程序关闭时,如果会话令牌仍处于活动状态,Spring Cloud Vault 将撤销该令牌以终止会话。

会话生命周期默认启用,可以通过将 `spring.cloud.vault.session.lifecycle.enabled`设置为`false`来禁用它。不建议禁用,因为会话令牌可能会过期,并且 Spring Cloud Vault 将无法再访问 Vault。

spring.cloud.vault:
    session.lifecycle:
        enabled: true
        refresh-before-expiry: 10s
        expiry-threshold: 20s
  • enabled 控制是否启用会话生命周期管理以续订会话标记。默认为启用。

  • refresh-before-expiry 控制会话标记续订时间点。刷新时间通过从标记到期时间减去 refresh-before-expiry 计算得出。默认为 5 seconds

  • expiry-threshold 设置到期阈值。阈值表示将会话标记视为有效时要考虑的最小 TTL 持续时间。TTL 较短的标记被视为已过期,并且不再使用。应大于 refresh-before-expiry 以防止标记过期。默认为 7 seconds