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

服务注册表配置

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

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

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

Vault 客户端快速失败

在某些情况下,如果服务无法连接到 Vault Server,则可能需要无法启动服务。 如果这是所需的行为,请设置引导配置属性spring.cloud.vault.fail-fast=true客户端将停止并出现异常。spring-doc.cadn.net.cn

spring.cloud.vault:
    fail-fast: true

Vault Enterprise 命名空间支持

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

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

spring.cloud.vault:
    namespace: my-namespace

Vault 客户端 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

请注意,配置spring.cloud.vault.ssl.*只能在 Apache Http 组件或 OkHttp 客户端位于您的类路径上时应用。spring-doc.cadn.net.cn

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

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

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

Spring Cloud Vault 维护了创建登录Tokens和密钥之外的租赁生命周期。 也就是说,与租约关联的登录Tokens和机密计划在租约到期之前续订,直到终端到期。 应用程序关闭会撤销获得的登录Tokens和可续订租约。spring-doc.cadn.net.cn

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

静态Tokens不会续订或撤销。

租约续订和撤销默认处于启用状态,可以通过设置spring.cloud.vault.config.lifecycle.enabledfalse. 不建议这样做,因为租约可能会过期,并且 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控制是否将与机密关联的租约视为续订,以及是否轮换过期的机密。 默认启用。spring-doc.cadn.net.cn

  • min-renewal设置续租前至少需要的工期。 此设置可防止续订过于频繁。spring-doc.cadn.net.cn

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

  • lease-endpoints设置续订和撤销的端点。 0.8 之前的保管库版本为旧版,SysLeases 为更高版本。spring-doc.cadn.net.cn

  • lease-strategyLeaseStrategy (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,它就会保留它直到到期。 下次使用会话绑定活动时,Spring Cloud Vault 会重新登录到 Vault 并获取新的会话Tokens。 在应用程序关闭时,如果Tokens仍然处于活动状态,Spring Cloud Vault 会撤销Tokens以终止会话。spring-doc.cadn.net.cn

会话生命周期默认启用,可以通过设置spring.cloud.vault.session.lifecycle.enabledfalse. 不建议禁用,因为会话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续订的时间点。 刷新时间的计算方法是减去refresh-before-expiry从Tokens到期时间开始。 默认为5 seconds.spring-doc.cadn.net.cn

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