Service Registry 配置
您可以使用DiscoveryClient
(例如从 Spring Cloud Consul 中)来定位 Vault 服务器,通过设置 spring.cloud.vault.discovery.enabled=true(默认false
).
这样做的最终结果是,您的应用程序需要一个具有适当发现配置的 application.yml(或环境变量)。
好处是 Vault 可以更改其坐标,只要发现服务是一个固定点。
默认服务 ID 为vault
但你可以在客户端上使用spring.cloud.vault.discovery.serviceId
.
发现客户端实现都支持某种元数据 Map(例如,对于 Eureka,我们有 eureka.instance.metadataMap)。
可能需要在其服务注册元数据中配置服务的一些其他属性,以便客户端可以正确连接。
未提供有关传输层安全性详细信息的服务注册表需要提供scheme
metadata 条目设置为https
或http
.
如果未配置方案,并且服务未作为安全服务公开,则配置默认为spring.cloud.vault.scheme
哪个是https
未设置时。
spring.cloud.vault.discovery:
enabled: true
service-id: my-vault-service
Vault Client 快速失败
在某些情况下,如果服务无法连接到 Vault Server,则可能希望服务启动失败。
如果这是所需的行为,请设置 bootstrap 配置属性spring.cloud.vault.fail-fast=true
客户端将停止并显示 Exception。
spring.cloud.vault:
fail-fast: true
Vault Enterprise 命名空间支持
Vault Enterprise 允许使用命名空间在单个 Vault 服务器上隔离多个 Vault。
通过设置spring.cloud.vault.namespace=…
启用 Namespace 标头X-Vault-Namespace
在使用 Vault 时的每个传出 HTTP 请求上RestTemplate
或WebClient
.
请注意,Vault 社区版不支持此功能,并且对 Vault作没有影响。
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.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 证书。 -
trust-store-password
设置信任存储口令 -
trust-store-type
设置 trust-store 类型。支持的值均受支持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 客户端位于您的 class-path 上时,才能应用。
租约生命周期管理(续订和撤销)
对于每个密钥,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
设置 Renew 和 Revoke 的终端节点。 旧版适用于 0.8 之前的 Vault 版本和 SysLeases 版本。 -
lease-strategy
将LeaseStrategy
(DropOnError
,RetainOnError
,RetainOnIoError
) 来控制续订租约时的错误处理。
会话令牌生命周期管理(续订、重新登录和撤销)
Vault 会话令牌(也称为LoginToken
) 与租约非常相似,因为它具有 TTL、最大 TTL,并且可能会过期。
登录令牌过期后,它就不能再用于与 Vault 交互。
因此, Spring Vault 附带了SessionManager
用于命令式和反应式使用的 API。
Spring Cloud Vault 默认维护会话令牌生命周期。 会话令牌是延迟获取的,因此实际登录被推迟到第一次会话绑定使用 Vault 时。 一旦 Spring Cloud Vault 获得会话令牌,它就会保留它直到到期。 下次使用 session-bound 活动时, Spring Cloud Vault 会重新登录到 Vault 并获取新的会话令牌。 在应用程序关闭时, Spring Cloud 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
.