Service Registry 配置

您可以使用(例如来自 Spring Cloud Consul)通过设置 spring.cloud.vault.discovery.enabled=true(默认)来定位 Vault 服务器。 这样做的最终结果是,您的应用程序需要一个具有适当发现配置的 application.yml(或环境变量)。 好处是 Vault 可以更改其坐标,只要发现服务是一个固定点。 默认服务 ID 为,但您可以在客户端上使用 更改它。DiscoveryClientfalsevaultspring.cloud.vault.discovery.serviceIdspring-doc.cn

发现客户端实现都支持某种元数据 Map(例如,对于 Eureka,我们有 eureka.instance.metadataMap)。 可能需要在其服务注册元数据中配置服务的一些其他属性,以便客户端可以正确连接。 未提供有关传输层安全性的详细信息的服务注册表需要提供要设置为 或 的元数据条目。 如果未配置方案,并且服务未作为安全服务公开,则配置默认为未设置时。schemehttpshttpspring.cloud.vault.schemehttpsspring-doc.cn

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

Vault Client 快速失败

在某些情况下,如果服务无法连接到 Vault Server,则可能希望服务启动失败。 如果这是所需的行为,请设置 bootstrap 配置属性,客户端将停止并显示 Exception。spring.cloud.vault.fail-fast=truespring-doc.cn

spring.cloud.vault:
    fail-fast: true

Vault Enterprise 命名空间支持

Vault Enterprise 允许使用命名空间在单个 Vault 服务器上隔离多个 Vault。 通过设置配置命名空间会在使用 Vault 或 时在每个传出 HTTP 请求上启用命名空间标头。spring.cloud.vault.namespace=…X-Vault-NamespaceRestTemplateWebClientspring-doc.cn

请注意,Vault 社区版不支持此功能,并且对 Vault 操作没有影响。spring-doc.cn

spring.cloud.vault:
    namespace: my-namespace

Vault Client SSL 配置

可以通过设置各种属性以声明方式配置 SSL。 您可以设置为配置 JVM 范围的 SSL 设置,也可以仅为 Spring Cloud Vault Config 设置 SSL 设置。javax.net.ssl.trustStorespring.cloud.vault.ssl.trust-storespring-doc.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设置 trust-store 的资源。 受 SSL 保护的 Vault 通信将使用指定的信任库验证 Vault SSL 证书。spring-doc.cn

  • trust-store-password设置信任存储口令spring-doc.cn

  • trust-store-type设置 trust-store 类型。支持的值是所有支持的类型,包括 .KeyStorePEMspring-doc.cn

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

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

请注意,只有当 Apache Http Components 或 OkHttp 客户端位于您的 class-path 上时,才能应用配置。spring.cloud.vault.ssl.*spring-doc.cn

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

对于每个密钥,Vault 都会创建一个租约: 元数据包含持续时间、可续订性等信息。spring-doc.cn

Vault 承诺数据在给定的持续时间或生存时间 (TTL) 内有效。 租约到期后,Vault 可以撤销数据,并且密钥的使用者无法再确定数据是否有效。spring-doc.cn

Spring Cloud Vault 在创建登录令牌和秘密之后维护租约生命周期。 也就是说,与租约关联的登录令牌和密钥计划在租约到期之前续订,直到终端到期。 应用程序关闭会撤销已获取的登录令牌和可续订租约。spring-doc.cn

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

静态令牌不会续订或撤销。

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

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

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

  • expiry-threshold设置 过期阈值。 租约在到期前续订配置的时间段。spring-doc.cn

  • lease-endpoints设置 Renew 和 Revoke 的终端节点。 旧版适用于 0.8 之前的 Vault 版本和 SysLeases 版本。spring-doc.cn

  • lease-strategy设置 (, , ) 以控制续订租约时的错误处理。LeaseStrategyDropOnErrorRetainOnErrorRetainOnIoErrorspring-doc.cn

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

Vault 会话令牌(也称为 )与租约非常相似,因为它具有 TTL、最大 TTL,并且可能会过期。 登录令牌过期后,它就不能再用于与 Vault 交互。 因此, Spring Vault 附带了一个用于命令式和反应式使用的 API。LoginTokenSessionManagerspring-doc.cn

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

会话生命周期默认处于启用状态,可以通过设置为 来禁用。 不建议禁用,因为会话令牌可能会过期,并且 Spring Cloud Vault 无法再访问 Vault。spring.cloud.vault.session.lifecycle.enabledfalsespring-doc.cn

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

  • refresh-before-expiry控制续订会话令牌的时间点。 刷新时间的计算方法是从令牌到期时间中减去。 默认为 。refresh-before-expiry5 secondsspring-doc.cn

  • expiry-threshold设置 过期阈值。 阈值表示将会话令牌视为有效的最小 TTL 持续时间。 TTL 较短的令牌被视为过期,不再使用。 应大于以防止令牌过期。 默认为 。refresh-before-expiry7 secondsspring-doc.cn