Service Registry Configuration
您可以使用 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
。如果未配置方案并且服务未公开为安全服务,则配置默认为 spring.cloud.vault.scheme
,在未设置时为 https
。
spring.cloud.vault.discovery:
enabled: true
service-id: my-vault-service
Vault Client Fail Fast
在某些情况下,如果无法连接到 Vault 服务器,可能需要让服务的启动失败。如果是这种期望的行为,请设置引导配置属性`spring.cloud.vault.fail-fast=true`,客户端将停止并引发异常。
spring.cloud.vault:
fail-fast: true
Vault Enterprise Namespace Support
Vault Enterprise 可以使用命名空间将多个 Vault 隔离在单个 Vault 服务器上。通过设置`spring.cloud.vault.namespace=…`配置命名空间可以在使用 Vault `RestTemplate`或 `WebClient`时对每个传出 HTTP 请求启用`X-Vault-Namespace`标题。
请注意,此功能不受 Vault 社区版支持,并且不会对 Vault 操作产生任何影响。
spring.cloud.vault:
namespace: my-namespace
Vault Client SSL configuration
可以通过设置各种属性来以声明方式配置 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 客户端位于您的类路径中时才能应用。
Lease lifecycle management (renewal and revocation)
对于每个机密,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
设置用于续订和吊销的端点。适用于 0.8 之前的保险库版本以及适用于更高版本的 SysLeases。 -
lease-strategy
设置LeaseStrategy
(DropOnError
,RetainOnError
,RetainOnIoError
) 以控制租约续订时的错误处理。
Session token lifecycle management (renewal, re-login and revocation)
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 seconds
。 -
expiry-threshold
设置到期阈值。阈值表示将会话标记视为有效时要考虑的最小 TTL 持续时间。TTL 较短的标记被视为已过期,并且不再使用。应大于refresh-before-expiry
以防止标记过期。默认为7 seconds
。