您可以使用(例如从 Spring Cloud Consul)通过设置 spring.cloud.vault.discovery.enabled=true(默认值)来查找 Vault 服务器。
这样做的最终结果是,你的应用需要具有适当发现配置的application.yml(或环境变量)。
这样做的好处是,只要发现服务是固定点,Vault 就可以更改其坐标。
默认服务 ID 为 ,但您可以在客户端上使用 进行更改。DiscoveryClient
false
vault
spring.cloud.vault.discovery.serviceId
发现客户端实现都支持某种元数据映射(例如,对于 Eureka,我们有 eureka.instance.metadataMap)。
可能需要在其服务注册元数据中配置服务的某些其他属性,以便客户端可以正确连接。
不提供有关传输层安全性的详细信息的服务注册表需要提供要设置为 或 的元数据条目。
如果未配置方案,并且服务未公开为安全服务,则配置默认为未设置时。scheme
https
http
spring.cloud.vault.scheme
https
spring.cloud.vault.discovery:
enabled: true
service-id: my-vault-service
Vault 客户端快速失败
在某些情况下,如果服务无法连接到 Vault Server,则可能需要使服务启动失败。
如果这是所需的行为,请设置引导配置属性,客户端将停止并出现异常。spring.cloud.vault.fail-fast=true
spring.cloud.vault:
fail-fast: true
Vault Enterprise 命名空间支持
Vault Enterprise 允许使用命名空间在单个 Vault 服务器上隔离多个 Vault。
通过设置配置命名空间可在使用 Vault 或 时在每个传出 HTTP 请求上启用命名空间标头。spring.cloud.vault.namespace=…
X-Vault-Namespace
RestTemplate
WebClient
请注意,Vault 社区版不支持此功能,并且对 Vault 操作没有影响。
spring.cloud.vault:
namespace: my-namespace
Vault Client SSL配置
SSL 可以通过设置各种属性以声明方式进行配置。
您可以设置为配置 JVM 范围的 SSL 设置,也可以设置为仅为 Spring Cloud Vault Config 设置 SSL 设置。javax.net.ssl.trustStore
spring.cloud.vault.ssl.trust-store
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 开始)。
请注意,仅当 Apache Http 组件或 OkHttp 客户端位于类路径上时,才能应用配置。spring.cloud.vault.ssl.*
租约生命周期管理(续订和撤销)
对于每个密钥,保险柜都会创建一个租约: 包含持续时间、可续订性等信息的元数据。
保险柜承诺数据将在给定的持续时间或生存时间 (TTL) 内有效。 租约到期后,保险柜可以撤销数据,并且密钥的使用者无法再确定数据是否有效。
Spring Cloud Vault 在创建登录令牌和密钥之后维护租约生命周期。 也就是说,与租约关联的登录令牌和机密计划在租约到期前续订,直到终端到期。 应用程序关闭会撤销已获得的登录令牌和可续期租约。
秘密服务和数据库后端(如MongoDB或MySQL)通常会生成可续期租约,因此生成的凭据将在应用程序关闭时被禁用。
静态令牌不会续订或撤销。 |
默认情况下,租约续订和撤销处于启用状态,可以通过设置为 来禁用。
不建议这样做,因为租约可能会过期,并且Spring Cloud Vault无法再使用生成的凭据访问Vault或服务,并且有效凭据在应用程序关闭后仍处于活动状态。spring.cloud.vault.config.lifecycle.enabled
false
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 之前的 vault 版本为 Legacy,更高版本为 SysLeases。 -
lease-strategy
设置 (, , ) 以控制续订时的错误处理。LeaseStrategy
DropOnError
RetainOnError
RetainOnIoError
另请参阅:Vault 文档:租赁、续订和撤销
静态令牌不会续订或撤销。 |
会话令牌生命周期管理(续订、重新登录和吊销)
Vault 会话令牌(也称为 )与租约非常相似,因为它具有 TTL(最大 TTL),并且可能会过期。
登录令牌过期后,将无法再用于与保险柜交互。
因此,Spring Vault附带了一个API,用于命令式和被动式使用。LoginToken
SessionManager
默认情况下,Spring Cloud Vault 会维护会话令牌生命周期。 会话令牌是延迟获取的,因此实际登录会延迟到第一次会话绑定使用 Vault。 Spring Cloud Vault 获得会话令牌后,会将其保留到到期。 下次使用会话绑定活动时,Spring Cloud Vault 会重新登录到 Vault 并获取新的会话令牌。 在应用程序关闭时,如果令牌仍处于活动状态,则Spring Cloud Vault会撤销该令牌以终止会话。
会话生命周期默认处于启用状态,可以通过设置为 来禁用。
不建议禁用,因为会话令牌可能会过期,并且 Spring Cloud Vault 无法再访问 Vault。spring.cloud.vault.session.lifecycle.enabled
false
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
另请参阅:Vault 文档:令牌续订