服务注册中心配置
您可以使用 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 元数据条目,该条目需要设置为 https 或 http。如果未配置 scheme 并且服务未暴露为安全服务,则配置默认为 spring.cloud.vault.scheme,如果未设置,则为 https。
spring.cloud.vault.discovery:
enabled: true
service-id: my-vault-service
Vault 客户端快速失败
在某些情况下,如果服务无法连接到 Vault 服务器,可能需要使服务启动失败。如果这是期望的行为,请设置引导配置属性 spring.cloud.vault.fail-fast=true,客户端将抛出异常并停止。
spring.cloud.vault:
fail-fast: true
Vault Enterprise 命名空间支持
Vault Enterprise 允许使用命名空间在单个 Vault 服务器上隔离多个 Vault。通过设置 spring.cloud.vault.namespace=… 配置命名空间后,在使用 Vault RestTemplate 或 WebClient 时,每个出站 HTTP 请求都会启用命名空间头 X-Vault-Namespace。
请注意,Vault Community 版本不支持此功能,并且对 Vault 操作没有影响。
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.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 客户端在您的类路径上时才能应用。
租约生命周期管理(续期和撤销)
对于每个密钥,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设置续期和撤销的端点。对于 Vault 0.8 版本之前是 Legacy,之后是 SysLeases。 -
lease-strategy设置LeaseStrategy(DropOnError,RetainOnError,RetainOnIoError) 以控制租约续期时的错误处理。
另请参阅:Vault 文档:租约、续期和撤销
会话令牌生命周期管理(续期、重新登录和撤销)
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 秒。 -
expiry-threshold设置到期阈值。该阈值表示一个最小 TTL 持续时间,以将会话令牌视为有效。TTL 较短的令牌被视为已过期,不再使用。应大于refresh-before-expiry以防止令牌过期。默认为7 秒。
另请参阅:Vault 文档:令牌续订